1
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd">
3
<!-- Created on April 1, 2013 by texi2html 1.82
4
texi2html was written by:
5
Lionel Cons <Lionel.Cons@cern.ch> (original author)
6
Karl Berry <karl@freefriends.org>
7
Olaf Bachmann <obachman@mathematik.uni-kl.de>
9
Maintained by: Many creative people.
10
Send bugs and suggestions to <texi2html-bug@nongnu.org>
13
<title>Enigma Reference Manual</title>
15
<meta name="description" content="Enigma Reference Manual">
16
<meta name="keywords" content="Enigma Reference Manual">
17
<meta name="resource-type" content="document">
18
<meta name="distribution" content="global">
19
<meta name="Generator" content="texi2html 1.82">
20
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
21
<style type="text/css">
23
a.summary-letter {text-decoration: none}
24
blockquote.smallquotation {font-size: smaller}
25
code {color:rgb(0%,50%,0%)}
26
h3 {background-color:rgb(95%,95%,100%)}
28
pre.display {font-family: serif}
29
pre.example {background-color:rgb(97%,97%,97%)}
30
pre.example b {color:rgb(0%,0%,100%); font-weight:normal}
31
pre.example i {color:rgb(0%,60%,0%); font-style:normal}
32
pre.example var {color:rgb(80%,0%,80%)}
33
pre.format {font-family: serif}
34
pre.menu-comment {font-family: serif}
35
pre.menu-preformatted {font-family: serif}
36
pre.smalldisplay {font-family: serif; font-size: smaller}
37
pre.smallexample {font-size: smaller}
38
pre.smallformat {font-family: serif; font-size: smaller}
39
pre.smalllisp {font-size: smaller}
40
samp {color:rgb(0%,50%,0%)}
41
span.roman {font-family:serif; font-weight:normal;}
42
span.sansserif {font-family:sans-serif; font-weight:normal;}
43
ul.toc {list-style: none}
50
<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
53
<table cellpadding="1" cellspacing="1" border="0">
54
<tr><td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
55
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
56
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
57
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
59
<a name="SEC_Top"></a>
60
<h1 class="settitle">Enigma Reference Manual</h1>
62
<p>This manual describes the internals of
63
<a href="http://www.nongnu.org/enigma/">Enigma</a> version 1.20, in particular how to
64
build new levels using Lua and how to interact with the game engine.
66
<table class="menu" border="0" cellspacing="0">
67
<tr><td align="left" valign="top"><a href="#Running-Enigma">1. Running Enigma</a></td><td> </td><td align="left" valign="top"></td></tr>
68
<tr><td align="left" valign="top"><a href="#Levelpack-Basics">2. Levelpack Basics</a></td><td> </td><td align="left" valign="top"> Addition and managing of levels in packs
70
<tr><td align="left" valign="top"><a href="#Level-Basics">3. Level Basics</a></td><td> </td><td align="left" valign="top"> Introduction to level description
72
<tr><td align="left" valign="top"><a href="#Enigma-Paradigm">4. Enigma Paradigm</a></td><td> </td><td align="left" valign="top"> Principles of world, objects and messages
74
<tr><td align="left" valign="top"><a href="#Lua-API">5. Lua API</a></td><td> </td><td align="left" valign="top"> Describing a level with all its objects and interactions
76
<tr><td align="left" valign="top"><a href="#Common-Attributes-and-Messages">6. Common Attributes and Messages</a></td><td> </td><td align="left" valign="top"> What all objects support
78
<tr><td align="left" valign="top"><a href="#Floor-Objects">7. Floor Objects</a></td><td> </td><td align="left" valign="top">
80
<tr><td align="left" valign="top"><a href="#Item-Objects">8. Item Objects</a></td><td> </td><td align="left" valign="top">
82
<tr><td align="left" valign="top"><a href="#Stone-Objects">9. Stone Objects</a></td><td> </td><td align="left" valign="top">
84
<tr><td align="left" valign="top"><a href="#Actor-Objects">10. Actor Objects</a></td><td> </td><td align="left" valign="top">
86
<tr><td align="left" valign="top"><a href="#Other-Objects">11. Other Objects</a></td><td> </td><td align="left" valign="top"> Wires, Rubberbands and Gadgets
88
<tr><td align="left" valign="top"><a href="#Libraries">12. Libraries</a></td><td> </td><td align="left" valign="top"> Supplemental Functions and Features
90
<tr><td align="left" valign="top"><a href="#Advanced-Features">13. Advanced Features</a></td><td> </td><td align="left" valign="top"> Resolvers, Scrolling, Flood, Fire, etc.
92
<tr><td align="left" valign="top"><a href="#Extension-Development">14. Extension Development</a></td><td> </td><td align="left" valign="top"> Resolver, Library Development
94
<tr><td align="left" valign="top"><a href="#Guidelines-and-Hints">15. Guidelines and Hints</a></td><td> </td><td align="left" valign="top"> Tips and Recommendations for Levels to be included in Enigma
96
<tr><td align="left" valign="top"><a href="#Compatibility">16. Compatibility</a></td><td> </td><td align="left" valign="top"> Engine Mode and Version Compatibility
98
<tr><td align="left" valign="top"><a href="#Object-Index">Object Index</a></td><td> </td><td align="left" valign="top">
100
<tr><td align="left" valign="top"><a href="#Attribute-Index">Attribute Index</a></td><td> </td><td align="left" valign="top">
102
<tr><td align="left" valign="top"><a href="#Message-Index">Message Index</a></td><td> </td><td align="left" valign="top">
104
<tr><td align="left" valign="top"><a href="#Function-Index">Function Index</a></td><td> </td><td align="left" valign="top">
106
<tr><td align="left" valign="top"><a href="#Concept-Index">Concept Index</a></td><td> </td><td align="left" valign="top">
108
<tr><td align="left" valign="top"><a href="#Renaming-Index">Renaming Index</a></td><td> </td><td align="left" valign="top"> Old API to new API translation hints
113
<a name="Running-Enigma"></a>
114
<table cellpadding="1" cellspacing="1" border="0">
115
<tr><td valign="middle" align="left">[<a href="#Top" title="Previous section in reading order"> < </a>]</td>
116
<td valign="middle" align="left">[<a href="#Locating-Resources" title="Next section in reading order"> > </a>]</td>
117
<td valign="middle" align="left"> </td>
118
<td valign="middle" align="left">[<a href="#Top" title="Beginning of this chapter or previous chapter"> << </a>]</td>
119
<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up </a>]</td>
120
<td valign="middle" align="left">[<a href="#Levelpack-Basics" title="Next chapter"> >> </a>]</td>
121
<td valign="middle" align="left"> </td>
122
<td valign="middle" align="left"> </td>
123
<td valign="middle" align="left"> </td>
124
<td valign="middle" align="left"> </td>
125
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
126
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
127
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
128
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
130
<a name="Running-Enigma-1"></a>
131
<h1 class="chapter">1. Running Enigma</h1>
133
<p>Hopefully, after successfully installing and playing some first levels, you may be interested in
134
some information about how we have configured Enigma, how you can optimize Enigma to your
135
needs, and the purpose of some options and attributes within Enigma.
137
<p>This first chapter should give you some valuable information about these questions, and provide
138
some basic knowledge you will need to manage level packs, levels or write your own levels, as
139
described in the following chapters.
141
<table class="menu" border="0" cellspacing="0">
142
<tr><td align="left" valign="top"><a href="#Locating-Resources">1.1 Locating Resources</a></td><td> </td><td align="left" valign="top">
144
<tr><td align="left" valign="top"><a href="#Startup-Switches">1.2 Startup Switches</a></td><td> </td><td align="left" valign="top">
146
<tr><td align="left" valign="top"><a href="#User-Options">1.3 User Options</a></td><td> </td><td align="left" valign="top">
148
<tr><td align="left" valign="top"><a href="#Inventory-Console">1.4 Inventory Console</a></td><td> </td><td align="left" valign="top"> Command and document text history
150
<tr><td align="left" valign="top"><a href="#Level-Info">1.5 Level Info</a></td><td> </td><td align="left" valign="top">
152
<tr><td align="left" valign="top"><a href="#Handicap-and-PAR">1.6 Handicap and PAR</a></td><td> </td><td align="left" valign="top"> Background to score evaluation and HCP
154
<tr><td align="left" valign="top"><a href="#User-Sound-Sets">1.7 User Sound Sets</a></td><td> </td><td align="left" valign="top"> How to create and install sound themes
159
<a name="Locating-Resources"></a>
160
<table cellpadding="1" cellspacing="1" border="0">
161
<tr><td valign="middle" align="left">[<a href="#Running-Enigma" title="Previous section in reading order"> < </a>]</td>
162
<td valign="middle" align="left">[<a href="#Startup-Switches" title="Next section in reading order"> > </a>]</td>
163
<td valign="middle" align="left"> </td>
164
<td valign="middle" align="left">[<a href="#Running-Enigma" title="Beginning of this chapter or previous chapter"> << </a>]</td>
165
<td valign="middle" align="left">[<a href="#Running-Enigma" title="Up section"> Up </a>]</td>
166
<td valign="middle" align="left">[<a href="#Levelpack-Basics" title="Next chapter"> >> </a>]</td>
167
<td valign="middle" align="left"> </td>
168
<td valign="middle" align="left"> </td>
169
<td valign="middle" align="left"> </td>
170
<td valign="middle" align="left"> </td>
171
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
172
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
173
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
174
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
176
<a name="Locating-Resources-1"></a>
177
<h2 class="section">1.1 Locating Resources</h2>
179
<p>For reasons of backup, system changes, special configurations, level additions and hopefully
180
your own new levels, you may need to know where Enigma stores the resources and how you
183
<p>Enigma maintains several paths for control of load and storage of files. You
184
can list these paths either in the help submenu paths, or by starting Enigma
185
with the switch ‘<samp>--log</samp>’ (see section <a href="#Startup-Switches">Startup Switches</a>) and looking at the
188
<dl compact="compact">
189
<dd><a name="index-preferences-path"></a>
191
<dt> <b>Preferences Path</b></dt>
192
<dd><p>This is the path to the file that stores your preferences concerning application
193
options. This file is usually located at your <code>HOME</code> directory. For <code>HOME</code>-less
194
Windows users, it is stored in the ‘<samp>Application Data\Enigma</samp>’ directory. Since it is the
195
third version in the history of Enigma, the file is named
196
‘<samp>.enigmarc.xml</samp>’ by default.
198
<p>We recommend that you backup this file, although it contains only a few data that you can
201
<p>Since these preferences are quite specific for the operating system and configuration, you will
202
use a different version on each Enigma installation you have.
204
<p>Mainly for Enigma developers, a switch exists ‘<samp>--pref</samp>’ (see section <a href="#Startup-Switches">Startup Switches</a>)
205
to rename this preferences file. By starting Enigma with a renamed preferences
206
file, a developer can temporarily use a complete separate configuration for
207
testing purposes without the danger of destroying his main configuration. The
208
developer may use it to start Enigma with a plain standard configuration for
209
testing purposes, too.
211
<p>In all cases, a leading ‘<samp>.</samp>’ will hide the preferences filename.
213
<a name="index-user-path"></a>
215
<dt> <b>User Path</b></dt>
216
<dd><p>This is the main path to the user’s Enigma data. All updates, user-installed levels and user-
217
written levels, the user’s scores, history and usually the user’s screenshots and level previews,
218
are stored at this path.
220
<p>A backup of this directory is mandatory!
222
<p>The standard location is the directory ‘<samp>.enigma</samp>’ in your <code>HOME</code>
223
directory. For <code>HOME</code>-less Windows users, it is the folder
224
‘<samp>%APPDATA%\Enigma</samp>’, what resolves to the subfolder
225
‘<samp>Application Data\Enigma</samp>’ on XP/2000 or ‘<samp>AppData\Roaming\Enigma</samp>’ on
226
Vista/Windows 7 located within your user data folder.
228
<p>This standard location of the user path is the location of logging and error
231
<p>You can define your own path within the <a href="#User-Options">User Options</a>. By doing so, you can store your
232
Enigma user data on a memory stick or on a shared partition, and use them alternatively from
233
two Enigma installations.
235
<a name="index-user-image-path"></a>
237
<dt> <b>User Image Path</b></dt>
238
<dd><p>This is a second path to the user’s Enigma data, which you can use to access images such as
239
screenshots and thumbnails of levels. Usually this path is identical to the main ‘<samp>User
242
<p>Just in case you make many screenshots and have limited resources on the main
243
‘<samp>User Path</samp>’, you may want to store the images on another path. You can
244
define your own path within the <a href="#User-Options">User Options</a>.
246
<a name="index-system-path"></a>
248
<dt> <b>System Path</b></dt>
249
<dd><p>This path gives you the location of all system resources that are distributed with Enigma. Here
250
you will find the levels, libraries, etc. This is a first class address to look for examples if you start
251
writing your own levels.
253
<a name="index-resource-paths"></a>
255
<dt> <b>Resource Paths</b></dt>
256
<dd><p>This is a list of paths. The program looks up each version-independent resource on all paths in
257
this list, and loads from the first occurrence.
259
<p>User data precedes system data; this way, updates on your user data path will win. Have a look
260
at this list if you are observing a difference between a source and the runtime behavior. You may
261
have looked at a file that another file had hidden on a preceding path in this list.
263
<a name="index-l10n-path"></a>
264
<a name="index-localization-path"></a>
266
<dt> <b>l10n Path</b></dt>
267
<dd><p>This path shows the directory that contains the localization data.
272
<p>Please note that some resources, like levels, may be zipped. In this case, a
273
resource that you expect to find at ‘<samp>dirname/filename</samp>’ may be stored in a zipfile
274
named ‘<samp>dirname.zip</samp>’. The path of the file within the zip can be either
275
‘<samp>dirname/filename</samp>’ or ‘<samp>./filename</samp>’. In case a resource is provided
276
in zipped and unzipped form, the plain file stored in a directory wins, since Enigma
277
assumes it to be an update to the zip.
280
<a name="Startup-Switches"></a>
281
<table cellpadding="1" cellspacing="1" border="0">
282
<tr><td valign="middle" align="left">[<a href="#Locating-Resources" title="Previous section in reading order"> < </a>]</td>
283
<td valign="middle" align="left">[<a href="#User-Options" title="Next section in reading order"> > </a>]</td>
284
<td valign="middle" align="left"> </td>
285
<td valign="middle" align="left">[<a href="#Running-Enigma" title="Beginning of this chapter or previous chapter"> << </a>]</td>
286
<td valign="middle" align="left">[<a href="#Running-Enigma" title="Up section"> Up </a>]</td>
287
<td valign="middle" align="left">[<a href="#Levelpack-Basics" title="Next chapter"> >> </a>]</td>
288
<td valign="middle" align="left"> </td>
289
<td valign="middle" align="left"> </td>
290
<td valign="middle" align="left"> </td>
291
<td valign="middle" align="left"> </td>
292
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
293
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
294
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
295
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
297
<a name="Startup-Switches-1"></a>
298
<h2 class="section">1.2 Startup Switches</h2>
300
<p>Besides starting Enigma by clicking on an installation-provided icon or start
301
menu entry, you can start Enigma from a shell or commandline. This allows you
302
to add a selection of startup switches that are valid for just a single run.
304
<p>For repeated usage of constant startup switches you can create an desktop icon
305
or start menu entry and append the startup switch to the target string of the
306
Enigma application executable.
308
<p>The following list explains the supported user options. If an option is listed with a long name
309
preceded by two minus signs, and with a one-character abbreviation preceded by one minus
310
sign, use one of the notations, not both together; for example,
311
‘<samp>--data path</samp>’ or ‘<samp>-d path</samp>’.
313
<dl compact="compact">
314
<dt> <b>--assert</b></dt>
315
<dd><p>A switch for Enigma developers that forces all debugging assertions, even
316
expensive ones, to be evaluated. The additionally evaluated checks look like
317
‘<samp>ASSERT(noAssert || long_lasting_check(), XLevelRuntime, "remark");</samp>’.
320
<dt> <b>--data -d path</b></dt>
321
<dd><p>A switch for Enigma developers that allows you to add an additional path to the
322
resource paths that precedes the system path (see section <a href="#Startup-Switches">Startup Switches</a>). A
323
developer can test an Enigma compilation, without installation, by calling it
324
from the shell with the current working directory on the main directory via
325
‘<samp>src/Enigma -d ./data</samp>’.
328
<dt> <b>--help -h</b></dt>
329
<dd><p>Just lists the available startup switches to the output and terminate.
332
<dt> <b>--lang -l lang</b></dt>
333
<dd><p>A switch that allows you to override any other language preference. The language
334
is given in the common 2-character sequence as ‘<samp>fr</samp>’ for French or ‘<samp>ru</samp>’
338
<dt> <b>--log</b></dt>
339
<dd><p>This switch turns on logging of internal information to the standard output.
340
Windows users will find an file called ‘<samp>Output.log</samp>’ in the standard
341
‘<samp>User Path</samp>’ folder. An additional file ‘<samp>Error.log</samp>’ lists severe
344
<p>The output will, for example, list the paths described in <a href="#Locating-Resources">Locating Resources</a>.
347
<dt> <b>--nograb</b></dt>
348
<dd><p>A switch for Enigma developers that causes Enigma not to grab the mouse. You can hardly
349
play a level in this mode, but it makes it possible to debug the
350
application in its core parts.
353
<dt> <b>--nomusic</b></dt>
354
<dd><p>Start Enigma without playing background music.
357
<dt> <b>--nosound</b></dt>
358
<dd><p>Start Enigma with sound being switched off.
361
<dt> <b>--pref -p filename</b></dt>
362
<dd><p>The name of an alternative preferences file without the leading dot for hidden
363
filenames. This switch is a pure Enigma developer support feature, as described
364
in <a href="#Locating-Resources">Locating Resources</a>.
367
<dt> <b>--pref -p dirpath</b></dt>
368
<dd><p>The path of an alternative directory that contains the standard named preference
369
file ‘<samp>.enigmarc.xml</samp>’. If no preference file exists or the directory does
370
not yet exist they are created. On creation of the preference file the user data
371
path is set to the given dirpath per default. This allows to store all Enigma
372
user data in a single directory that can be stored anywhere, e.g. on a USB stick.
373
You always need to call Enigma with the above switch to use this new set up.
374
Remember that a path with spaces needs to be quoted.
377
<dt> <b>--redirect</b></dt>
378
<dd><p>Redirect the ‘<samp>stdout</samp>’ and ‘<samp>stderr</samp>’ to files named ‘<samp>Output.log</samp>’
379
and ‘<samp>Error.log</samp>’ on the standard user path (see section <a href="#Locating-Resources">Locating Resources</a>).
380
For Windows this option is always <code>true</code>, but the usage of this option
381
is useful on any operating system if Enigma is started via a desktop icon or
385
<dt> <b>--robinson</b></dt>
386
<dd><p>Disable all connections to the internet. No automatic updates will take place
387
and all user initiated requests that would require an internet connection will
388
fail with an error message.
391
<dt> <b>--showfps</b></dt>
392
<dd><p>Show the framerate (FPS) during the game.
395
<dt> <b>--version</b></dt>
396
<dd><p>Just print the version number to the output and terminate.
399
<dt> <b>--window -w</b></dt>
400
<dd><p>Start Enigma in window mode instead of screen mode.
405
<p>Enigma interprets all further arguments supplied on the commandline as level file
406
addresses. You can use absolute or relative addresses to level files stored
407
on your computer. Adding url’s to levels stored in the Internet is also possible.
409
<p>A Unix user may start Enigma with the following command:
411
<p><code>enigma --log ~/mylevel.xml http://somewhere.com/netlevel.xml</code>
413
<p>A Windows user may start Enigma from the command line (please adjust the Enigma
416
<p><code>C:\Programs\Enigma\enigma.exe --log demo_simple.xml</code>
418
<p>You will find these levels in the levelpack called ‘<samp>Startup Levels</samp>’, which is
419
only visible by default if you supplied levels on the commandline.
422
<a name="User-Options"></a>
423
<table cellpadding="1" cellspacing="1" border="0">
424
<tr><td valign="middle" align="left">[<a href="#Startup-Switches" title="Previous section in reading order"> < </a>]</td>
425
<td valign="middle" align="left">[<a href="#Inventory-Console" title="Next section in reading order"> > </a>]</td>
426
<td valign="middle" align="left"> </td>
427
<td valign="middle" align="left">[<a href="#Running-Enigma" title="Beginning of this chapter or previous chapter"> << </a>]</td>
428
<td valign="middle" align="left">[<a href="#Running-Enigma" title="Up section"> Up </a>]</td>
429
<td valign="middle" align="left">[<a href="#Levelpack-Basics" title="Next chapter"> >> </a>]</td>
430
<td valign="middle" align="left"> </td>
431
<td valign="middle" align="left"> </td>
432
<td valign="middle" align="left"> </td>
433
<td valign="middle" align="left"> </td>
434
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
435
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
436
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
437
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
439
<a name="User-Options-1"></a>
440
<h2 class="section">1.3 User Options</h2>
442
<dl compact="compact">
443
<dt> <b>Ratings update</b></dt>
444
<dd><p>Please retain this option on the value ‘<samp>Never</samp>’ until release of Enigma 1.00.
447
<dt> <b>User name</b></dt>
448
<dd><p>Enter your user name, which Enigma will attach to your scores. Please look at
449
the Enigma home page for user names already in use and choose a new, unique name.
450
You can change your user name at anytime without losing any of your
454
<dt> <b>User path</b></dt>
455
<dd><p>This textfield allows you to define an arbitrary directory for your Enigma user
456
data as described in <a href="#Locating-Resources">Locating Resources</a>.
458
<p>Deletion of the string resets the path to the default.
460
<p>Enigma activates the new path when you leave the options menu. Though it stores all files
461
directly to the new path, and will still find files on the old path, you may want to quit Enigma
462
immediately and first copy/merge the old directory to the new location. This copy of your old
463
data is necessary, since with the next start, Enigma will locate user data at the new location
467
<dt> <b>User image path</b></dt>
468
<dd><p>This textfield allows you to define an arbitrary directory for your Enigma user
469
image data as described in <a href="#Locating-Resources">Locating Resources</a>.
471
<p>Deletion of the string resets the path to the default.
473
<p>Enigma activates the new path when you leave the options menu. Though it has stored all files
474
directly to the new path and files will still be found on the old path, you may want to quit
475
Enigma immediately and first copy/merge the old directory to the new location. This copy of
476
your old data is necessary, since with the next start, Enigma will locate user data at the new
477
location exclusively.
484
<a name="Inventory-Console"></a>
485
<table cellpadding="1" cellspacing="1" border="0">
486
<tr><td valign="middle" align="left">[<a href="#User-Options" title="Previous section in reading order"> < </a>]</td>
487
<td valign="middle" align="left">[<a href="#Level-Info" title="Next section in reading order"> > </a>]</td>
488
<td valign="middle" align="left"> </td>
489
<td valign="middle" align="left">[<a href="#Running-Enigma" title="Beginning of this chapter or previous chapter"> << </a>]</td>
490
<td valign="middle" align="left">[<a href="#Running-Enigma" title="Up section"> Up </a>]</td>
491
<td valign="middle" align="left">[<a href="#Levelpack-Basics" title="Next chapter"> >> </a>]</td>
492
<td valign="middle" align="left"> </td>
493
<td valign="middle" align="left"> </td>
494
<td valign="middle" align="left"> </td>
495
<td valign="middle" align="left"> </td>
496
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
497
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
498
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
499
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
501
<a name="Inventory-Console-1"></a>
502
<h2 class="section">1.4 Inventory Console</h2>
504
<p>The lower right window area that usually shows the inventory items and scrolls
505
the texts of activated document items allows the user to reread previous
506
document texts, to enter textual commands and to reissue previous commands.
508
<p>You can issue a command by usage of the keyboard. Just enter the command string
509
and activate the command by a finishing <return> stroke. The following
510
commands are supported:
512
<dl compact="compact">
513
<dt> <b>help</b></dt>
514
<dd><p>List all public available commands.
516
<dt> <b>abort</b></dt>
517
<dd><p>Abort level and return to level selection menu. Same as <Alt X>
519
<dt> <b>April 1st</b></dt>
522
<dt> <b>cheats</b></dt>
523
<dd><p>List level developer cheat commands for fast testing.
525
<dt> <b>collision</b></dt>
526
<dd><p>Developer cheat that disables collisions between stones and marbles or pearls.
527
Once used no score will be recorded if the level is successfully finished.
529
<dt> <b>easy</b></dt>
530
<dd><p>Restart level in easy difficulty mode.
532
<dt> <b>find</b> search_string</dt>
533
<dd><p>Searches levels in all levelpacks that contain matching string in either
534
the level’s title, author’s name or the file name.
537
<dd><p>Developer cheat that protects the actors assigned to the current player like
538
the activation of an <a href="#it_005fumbrella">it_umbrella</a> does. Once used no score will be
539
recorded if the level is successfully finished.
541
<dt> <b>hunt</b></dt>
542
<dd><p>Switch to world record hunting mode. Same as toggling the left most button
543
in the level selection menu to the world icon.
545
<dt> <b>info</b></dt>
546
<dd><p>Show info about level like the levelpack, position within levelpack, the file
547
location, the title, author, version and the level internal id.
549
<dt> <b>jumpto</b> levelpack,position</dt>
550
<dd><p>Directly start the given level. The levelpack is identified by its title. The
551
position is the number within the levelpack. E.g. <code>jumpto Enigma IV,33</code>.
553
<dt> <b>nohunt</b></dt>
554
<dd><p>Switch off the world record hunting mode. Same as toggling the left most button
555
in the level selection menu to the marble icon.
557
<dt> <b>regular</b></dt>
558
<dd><p>Restart level in regular difficulty mode
560
<dt> <b>restart</b></dt>
561
<dd><p>Restart level in currently selected difficulty mode.
563
<dt> <b>suicide</b></dt>
564
<dd><p>Kill actors, but continue level if possible. Same as <F3>.
568
<p>Both, the commands and the displayed document text have a history. You recall
569
the history by usage of the up and down arrows.
572
<li> <b>inventory</b> –> jump to start
573
</li><li> <b>command #10</b>, oldest command in history
574
</li><li> <b>command #9</b>
576
</li><li> <b>command #2</b>
577
</li><li> <b>command #1</b>, last executed command
578
</li><li> <b>command under edition</b>, just if the last edited command has not been executed
579
</li><li> <b>inventory</b> <– start
580
</li><li> <b>document #1</b>, last viewed document
581
</li><li> <b>document #2</b>, previous viewed document
583
</li><li> <b>document #n</b>, first viewed document
584
</li><li> <b>level title, subtitle, author</b>, as shown on level start
585
</li><li> <b>inventory</b> –> jump to start
588
<p>Starting with the inventory item display the up arrow shows the previously
589
submitted commands. Just by another <return> you can reissue a command.
590
The history will be resorted with the last command at the position direktly
591
above the inventory. You can edit history commands anytime like you can insert
592
a new command. If you do not finish a command by a <return> the string will
593
still be recorded and presented as the first command above the inventory. The
594
command history is persistent.
596
<p>The document history can be recalled by usage of the down arrow. All level
597
documents previously displayed can be redisplayed. Additionally the initial
598
level info displayed on the level start can be read again.
600
<p>Both histories revolve to the item inventory when the up or down keys are
601
used beyond the oldest command or message.
604
<a name="Level-Info"></a>
605
<table cellpadding="1" cellspacing="1" border="0">
606
<tr><td valign="middle" align="left">[<a href="#Inventory-Console" title="Previous section in reading order"> < </a>]</td>
607
<td valign="middle" align="left">[<a href="#Public-Ratings" title="Next section in reading order"> > </a>]</td>
608
<td valign="middle" align="left"> </td>
609
<td valign="middle" align="left">[<a href="#Running-Enigma" title="Beginning of this chapter or previous chapter"> << </a>]</td>
610
<td valign="middle" align="left">[<a href="#Running-Enigma" title="Up section"> Up </a>]</td>
611
<td valign="middle" align="left">[<a href="#Levelpack-Basics" title="Next chapter"> >> </a>]</td>
612
<td valign="middle" align="left"> </td>
613
<td valign="middle" align="left"> </td>
614
<td valign="middle" align="left"> </td>
615
<td valign="middle" align="left"> </td>
616
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
617
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
618
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
619
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
621
<a name="Level-Info-1"></a>
622
<h2 class="section">1.5 Level Info</h2>
624
<a name="index-levelinspector"></a>
625
<p>For every level, Enigma manages more data than can be displayed in the level menu. You can
626
view them all with the levelinspector. You can call this special menu from within the level menu
627
by right or control clicking on the level icon.
629
<p>Besides title and author, Enigma provides information concerning a public rating of the level,
630
different score values of interest, details on the level version, the level file location and more.
631
Additionally, the levelinspector allows you to enter personal annotations for a level. You can
632
review any screenshots you made for this level directly from the levelinspector, too.
634
<table class="menu" border="0" cellspacing="0">
635
<tr><td align="left" valign="top"><a href="#Public-Ratings">1.5.1 Public Ratings</a></td><td> </td><td align="left" valign="top">
637
<tr><td align="left" valign="top"><a href="#Scores">1.5.2 Scores</a></td><td> </td><td align="left" valign="top">
639
<tr><td align="left" valign="top"><a href="#Versions">1.5.3 Versions</a></td><td> </td><td align="left" valign="top">
641
<tr><td align="left" valign="top"><a href="#Private-Annotations-and-Ratings">1.5.4 Private Annotations and Ratings</a></td><td> </td><td align="left" valign="top">
643
<tr><td align="left" valign="top"><a href="#Screenshots">1.5.5 Screenshots</a></td><td> </td><td align="left" valign="top">
648
<a name="Public-Ratings"></a>
649
<table cellpadding="1" cellspacing="1" border="0">
650
<tr><td valign="middle" align="left">[<a href="#Level-Info" title="Previous section in reading order"> < </a>]</td>
651
<td valign="middle" align="left">[<a href="#Scores" title="Next section in reading order"> > </a>]</td>
652
<td valign="middle" align="left"> </td>
653
<td valign="middle" align="left">[<a href="#Running-Enigma" title="Beginning of this chapter or previous chapter"> << </a>]</td>
654
<td valign="middle" align="left">[<a href="#Level-Info" title="Up section"> Up </a>]</td>
655
<td valign="middle" align="left">[<a href="#Levelpack-Basics" title="Next chapter"> >> </a>]</td>
656
<td valign="middle" align="left"> </td>
657
<td valign="middle" align="left"> </td>
658
<td valign="middle" align="left"> </td>
659
<td valign="middle" align="left"> </td>
660
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
661
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
662
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
663
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
665
<a name="Public-Ratings-1"></a>
666
<h3 class="subsection">1.5.1 Public Ratings</h3>
668
<p>Most levels are rated within five different categories:
680
kno = Knowledge of Enigma
683
spe = Speed and Speed control
687
<p>To distinguish the ratings from their everyday-meanings, we use the following abbreviations for
688
the ratings. Each of these categories takes values between 1 (easy) and 5 (difficult), except kno,
689
which can also be 6 (unique mechanism).
691
<p>Please bear in mind that it’s not simple to retain the
692
following definitions in each of nearly 750 cases, so there
693
might be (will be) deviations from them in single levels.
695
<p><strong>Intelligence (int)</strong>
697
<p>This rating is intended to measure the creativity, planning and analytic requirements needed to
698
solve the level. Intelligence is a very difficult concept in itself, and thus at first not easy to rate or
699
to grasp. Consequently, a fixed definition of the five rating-degrees not only helps, but is
700
essential in the rating process. So, assume you know everything about the single elements of a
701
level. Then ask yourself these questions:
704
Can I see the solution at once? Yes -> int 1
707
Do I only have to orient myself, for example, testing the exits of wormholes or to see the
708
function of a switch? -> int 2
711
Is there a standard algorithm to solve the problem, like in a maze, or
712
searching for a hidden item? -> int 3
715
Neither trial-and-error nor standard algorithms work; is it a simple
716
kind of code or does it require advance planning? -> int 4
719
Is it a difficult code, pattern or causal chain? -> int 5
723
<p>High values for intelligence are typically puzzles.
724
int-ratings do not accumulate; the most difficult puzzle
725
itself already determines the rating.
727
<p><strong>Dexterity (dex)</strong>
729
<p>You can solve many levels either by accuracy or by patience. In our context, we do not mean
730
dexterity in the sense of accuracy to avoid impatience, but accuracy to avoid death. So it focuses
731
on the lethal positions in a level, not only death-stones and abysses, but also casualties like
732
pushing a stone accidentally into an unreachable corner.
736
It doesn’t matter what I touch, this level is damn-proof. -> dex 1
739
Well, there are lethal positions I shouldn’t move the level into, but
740
they are not difficult to overcome. -> dex 2
743
Comparable to a single row with an abyss left and right. -> dex 3
746
Comparable to pushing a stone to the right with an abyss on
747
the left, or a single row with death-stones left and right. ->
751
Needs lots of attempts to succeed. -> dex 5
755
<p>In contrast to the int-rating, dex might accumulate: A level with many situations,
756
each of dex 3, can add up to dex 4 or even 5. This way, you can achieve dex 5.
757
Rotors in a level also contribute to dex and to the
758
speed-rating, spe. Thus, levels with a high dex-spe-combination are
759
mostly action-driven, whereas a high dex-pat-combination typically is
762
<p><strong>Patience (pat)</strong>
764
<p>Patience is a relatively subjective rating, and refers mostly to “felt time”, how long it felt to
765
complete the level. So two levels with same mechanics can have different pat-values, e.g., if one
766
level has a nicer design or shows the progress of the level in some way, like the number of
767
opened oxyds. It explicitly includes having to restart the level repeatedly; not the time in the
768
lower left corner or the score is crucial, but the complete “felt time” needed to solve the level,
769
starting from the first look at it.
772
I solved the level right after understanding it. -> pat 1
775
I needed some time, but it wasn’t boring. -> pat 2
778
Okay, it took some minutes, but the landscape is nice <small class="enddots">...</small> -> pat 3
781
I know what to do, but it doesn’t seem to end. -> pat 4
784
This level really requires discipline. -> pat 5
788
<p>A high number of oxyds can heighten the pat-value and also lower it: If the player has to
789
traverse the level several times to open matching pairs of oxyds, it is definitely pat-heightening.
790
However, if oxyds are arranged to mark the progress of the player, and act as a kind of small
791
reward within the level, they can lower the pat-value. It’s the same with a high number of doors:
792
The arrangement is the critical factor.
794
<p>High pat-values are typically mazes. In combination with int 3, a high
795
pat-value can indicate a hidden item or a hollow stone. pat-values
796
involve the whole level, so they can’t accumulate.
798
<p><strong>Knowledge of Enigma (kno)</strong>
800
<p>The kno-rating mostly takes on the function and interactions of single
801
objects in the game, like stones, floors, items, and actors. However,
802
in some cases it also deals with special techniques. The guideline is
803
the “Advanced Tutorial”, which defines kno 3. kno 4 corresponds to
804
standard objects that aren’t shown in the tutorial; kno 5 requires a
805
deeper knowledge of the game internals. Finally, kno 6 indicates
806
special mechanisms, that are seldom encountered or unique. The overall kno-rating
807
of a level equals that of the most difficult object or technique (and
808
thus is non-accumulative):
811
Moving a single marble on normal floors, normal walls, oxyds,
812
stones that look like oxyds, death-stones, water, an abyss, documents,
813
using the inventory, static gravity, visible gradients.
816
Pushing stones, simple Sokoban-tricks, bridge-building in water
817
and an abyss, connected puzzle-stones, moving more than one marble,
818
meditations, grates, rotors and tops, hidden gradients, triggers and
819
switches, doors, holes (not made by dynamite), swamp, floppies and
820
st-floppy, keys and locks, coins and slots, cracks, timer-stones.
823
Different floors can have different fraction and mouseforce, space,
824
ice, inverted floor, some stones sink while others swim, black grates
825
that hold rotors and tops away, dynamite, dynamite-breakable stones,
826
spade, boulders, magic-wand to change boulder-direction, boulders sink
827
into an abyss, sheets of glass, spoon, actors and items may hide under
828
movable stones, small not-killer whiteballs, coloured one-way-streets,
829
actorimpulse-stones (“bumpers”), rotors can fly over an abyss,
830
quake-stones, swords and knights, lasers, static and movable mirrors,
831
item- and coin-transformations by pushing stones over them and by
832
using lasers, umbrellas protect in an abyss, hammer and breakable stones
833
(although not in the tutorial).
836
Bridge-building in swamps, rubber-bands, rubber-band-stones,
837
scissor-stones, unconnected puzzle-stones, exploding puzzle-stones,
838
turning puzzle-stones (with and without a magic wand), springs (both
839
types, on the floor and hole-kind springs like in “Upstream
840
Journey”), thieves, three-part shogun-stones, invisible stones,
841
hollow stones, chameleon-stones, items hidden under chameleon stones,
842
stones that aren’t what they seem (e.g., fake-death-stones), wormholes,
843
magnets, using F3 for a restart to solve a level, yin-yangs,
844
one-color-, yin-yang- and inverted yin-yang-stones, stones breakable
845
by only one color, killer-balls, swap-stones, brush and paintable
846
stones, changing one-way-streets with a magic wand, changing stones to
847
glass with a magic wand, impulse-stones (movable, static and hollow),
848
black and white bombs, bomb-stones, fire, extinguishers,
849
rotator-stones, yellow anti-swapping stones, mines, flags, seeds,
850
weights, putting objects under one-way-streets and other hollow
851
stones, electric stones, turnstiles, mailing and pipes, rings (single
852
and multiplayer), volcanos, bags, randomizers (as possible effect of a
853
switch), horses (the actors) and horse-passing stones, pins, bananas, cherries
854
can make you invisible, surprise-item.
857
Cracks, floor-springs, wormholes, etc., are all items, seeds can grow
858
inside stones, the laser is blocked by all items, killer-balls don’t sink
859
in water, “Space Meditation”-kind collisions, holding down the
860
mouse-button, invisibility lets you go through glass, jumping over
861
lasers <small class="enddots">...</small>
864
Spitter-stones, surprise-stones, levels like “Enigris” or “Flood
865
Gates” <small class="enddots">...</small>
869
<p>kno 6 does not necessarily mean that this level is difficult to
870
understand; the unique mechanism or object might also be very
871
intuitive, like in “Flood Gates”.
873
<p><strong>Speed and speed control (spe)</strong>
875
<p>The spe-value corresponds not only to the maximum speed a level
876
requires (like you need to run away from a rotor), but also the
877
degree of control a player has over his mouse while moving it;
878
excellent examples for this are “Mourning Palace” and the middle
879
part of “Sacrifice”. This involves moving the mouse at a constant
880
velocity for a long time, as well as correctly estimating the speed
881
that’s needed in a certain task, like shattering a sheet of glass.
888
You shouldn’t stop for too long. For example, something slow might
892
There is an appropriate time limit or speed control task. This can
893
be a single, not-too-fast rotor in an open area.
896
Don’t stop! Examples include difficult timing-tasks as well as a single
897
fast rotor or several slower ones.
900
Hurry Up! Whereas spe 4 is meant to be difficult, but obviously
901
solvable in not too many attempts, spe 5 is everything beyond this.
905
<p>The spe-rating again is cumulative, since many slow rotors can add up
906
to spe 3 or 4, or a combination of many slow time-switches to be
907
pressed in a certain order can create a horrible task. In contrast to
908
the other categories, for which the average is near 3 (or between 3
909
and 4 for kno), most levels are definitely
910
spe 1. So, the spe-rating is more a supplement to the three
911
core-ratings int, dex and pat.
913
<p><strong>Combinations of ratings</strong>
915
<p>Sometimes, it can be interesting to have a single value to measure the difficulty of a level. To
916
calculate such a universal rating, a simple possibility is choosing a linear combination of the 5
917
single ratings, weighted with appropriate weights. These weights should correspond to the
918
difficulty a single category adds to the universal difficulty. Yet you should also choose these
919
weights carefully to avoid number-theoretic obstructions (e.g., when all weights are even except
920
for the spe-rating, then there will be a visible difference in the distribution of even and odd
921
universal ratings, which can be very misleading). A working, and very interesting linear
922
combination, is the following, which has been applied in the reordering process:
925
<table><tr><td> </td><td><pre class="example">universal difficulty = 7*int + 6*dex + 4*pat + 3*kno + 4*spe - 23
926
</pre></td></tr></table>
928
<p>This has a special property, in that it takes relatively broad and continuously distributed values
929
between 1 (all ratings 1) and 100 (all ratings 5, kno 6) and emphasizes the most difficult
930
categories, intelligence and dexterity. However, some very low or very high values cannot
931
appear in this combination, such as 2 or 99. Other combinations lead to full but narrow, or to
932
broad but noncontinuous spectra.
935
<a name="Scores"></a>
936
<table cellpadding="1" cellspacing="1" border="0">
937
<tr><td valign="middle" align="left">[<a href="#Public-Ratings" title="Previous section in reading order"> < </a>]</td>
938
<td valign="middle" align="left">[<a href="#Versions" title="Next section in reading order"> > </a>]</td>
939
<td valign="middle" align="left"> </td>
940
<td valign="middle" align="left">[<a href="#Running-Enigma" title="Beginning of this chapter or previous chapter"> << </a>]</td>
941
<td valign="middle" align="left">[<a href="#Level-Info" title="Up section"> Up </a>]</td>
942
<td valign="middle" align="left">[<a href="#Levelpack-Basics" title="Next chapter"> >> </a>]</td>
943
<td valign="middle" align="left"> </td>
944
<td valign="middle" align="left"> </td>
945
<td valign="middle" align="left"> </td>
946
<td valign="middle" align="left"> </td>
947
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
948
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
949
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
950
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
952
<a name="Scores-1"></a>
953
<h3 class="subsection">1.5.2 Scores</h3>
955
<p>The score columns show your and some comparison values for the difficult and
956
for the easy mode, if the levels supports it.
958
<p>The world record is the best score that was retransmitted to the Enigma team.
959
The world record holders are listed below.
961
<p>The PAR value is the “professional average rating” of the level. It is the harmonic average of all
962
scores that Enigma players have retransmitted. However, we take into account only scores from
963
players who have solved a certain number of levels. Opposed to the world record, which will be
964
very difficult to gain, the PAR value is a much more realistic aim for an ambitious player. If you
965
are equal or better than PAR, the levels are marked with a speeding blackball within the level
968
<p>The author’s value is another reference score. Most authors are not keen on holding the world
969
record of their own levels. However, they will likely know the fastest way to solve the level. If
970
your score is much higher than the author’s score, a simpler solution to solve the level may
973
<p>The solved number is the number of players who solved this level in the given
976
<p>The solved percentage is the relation of the number of players who solved this
977
level to the number of players who retransmitted scores. Actually, we take into
978
account only those players who could have solved the level. For example, players
979
who did retransmit scores before the level was written, without updating
980
afterwards, are not taken into account. A low percentage is a hint that a level
981
is not easy to solve.
984
<a name="Versions"></a>
985
<table cellpadding="1" cellspacing="1" border="0">
986
<tr><td valign="middle" align="left">[<a href="#Scores" title="Previous section in reading order"> < </a>]</td>
987
<td valign="middle" align="left">[<a href="#Private-Annotations-and-Ratings" title="Next section in reading order"> > </a>]</td>
988
<td valign="middle" align="left"> </td>
989
<td valign="middle" align="left">[<a href="#Running-Enigma" title="Beginning of this chapter or previous chapter"> << </a>]</td>
990
<td valign="middle" align="left">[<a href="#Level-Info" title="Up section"> Up </a>]</td>
991
<td valign="middle" align="left">[<a href="#Levelpack-Basics" title="Next chapter"> >> </a>]</td>
992
<td valign="middle" align="left"> </td>
993
<td valign="middle" align="left"> </td>
994
<td valign="middle" align="left"> </td>
995
<td valign="middle" align="left"> </td>
996
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
997
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
998
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
999
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
1001
<a name="Versions-1"></a>
1002
<h3 class="subsection">1.5.3 Versions</h3>
1004
<p>The version column shows detailed information about the level. Read the chapter Level
1005
Basics node see section <a href="#g_t_003cversion_003e"><version></a> and see section <a href="#g_t_003cmodes_003e"><modes></a> for an explanation of the
1008
<p>For you as a player, the ‘<samp>Score</samp>’ version number can be interesting.
1009
A level you had solved with a certain score may appear with a red triangle in the level menu in
1010
an updated Enigma release of the level. Although the level menu displays the medals showing
1011
that you solved the level, it will not display the score values anymore. This is due to an
1012
incompatible level update that requires a new solution with different, incomparable score
1013
values. The author will increase the score version number in such a case.
1016
<a name="Private-Annotations-and-Ratings"></a>
1017
<table cellpadding="1" cellspacing="1" border="0">
1018
<tr><td valign="middle" align="left">[<a href="#Versions" title="Previous section in reading order"> < </a>]</td>
1019
<td valign="middle" align="left">[<a href="#Screenshots" title="Next section in reading order"> > </a>]</td>
1020
<td valign="middle" align="left"> </td>
1021
<td valign="middle" align="left">[<a href="#Running-Enigma" title="Beginning of this chapter or previous chapter"> << </a>]</td>
1022
<td valign="middle" align="left">[<a href="#Level-Info" title="Up section"> Up </a>]</td>
1023
<td valign="middle" align="left">[<a href="#Levelpack-Basics" title="Next chapter"> >> </a>]</td>
1024
<td valign="middle" align="left"> </td>
1025
<td valign="middle" align="left"> </td>
1026
<td valign="middle" align="left"> </td>
1027
<td valign="middle" align="left"> </td>
1028
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
1029
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
1030
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
1031
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
1033
<a name="Private-Annotations-and-Ratings-1"></a>
1034
<h3 class="subsection">1.5.4 Private Annotations and Ratings</h3>
1036
<p>This textfield allows you to enter an annotation for a level that you can review
1037
on later replays. Note that the current textfield is limited (it may not allow you to enter all
1038
characters, and needs the mouse cursor to remain within its boundaries). Yet it should work for
1039
entering short annotations that may be very useful later.
1041
<p>Enigma stores annotations in your private applications ‘<samp>state.xml</samp>’ file. It permits one
1042
annotation per level, independent of the level version.
1044
<p>You may rate the levels, too. Just click on the ratings button. Values go from
1045
0 to 10 with an additional ‘<samp>-</samp>’ for abstention. 0 stands for a poor level
1046
that you think is not worth playing, 5 for an average level and 10 for the
1047
ultimate, best levels. Try to use all values in your ratings.
1049
<p>Enigma stores the ratings with the scores and evaluates them anonymously. Enigma displays
1050
the resulting average rating of all users, for your information. Note that different ratings are
1051
possible for different score versions of the same level, because levels may improve as a result of
1052
suggestions by users. If you do not re-rate a new version of a level, Enigma inherits your rating
1053
from a previous version.
1056
<a name="Screenshots"></a>
1057
<table cellpadding="1" cellspacing="1" border="0">
1058
<tr><td valign="middle" align="left">[<a href="#Private-Annotations-and-Ratings" title="Previous section in reading order"> < </a>]</td>
1059
<td valign="middle" align="left">[<a href="#Handicap-and-PAR" title="Next section in reading order"> > </a>]</td>
1060
<td valign="middle" align="left"> </td>
1061
<td valign="middle" align="left">[<a href="#Running-Enigma" title="Beginning of this chapter or previous chapter"> << </a>]</td>
1062
<td valign="middle" align="left">[<a href="#Level-Info" title="Up section"> Up </a>]</td>
1063
<td valign="middle" align="left">[<a href="#Levelpack-Basics" title="Next chapter"> >> </a>]</td>
1064
<td valign="middle" align="left"> </td>
1065
<td valign="middle" align="left"> </td>
1066
<td valign="middle" align="left"> </td>
1067
<td valign="middle" align="left"> </td>
1068
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
1069
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
1070
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
1071
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
1073
<a name="Screenshots-1"></a>
1074
<h3 class="subsection">1.5.5 Screenshots</h3>
1076
<p>While playing a level, you can make screenshots by pressing <F10>. You can make
1077
several screenshots in sequence for documentation purposes. Enigma will store each
1078
with a unique image filename. Using the level inspector, you can view the screenshots directly
1079
from within Enigma. Just click on the screenshot button to
1080
view the first image.
1082
<p>Because any buttons would disturb the view of a screenshot, all functions are keyboard
1083
commands. Press <F1> to get a help screen. <ESC> returns to the level inspector.
1084
<Page Up> and <Page Down> will show the previous and next screenshot.
1085
If you scroll down behind the last screenshot, the “missing” screenshot file is named.
1086
This may be a useful hint as to where to search the other screenshot files on your
1087
‘<samp>user image path</samp>’ (see section <a href="#Locating-Resources">Locating Resources</a>).
1090
<a name="Handicap-and-PAR"></a>
1091
<table cellpadding="1" cellspacing="1" border="0">
1092
<tr><td valign="middle" align="left">[<a href="#Screenshots" title="Previous section in reading order"> < </a>]</td>
1093
<td valign="middle" align="left">[<a href="#User-Sound-Sets" title="Next section in reading order"> > </a>]</td>
1094
<td valign="middle" align="left"> </td>
1095
<td valign="middle" align="left">[<a href="#Running-Enigma" title="Beginning of this chapter or previous chapter"> << </a>]</td>
1096
<td valign="middle" align="left">[<a href="#Running-Enigma" title="Up section"> Up </a>]</td>
1097
<td valign="middle" align="left">[<a href="#Levelpack-Basics" title="Next chapter"> >> </a>]</td>
1098
<td valign="middle" align="left"> </td>
1099
<td valign="middle" align="left"> </td>
1100
<td valign="middle" align="left"> </td>
1101
<td valign="middle" align="left"> </td>
1102
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
1103
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
1104
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
1105
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
1107
<a name="Handicap-and-PAR-1"></a>
1108
<h2 class="section">1.6 Handicap and PAR</h2>
1110
<p>As PAR (see section <a href="#Scores">Scores</a>) describes the difficulty of a level, the handicap ‘<samp>hcp</samp>’
1111
describes your ability to solve levels in PAR. The handicap is always related
1112
to a levelpack or group of levelpacks. You can see your handicap for each levelpack in the level
1113
menu, if you select the PAR mode by clicking on the lower
1114
left button until the speeding black marble appears. The value is displayed in
1115
the upper right corner, with the number of levels you solved in PAR.
1117
<p>The handicap is similar to the golfer’s handicap. A low value is better than a
1118
high value. If you solve all levels exactly in PAR, your handicap will be 0. If
1119
you are even better than PAR, your handicap will be negative. Players can use
1120
this value to compare their overall abilities.
1122
<p>Just for those of you that want to know the details of this score rating system
1123
of PAR and handicap, here is some additional information, which others may skip and
1124
continue with the next chapter <a href="#Levelpack-Basics">Levelpack Basics</a>.
1126
<p>We request all users to send their scores. All scores are evaluated for world
1127
records and counts of level solution rates and numbers.
1129
<p>However, for the PAR calculation, we take into account only scores from users who have solved
1130
more than a certain percentage of levels (currently about 10% of the levels). For every level, we
1131
calculate the harmonic average of the scores of these
1132
‘<samp>professionals</samp>’. We take professionals who did not solve a level into account with the
1133
10-fold world record score. The harmonic average calculates as
1135
<p>harm.avg. = N / (sum_[j=1..N] 1/score_j) )
1137
<p>It weights small (short) times with a greater weight than large (long) solution times.
1139
<p>The handicap is a sum of values that describe your scores in relationship to the PAR value of a
1140
level. Since it has to take into account that you have no score at all or that no PAR value exists,
1141
we apply some exception rules to the addends:
1144
<tr><td width="10%">•</td><td width="15%">+ 1.0</td><td width="75%">for each unsolved level</td></tr>
1145
<tr><td width="10%">•</td><td width="15%">+ log10(score/par)</td><td width="75%">for each solved level with existing par if score >= par</td></tr>
1146
<tr><td width="10%">•</td><td width="15%">+ 0.7</td><td width="75%">as upper limit for each solved level with existing par if score >= par</td></tr>
1147
<tr><td width="10%">•</td><td width="15%">+ log2(score/par)</td><td width="75%">for each solved level with existing par if score < par</td></tr>
1148
<tr><td width="10%">•</td><td width="15%">- 3.0</td><td width="75%">as lower limit and as value for levels without par</td></tr>
1151
<p>Note that each score that is better than PAR results in a negative addend and
1152
thus reduces your handicap. For a levelpack with 100 levels, the handicap will
1153
be in the range of +100 to -300. For levelpacks with more or fewer levels, Enigma
1154
will scale the sum by a factor 100/size to result in comparable handicap values.
1155
Handicaps are stated with one digit behind the decimal point.
1159
<a name="User-Sound-Sets"></a>
1160
<table cellpadding="1" cellspacing="1" border="0">
1161
<tr><td valign="middle" align="left">[<a href="#Handicap-and-PAR" title="Previous section in reading order"> < </a>]</td>
1162
<td valign="middle" align="left">[<a href="#Levelpack-Basics" title="Next section in reading order"> > </a>]</td>
1163
<td valign="middle" align="left"> </td>
1164
<td valign="middle" align="left">[<a href="#Running-Enigma" title="Beginning of this chapter or previous chapter"> << </a>]</td>
1165
<td valign="middle" align="left">[<a href="#Running-Enigma" title="Up section"> Up </a>]</td>
1166
<td valign="middle" align="left">[<a href="#Levelpack-Basics" title="Next chapter"> >> </a>]</td>
1167
<td valign="middle" align="left"> </td>
1168
<td valign="middle" align="left"> </td>
1169
<td valign="middle" align="left"> </td>
1170
<td valign="middle" align="left"> </td>
1171
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
1172
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
1173
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
1174
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
1176
<a name="User-Sound-Sets-1"></a>
1177
<h2 class="section">1.7 User Sound Sets</h2>
1179
<p>(The following information accounts only for Enigma 1.01 and above.)
1180
Sound effects are triggered by so-called ‘<samp>sound events</samp>’. These sound
1181
events usually have a name (like ‘<samp>dooropen</samp>’) and an associated location
1182
(the coordinates of the door) which affects the way a sound effect is
1183
played. The collection of all sound files, their assignment to sound events,
1184
and some additional information how to play them is called a ‘<samp>sound set</samp>’.
1186
<p>You can use own sound files to create own sound sets for Enigma, and choose
1187
among them in the options menu (entry ‘<samp>Sound set</samp>’). You can distribute
1188
these sound sets under your own choice of license and install sound sets from
1189
other users. There is no internal limit for the number of installed sound sets.
1191
<p>The sound event is converted into a real sound effect using tables, you can
1192
find such tables in the ‘<samp>data/sound-defaults.lua</samp>’ file and in the empty
1193
sample file at ‘<samp>reference/soundset.lua</samp>’. Each entry in these tables is
1194
either a string like ‘<samp>enigma/st-coinslot</samp>’, which is interpreted as the
1195
file ‘<samp>soundsets/enigma/st-coinslot.wav</samp>’ with some default properties, or a
1196
list of sound attributes enclosed in curly braces. Sound events triggered by a
1197
<a href="#sound">sound</a> message are converted the same way. Here is an example of such an
1200
<table><tr><td> </td><td><pre class="example">dooropen = { file="my_soundset/open-door", volume=0.9, priority=4 },
1201
</pre></td></tr></table>
1203
<p>The meaning of these attributes is as follows:
1206
<li> ‘<samp>file</samp>’
1207
Path and name of the sound file for this event, without the ‘<samp>.wav</samp>’
1210
</li><li> ‘<samp>volume</samp>’
1211
The sound volume: 1.0 is default, 0.0 is silent.
1213
</li><li> ‘<samp>priority</samp>’
1214
If many effects are active at the same time, high-priority
1215
effects can replace lower-priority effects. Use an integer
1216
between 1 and 10 (default 1). This property does not yet
1217
work with Enigma 1.01.
1219
</li><li> ‘<samp>global</samp>’
1220
Either ‘<samp>true</samp>’ or ‘<samp>false</samp>’. If true, no stereo effects are
1221
applied and there is no attenuation. Used for menu sound,
1222
level end sounds, etc. Default is ‘<samp>false</samp>’.
1224
</li><li> ‘<samp>loop</samp>’
1225
‘<samp>true</samp>’ or ‘<samp>false</samp>’. If true, the sound repeats infinitely
1226
until canceled. Default is ‘<samp>false</samp>’.
1228
</li><li> ‘<samp>damp_max</samp>’, ‘<samp>damp_inc</samp>’, ‘<samp>damp_mult</samp>’, ‘<samp>damp_min</samp>’, ‘<samp>damp_tick</samp>’
1229
Parameters for sound damping. Sounds from noisy objects like light passengers
1230
are damped to reduce the noise. For this, the sound event’s frequency is
1231
estimated. ‘<samp>damp_max</samp>’ calibrates the maximal damping factor (high means
1232
quiet), ‘<samp>damp_inc</samp>’ how fast the damping accumulates, ‘<samp>damp_mult</samp>’ is an
1233
overall factor, ‘<samp>damp_min</samp>’ defines a lower bound for the damping entries
1234
(beyond which they are removed from memory) and ‘<samp>damp_tick</samp>’ the factor
1235
that’s applied all 0.1 seconds. See ‘<samp>sound.hh</samp>’ for details.
1236
Defaults: 10.0, 1.0, 1.0, 0.5, 0.9.
1240
<p>To design a new sound set, proceed as follows:
1244
Create a new folder containing a copy of the sample file ‘<samp>soundset.lua</samp>’
1245
and the wav files you want to use.
1248
Move this new folder into Enigma’s "soundsets" folder in your user path.
1249
(Possibly you have to create it.) The directory structure should look
1250
something like this:
1252
<table><tr><td> </td><td><pre class="example">(user path)/soundsets/my_sounds/
1257
</pre></td></tr></table>
1260
Run Enigma and choose ‘<samp>My Soundset</samp>’ in the options menu. Since this file’s
1261
sound set does not map any sound effect to a wav file, you should hear nothing.
1264
Edit the contents of ‘<samp>soundset.lua</samp>’ to your liking. You can access the
1265
default sound files, e.g.:
1267
<table><tr><td> </td><td><pre class="example">...
1268
coinsloton = { file="enigma/st-coinslot" },
1270
</pre></td></tr></table>
1272
<p>When using own sound files, remember to add the subfolder, like in
1274
<table><tr><td> </td><td><pre class="example">...
1275
coinsloton = { file="my_sounds/soundfile_13" },
1277
</pre></td></tr></table>
1279
<p>No extension ".wav"! It’s added automatically. Make sure that the
1280
extension is in lower case letters.
1283
Replace ‘<samp>MY_SOUNDSET</samp>’ by a suitable variable name, and ‘<samp>My Soundset</samp>’
1284
by the name you want to see in the sound options menu. Remember to
1285
make it short enough to fit on the button. The three identifiers variable,
1286
button name, directory name need not have the same names, but it eases the life
1287
of other developers to give them similar names that uniquely determine the
1292
<p>Remember to choose the sound set in the options menu anew each time you change
1293
its name. And always shut down Enigma before changing sound sets, new sounds
1294
are not recognized during runtime.
1296
<p>Feel free to zip and distribute the whole directory containing your
1297
sounds and the ‘<samp>soundset.lua</samp>’ file. You can install a downloaded zipped
1298
sound set simply by unpacking it and placing it into the
1299
‘<samp>soundsets</samp>’-subdirectory of your user path. Make sure that the
1300
‘<samp>soundset.lua</samp>’ is always exactly one subdirectory below ‘<samp>soundsets</samp>’.
1301
Deinstall a user sound set simply by deleting its directory. Renaming the
1302
directory does not suffice – you have to rename the ‘<samp>soundset.lua</samp>’ if you
1303
want to hide a sound set from Enigma. This can be advantageous if you use
1304
interdependent sound sets (sound sets that share sound files) and want to
1305
deactivate just one of them.
1309
<a name="Levelpack-Basics"></a>
1310
<table cellpadding="1" cellspacing="1" border="0">
1311
<tr><td valign="middle" align="left">[<a href="#User-Sound-Sets" title="Previous section in reading order"> < </a>]</td>
1312
<td valign="middle" align="left">[<a href="#Getting-Started-with-Levelpacks" title="Next section in reading order"> > </a>]</td>
1313
<td valign="middle" align="left"> </td>
1314
<td valign="middle" align="left">[<a href="#Running-Enigma" title="Beginning of this chapter or previous chapter"> << </a>]</td>
1315
<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up </a>]</td>
1316
<td valign="middle" align="left">[<a href="#Level-Basics" title="Next chapter"> >> </a>]</td>
1317
<td valign="middle" align="left"> </td>
1318
<td valign="middle" align="left"> </td>
1319
<td valign="middle" align="left"> </td>
1320
<td valign="middle" align="left"> </td>
1321
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
1322
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
1323
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
1324
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
1326
<a name="Levelpack-Basics-1"></a>
1327
<h1 class="chapter">2. Levelpack Basics</h1>
1329
<p>Knowing the basics of running Enigma, you may wonder how levels are organized in
1330
levelpacks and how you can add levels or complete levelpacks to Enigma.
1332
<a name="index-crossreference"></a>
1333
<a name="index-crossindex"></a>
1334
<a name="index-levelpack"></a>
1335
<a name="index-index"></a>
1336
<p>Levelpacks are sorted collections of levels that consist of an index and optional
1337
attached level sources. Not all level sources of a levelpack have to be included
1338
within the levelpack itself. A levelpack can crossreference levels stored in
1339
other levelpacks. If a levelpack has no level sources of its own and consists only
1340
of crossreferences, we speak of a crossindex, since just a single index file represents the
1343
<p>These definitions suit all versions of Enigma well. However, up to Enigma 0.92, levelpacks
1344
needed to be manually edited, and the registration of levelpacks was a little bit cryptic. Thus, we
1345
decided to rewrite the complete levelpack system for Enigma 1.0, and tried to make it versatile
1346
and easy to use. We did set up the following aims:
1350
an ‘<samp>Auto</samp>’ levelpack that allows level addition by drag and drop of the
1354
levelpack addition simply by copying the files to the userpath
1357
autodetection of all levelpacks without editing any registration files
1360
commandline-supplied levels as a standard levelpack
1363
a ‘<samp>History</samp>’ levelpack with crossreferences of last-played levels
1366
level search results as a levelpack of crossreferences
1369
zipped levelpacks that are just archives of levelpack directories and their files
1372
grouping of levelpacks in the menu
1375
integrated composer to create and modify new levelpacks
1378
updates of levelpacks without updating Enigma itself
1381
automatic conversion of Enigma 0.92 levelpacks
1385
<p>Some of these features work seamlessly. You can use them immediately from the
1386
levelpack menu. For others, you may need to know where to place files. We will
1387
explain these details in the following sections:
1389
<table class="menu" border="0" cellspacing="0">
1390
<tr><td align="left" valign="top"><a href="#Getting-Started-with-Levelpacks">2.1 Getting Started with Levelpacks</a></td><td> </td><td align="left" valign="top">
1392
<tr><td align="left" valign="top"><a href="#Converting-0_002e92-Levelpacks">2.2 Converting 0.92 Levelpacks</a></td><td> </td><td align="left" valign="top">
1394
<tr><td align="left" valign="top"><a href="#Zip-Levelpacks">2.3 Zip Levelpacks</a></td><td> </td><td align="left" valign="top">
1396
<tr><td align="left" valign="top"><a href="#Grouping-and-Sorting-Levelpacks">2.4 Grouping and Sorting Levelpacks</a></td><td> </td><td align="left" valign="top">
1398
<tr><td align="left" valign="top"><a href="#Creating-New-Levelpacks">2.5 Creating New Levelpacks</a></td><td> </td><td align="left" valign="top">
1400
<tr><td align="left" valign="top"><a href="#Modifying-and-Deleting-Levelpacks">2.6 Modifying and Deleting Levelpacks</a></td><td> </td><td align="left" valign="top">
1402
<tr><td align="left" valign="top"><a href="#Composing-Levelpacks">2.7 Composing Levelpacks</a></td><td> </td><td align="left" valign="top">
1407
<a name="Getting-Started-with-Levelpacks"></a>
1408
<table cellpadding="1" cellspacing="1" border="0">
1409
<tr><td valign="middle" align="left">[<a href="#Levelpack-Basics" title="Previous section in reading order"> < </a>]</td>
1410
<td valign="middle" align="left">[<a href="#Converting-0_002e92-Levelpacks" title="Next section in reading order"> > </a>]</td>
1411
<td valign="middle" align="left"> </td>
1412
<td valign="middle" align="left">[<a href="#Levelpack-Basics" title="Beginning of this chapter or previous chapter"> << </a>]</td>
1413
<td valign="middle" align="left">[<a href="#Levelpack-Basics" title="Up section"> Up </a>]</td>
1414
<td valign="middle" align="left">[<a href="#Level-Basics" title="Next chapter"> >> </a>]</td>
1415
<td valign="middle" align="left"> </td>
1416
<td valign="middle" align="left"> </td>
1417
<td valign="middle" align="left"> </td>
1418
<td valign="middle" align="left"> </td>
1419
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
1420
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
1421
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
1422
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
1424
<a name="Getting-Started-with-Levelpacks-1"></a>
1425
<h2 class="section">2.1 Getting Started with Levelpacks</h2>
1427
<p>One of the outstanding features of Enigma is its extensibility by new levels.
1428
And the community of users usually provides us several new great levels every week.
1430
<p>Adding a new level that you receive as an XML file is very simple. Locate the
1431
subdirectory ‘<samp>levels/auto</samp>’ on your ‘<samp>user path</samp>’ (see section <a href="#Locating-Resources">Locating Resources</a>).
1432
Just copy the level file to this folder and restart Enigma. The new level will be
1433
part of the ‘<samp>Auto</samp>’ levelpack, and you can play it like any other level.
1435
<p>Please note that Enigma displays erroneous or incompatible levels with an error icon in the level
1436
menu. Of course an attempt to run such a level will result in an error message. Look at the level
1437
metadata with the levelinspector
1438
(see section <a href="#Level-Info">Level Info</a>) to identify the required compatibility version, and contact
1439
the author via the address in case of level code errors.
1441
<p>A second way to run new levels is to add the address of the level files to the
1442
commandline (see section <a href="#Startup-Switches">Startup Switches</a>). This way you can play levels that are stored
1443
anywhere, and you may even use url addresses of levels stored on the internet. Levels added to
1444
the commandline are accessible via the ‘<samp>Startup Levels</samp>’
1447
<p>If you want to run an old-fashioned Lua level that someone wrote for Enigma 0.92 or earlier,
1448
you may try to start it via the commandline. These old levels miss necessary metadata for auto
1449
detection. However, commandline-supplied levels are treated as temporary levels available just
1450
for a single run of Enigma; reasonable defaults substitute the missing data. The level will
1451
probably run, but scoring and copy, paste and linking of such levels is not possible.
1453
<p>Besides single new levels, the community may provide you with complete levelpacks, too. These
1454
levelpacks may occur as directories with levels, zip archives or single XML files. You can install
1455
all of them simply by copying the files, but we have to distinguish the three formats.
1457
<p>You must copy levelpacks distributed as directories, with level files and an index file in them, to
1458
the subdirectory ‘<samp>levels</samp>’ on your ‘<samp>user path</samp>’
1459
(see section <a href="#Locating-Resources">Locating Resources</a>).
1461
<p>You must copy levelpacks distributed as zip archives to the subdirectory
1462
‘<samp>levels</samp>’ on your ‘<samp>user path</samp>’. You do not need to unpack the zip,
1463
although it is possible, as described in the section <a href="#Zip-Levelpacks">Zip Levelpacks</a>.
1465
<p>You must copy levelpacks that are distributed as a single XML index file to the subdirectory
1466
‘<samp>levels/cross</samp>’ on your ‘<samp>user path</samp>’.
1468
<p>All new levelpacks should be accessible via the levelpack
1469
menu after restarting Enigma.
1471
<p>That is all you need to know to be able to add new levels and levelpacks for
1472
testing and playing. If your main interest lies in writing your own levels, you may
1473
want to proceed directly to chapter <a href="#Level-Basics">Level Basics</a>. The rest of this chapter
1474
explains how to arrange and sort existing levels in your own levelpacks.
1477
<a name="Converting-0_002e92-Levelpacks"></a>
1478
<table cellpadding="1" cellspacing="1" border="0">
1479
<tr><td valign="middle" align="left">[<a href="#Getting-Started-with-Levelpacks" title="Previous section in reading order"> < </a>]</td>
1480
<td valign="middle" align="left">[<a href="#Zip-Levelpacks" title="Next section in reading order"> > </a>]</td>
1481
<td valign="middle" align="left"> </td>
1482
<td valign="middle" align="left">[<a href="#Levelpack-Basics" title="Beginning of this chapter or previous chapter"> << </a>]</td>
1483
<td valign="middle" align="left">[<a href="#Levelpack-Basics" title="Up section"> Up </a>]</td>
1484
<td valign="middle" align="left">[<a href="#Level-Basics" title="Next chapter"> >> </a>]</td>
1485
<td valign="middle" align="left"> </td>
1486
<td valign="middle" align="left"> </td>
1487
<td valign="middle" align="left"> </td>
1488
<td valign="middle" align="left"> </td>
1489
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
1490
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
1491
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
1492
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
1494
<a name="Converting-0_002e92-Levelpacks-1"></a>
1495
<h2 class="section">2.2 Converting 0.92 Levelpacks</h2>
1497
<p>With the changes of the levelpack index format, converting old levelpacks is necessary. Although
1498
the main work is done automatically just by starting Enigma, a few special cases remain that
1499
need manual preparation. Further on, after the autoconversion, some cleanup may be useful.
1501
<p>If you formerly maintained your levelpacks within the Enigma system levels directory, you
1502
should now copy your own levelpacks from the old Enigma version to the ‘<samp>user path</samp>’
1503
subdir ‘<samp>levels</samp>’ (see section <a href="#Locating-Resources">Locating Resources</a>). The ‘<samp>user path</samp>’ exists on all
1504
systems, and since Enigma 1.00 will never write to the system levels directory, it will perform
1505
updates and conversions only on the ‘<samp>user path</samp>’. If you
1506
registered your levelpacks on the system levels directory within the ‘<samp>index.lua</samp>’
1507
file, you need to copy these registration lines to the ‘<samp>index_user.lua</samp>’ file,
1508
which you should store on your ‘<samp>user path</samp>’.
1510
<p>If you maintained several of your own levelpacks, Enigma 0.92 allowed you to keep them
1511
in several subdirectories of the ‘<samp>levels</samp>’ directory. However, since it also allowed you to
1512
keep all level files and different indices in the ‘<samp>levels</samp>’ directory
1513
itself, you will run into trouble with the auto conversion, because Enigma 1.00 allows only one
1514
levelpack with attached level files per directory.
1515
In this case, we recommend a step-by-step conversion: in every step, provide only one old index
1516
for conversion. Enigma will convert this index to a new ‘<samp>index.xml</samp>’.
1517
Move this new index, together with all levels, to a subdirectory and convert the
1520
<p>A last special case occurs if you had an old index stored in ‘<samp>levels</samp>’ that
1521
referenced level files in different subdirectories of ‘<samp>levels</samp>’. Since Enigma 0.92 did not
1522
have a concept of cross-references, and Enigma 1.00 requires that you store all level files
1523
attached to a levelpack in a single subdirectory, the conversion algorithm needs to guess the
1524
correct subdirectory. It simply takes the subdirectory of the first level. If this does not fit, you
1525
may need to clean up your 0.92 levelpack prior to conversion.
1527
<p>Enigma should convert all other standard levelpacks without problems. It only performs the
1528
conversion once. As soon as the new ‘<samp>index.xml</samp>’ exists, only this
1529
index is used. Thus, after a careful check, you may remove the old ‘<samp>index.txt</samp>’.
1530
We recommend keeping a backup of the old index until you have completely switched to
1533
<p>If you used a levelpack of your own in the zip format, you will find a subdirectory named with
1534
the base name of the zip archive in your user ‘<samp>levels</samp>’
1535
directory. Enigma stores the converted ‘<samp>index.xml</samp>’ within this directory. You
1536
may want to exchange the old ‘<samp>index.txt</samp>’ in the zip with the new index.
1537
Afterwards you can delete the subdirectory, since Enigma will load the index directly
1538
from the zip archive.
1540
<p>After converting your levelpacks, we strongly recommend that you update your own
1541
levels to the new XML format, as described in <a href="#Level-Basics">Level Basics</a>.
1544
<a name="Zip-Levelpacks"></a>
1545
<table cellpadding="1" cellspacing="1" border="0">
1546
<tr><td valign="middle" align="left">[<a href="#Converting-0_002e92-Levelpacks" title="Previous section in reading order"> < </a>]</td>
1547
<td valign="middle" align="left">[<a href="#Grouping-and-Sorting-Levelpacks" title="Next section in reading order"> > </a>]</td>
1548
<td valign="middle" align="left"> </td>
1549
<td valign="middle" align="left">[<a href="#Levelpack-Basics" title="Beginning of this chapter or previous chapter"> << </a>]</td>
1550
<td valign="middle" align="left">[<a href="#Levelpack-Basics" title="Up section"> Up </a>]</td>
1551
<td valign="middle" align="left">[<a href="#Level-Basics" title="Next chapter"> >> </a>]</td>
1552
<td valign="middle" align="left"> </td>
1553
<td valign="middle" align="left"> </td>
1554
<td valign="middle" align="left"> </td>
1555
<td valign="middle" align="left"> </td>
1556
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
1557
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
1558
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
1559
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
1561
<a name="Zip-Levelpacks-1"></a>
1562
<h2 class="section">2.3 Zip Levelpacks</h2>
1564
<p>Besides the classic levelpack format of a subdirectory of ‘<samp>levels</samp>’ with
1565
an ‘<samp>index.xml</samp>’ and several level files, Enigma 1.00 provides a compatible
1566
zip archive format. This zip allows you to reduce resources and to ease distribution
1569
<p>The compatibility is 100%. If you have a classic subdirectory levelpack, you
1570
can simply zip the complete subdirectory and name the zip with the name of the
1571
subdirectory, plus the standard ‘<samp>.zip</samp>’ suffix. Now you can completely remove the
1572
subdirectory; Enigma autodetects the levelpack and it is fully playable. Even cross-references
1573
into this levelpack will not be broken!
1575
<p>On the other hand, Enigma allows you to expand every zip levelpack to a subdirectory with
1576
index and level files. Again, everything runs and no cross-references are broken.
1578
<p>If you keep both, the files contained in the subdirectory precede files in the zip
1579
archive. Thus, Enigma stores updates of single files in subdirectories in parallel
1580
to existing zip archives.
1583
<a name="Grouping-and-Sorting-Levelpacks"></a>
1584
<table cellpadding="1" cellspacing="1" border="0">
1585
<tr><td valign="middle" align="left">[<a href="#Zip-Levelpacks" title="Previous section in reading order"> < </a>]</td>
1586
<td valign="middle" align="left">[<a href="#Creating-New-Levelpacks" title="Next section in reading order"> > </a>]</td>
1587
<td valign="middle" align="left"> </td>
1588
<td valign="middle" align="left">[<a href="#Levelpack-Basics" title="Beginning of this chapter or previous chapter"> << </a>]</td>
1589
<td valign="middle" align="left">[<a href="#Levelpack-Basics" title="Up section"> Up </a>]</td>
1590
<td valign="middle" align="left">[<a href="#Level-Basics" title="Next chapter"> >> </a>]</td>
1591
<td valign="middle" align="left"> </td>
1592
<td valign="middle" align="left"> </td>
1593
<td valign="middle" align="left"> </td>
1594
<td valign="middle" align="left"> </td>
1595
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
1596
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
1597
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
1598
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
1600
<a name="Grouping-and-Sorting-Levelpacks-1"></a>
1601
<h2 class="section">2.4 Grouping and Sorting Levelpacks</h2>
1603
<p>As the number of levelpacks increased, it became necessary to sort and group the
1604
levelpacks in the menu. We tried to provide a useful set of default groups
1605
and default assignment of the distributed levelpacks to these groups:
1609
<b>Enigma</b> - levels that are written just for Enigma
1612
<b>Déjà-vu</b> - levels that you may have seen before
1618
<b>Facets</b> - special sortings and views of the levels above
1621
<b>User</b> - personal levels and levelpacks like History, Autofolder generated by the
1622
system for the user.
1625
<b>Development</b> - templates and unfinished levels from the Enigma Team
1632
<p>Still, this is just a proposal. You are free to rename the groups, add new groups and change the
1633
assignments of the levelpacks. As in other parts of Enigma, you can right or control click on the
1634
group and levelpack buttons.
1636
<p>The group configuration menu allows you to rename and reposition a group. You
1637
can choose any name that is not a duplicate, that is not enclosed in square brackets
1638
and differs from ‘<samp>Every Group</samp>’. Note that you may not be able to enter as many
1639
characters as you are used to. Sorry for this inconvenience.
1641
<p>The levelpack configuration menu allows you to assign a pack to a group. The
1642
group list contains two special entries: ‘<samp>[Every Group]</samp>’ and another name
1643
enclosed in square brackets. Selecting the first pseudogroup displays the levelpack in every
1644
group. This is the default assignment of the ‘<samp>Startup Levels</samp>’ group. The second square
1645
bracket-enclosed name is the default group of the
1646
levelpack itself. It is a hint for you and allows you to reassign a levelpack
1647
to the default group even if meanwhile you have deleted the group.
1650
<a name="Creating-New-Levelpacks"></a>
1651
<table cellpadding="1" cellspacing="1" border="0">
1652
<tr><td valign="middle" align="left">[<a href="#Grouping-and-Sorting-Levelpacks" title="Previous section in reading order"> < </a>]</td>
1653
<td valign="middle" align="left">[<a href="#Modifying-and-Deleting-Levelpacks" title="Next section in reading order"> > </a>]</td>
1654
<td valign="middle" align="left"> </td>
1655
<td valign="middle" align="left">[<a href="#Levelpack-Basics" title="Beginning of this chapter or previous chapter"> << </a>]</td>
1656
<td valign="middle" align="left">[<a href="#Levelpack-Basics" title="Up section"> Up </a>]</td>
1657
<td valign="middle" align="left">[<a href="#Level-Basics" title="Next chapter"> >> </a>]</td>
1658
<td valign="middle" align="left"> </td>
1659
<td valign="middle" align="left"> </td>
1660
<td valign="middle" align="left"> </td>
1661
<td valign="middle" align="left"> </td>
1662
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
1663
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
1664
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
1665
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
1667
<a name="Creating-New-Levelpacks-1"></a>
1668
<h2 class="section">2.5 Creating New Levelpacks</h2>
1670
<p>To create a new levelpack, you simply select the group to which you want to add
1671
the new pack. This is most likely the ‘<samp>User</samp>’ group. Right or ctrl click on
1672
the group and simply click on the ‘<samp>New Levelpack</samp>’ button. Enigma will call the
1673
levelpack configuration menu, which allows you to enter all the important data for the creation
1676
<p>First you should enter a name for the levelpack. You are limited to characters
1677
that can be used for filenames, too. You may use alphanumerical characters A-Z, a-z, 0-9 and
1678
space, underscore and hyphen. Note that you may rename the pack
1679
later for a better or more suitable display name (see section <a href="#Modifying-and-Deleting-Levelpacks">Modifying and Deleting Levelpacks</a>).
1681
<p>Later, you should decide whether you want a levelpack that can contain level
1682
sources or just a crossreference levelpack. The first one is useful for storing
1683
your own self-written levels or levels that you download from the internet.
1684
You may use the crossreference levelpacks for your favorite collections, where you simply
1685
reference existing levels of other levelpacks with your own personal sorting.
1686
You set the selected type with the ‘<samp>Level types</samp>’ button, which uses symbols
1687
for references and carbon copies.
1689
<p>The ‘<samp>Default Location</samp>’ is a number that determines the sorting location
1690
within levelpack groups, if you have not resorted the levelpack manually
1691
(see section <a href="#Grouping-and-Sorting-Levelpacks">Grouping and Sorting Levelpacks</a>). This default value is relevant only
1692
if you distribute your levelpack and want to ensure that the users will find
1693
your levelpack at a proper location. The value given after creating a new
1694
levelpack should work well in most circumstances.
1696
<p>You may declare yourself as owner or creator of the levelpack. This is just a
1697
string for identification purposes.
1699
<p>Finally, when you have completed the configuration, you can create the levelpack by
1700
clicking ‘<samp>OK</samp>’. Enigma will create the levelpack on your ‘<samp>userpath</samp>’
1701
(see section <a href="#Locating-Resources">Locating Resources</a>).
1703
<p>If you decide not to create a new levelpack, just click ‘<samp>Undo</samp>’. Enigma will not create or
1704
change anything in this case.
1706
<p>If you want to set up the new levelpack immediately, you can click directly on
1707
‘<samp>Compose Pack</samp>’. Enigma will create the levelpack, and you can use the composer to fill
1711
<a name="Modifying-and-Deleting-Levelpacks"></a>
1712
<table cellpadding="1" cellspacing="1" border="0">
1713
<tr><td valign="middle" align="left">[<a href="#Creating-New-Levelpacks" title="Previous section in reading order"> < </a>]</td>
1714
<td valign="middle" align="left">[<a href="#Composing-Levelpacks" title="Next section in reading order"> > </a>]</td>
1715
<td valign="middle" align="left"> </td>
1716
<td valign="middle" align="left">[<a href="#Levelpack-Basics" title="Beginning of this chapter or previous chapter"> << </a>]</td>
1717
<td valign="middle" align="left">[<a href="#Levelpack-Basics" title="Up section"> Up </a>]</td>
1718
<td valign="middle" align="left">[<a href="#Level-Basics" title="Next chapter"> >> </a>]</td>
1719
<td valign="middle" align="left"> </td>
1720
<td valign="middle" align="left"> </td>
1721
<td valign="middle" align="left"> </td>
1722
<td valign="middle" align="left"> </td>
1723
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
1724
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
1725
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
1726
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
1728
<a name="Modifying-and-Deleting-Levelpacks-1"></a>
1729
<h2 class="section">2.6 Modifying and Deleting Levelpacks</h2>
1731
<p>To modify a levelpack, right or ctrl click on its button in the levelpack menu.
1732
You will see the metadata for all levelpacks. However, an ‘<samp>Edit Metadata</samp>’ button will
1733
appear only for your own levelpacks, which Enigma stores on your ‘<samp>userpath</samp>’.
1734
Clicking on it allows you to edit the metadata.
1736
<p>Renaming the levelpack is possible, but Enigma will not change the filenames anymore. It will
1737
use the new name as the logical levelpack name that shows up in Enigma.
1739
<p>Other attributes that you can modify include the ‘<samp>Default Location</samp>’ and the
1740
‘<samp>Owner</samp>’.
1742
<p>Note that changing the levelpack type later is not possible. You must create a new levelpack of
1743
the proper type and copy the levels by using
1744
<a href="#Composing-Levelpacks">Composing Levelpacks</a>.
1746
<p>We do not provide a levelpack deletion function to avoid unintended loss of levelsources.
1747
Still, the deletion of a levelpack is as simple as deleting the complete levelpack
1748
directory on your ‘<samp>userpath</samp>’. For crossreference levelpacks, you simply need to
1749
delete the index XML file on the ‘<samp>levels/cross</samp>’ subdirectory of your
1750
‘<samp>userpath</samp>’.
1753
<a name="Composing-Levelpacks"></a>
1754
<table cellpadding="1" cellspacing="1" border="0">
1755
<tr><td valign="middle" align="left">[<a href="#Modifying-and-Deleting-Levelpacks" title="Previous section in reading order"> < </a>]</td>
1756
<td valign="middle" align="left">[<a href="#Level-Basics" title="Next section in reading order"> > </a>]</td>
1757
<td valign="middle" align="left"> </td>
1758
<td valign="middle" align="left">[<a href="#Levelpack-Basics" title="Beginning of this chapter or previous chapter"> << </a>]</td>
1759
<td valign="middle" align="left">[<a href="#Levelpack-Basics" title="Up section"> Up </a>]</td>
1760
<td valign="middle" align="left">[<a href="#Level-Basics" title="Next chapter"> >> </a>]</td>
1761
<td valign="middle" align="left"> </td>
1762
<td valign="middle" align="left"> </td>
1763
<td valign="middle" align="left"> </td>
1764
<td valign="middle" align="left"> </td>
1765
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
1766
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
1767
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
1768
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
1770
<a name="Composing-Levelpacks-1"></a>
1771
<h2 class="section">2.7 Composing Levelpacks</h2>
1773
<p>You can change the levels of a levelpack by using the levelpack composer. You call it
1774
by right or ctrl clicking on the levelpack button in the levelpack menu, then
1775
clicking on the ‘<samp>Compose Pack</samp>’ button in the levelpack configuration menu.
1777
<p>The composer looks similar to the levelmenu, but it provides other functionality. Enigma lists
1778
all commands in the F1 help menu. First, if you compose your own levelpacks, you may note
1779
that the levels are bordered red. This is a warning, since you can modify these levelpacks.
1780
System levelpacks (the distributed Enigma levelpacks) will border the levels in gray, since you
1781
can use the composer only for copying levels to the clipboard.
1783
<p>The clipboard allows you to select levels in one or several levelpacks and to
1784
insert these levels as reference or as copy to your own levelpacks. First, clear
1785
the clipboard by ‘<samp>Shift delete</samp>’. Then select any levelpack you want from within the
1786
composer levels. Add them by ‘<samp>Shift click</samp>’. They will appear
1787
in the upper text lines in the composer. Return to the levelpack where you want
1788
to add the levels. Select the level behind which you want to add the levels. Use
1789
‘<samp>F8</samp>’ to insert the levels of the clipboard as references. If you edit a
1790
levelpack that can take level copies, you may use ‘<samp>F9</samp>’ to insert the levels
1791
of the clipboard as file copies.
1793
<p>As soon as you modify the levelpack, a small red triangle in the upper left corner
1794
signals the modification. Leaving the composer via the ‘<samp>OK</samp>’ button finalizes all
1795
changes. Leaving the composer via the‘<samp>Undo</samp>’ button reverts all changes.
1797
<p>Besides adding levels, you can delete levels by using the ‘<samp>delete</samp>’
1798
button. Note that Enigma will delete the level files themselves if you delete a level
1799
that is not just a reference. Be careful with all levels that have the document
1800
icon on their preview. You can revert deletions with the ‘<samp>Undo</samp>’ button.
1802
<p>You can resort all levels with the ‘<samp>alt left arrow</samp>’ and ‘<samp>alt right arrow</samp>’.
1803
The new sorting appears immediately, and you can save it by using the ‘<samp>OK</samp>’ button.
1805
<p>You can use the ‘<samp>F5</samp>’ button to update the index from the levels. This is very useful if
1806
you edit levels yourself. The levelpack will notice changes in title, revision, easy mode support
1807
etc. Enigma updates all levels of the levelpack at once.
1809
<p>By using the Auto levelpack and the composer, you can set up levelpacks of your own levels, as
1810
follows: Create a new levelpack, add the level files to the ‘<samp>auto</samp>’
1811
folder, restart Enigma, add the levels from the ‘<samp>auto</samp>’ folder to the clipboard,
1812
use the composer to insert the levelpack to your levelpack as a copy, and delete the
1813
unused level file copies from the ‘<samp>auto</samp>’ folder.
1817
<a name="Level-Basics"></a>
1818
<table cellpadding="1" cellspacing="1" border="0">
1819
<tr><td valign="middle" align="left">[<a href="#Composing-Levelpacks" title="Previous section in reading order"> < </a>]</td>
1820
<td valign="middle" align="left">[<a href="#Getting-Started-with-Levels" title="Next section in reading order"> > </a>]</td>
1821
<td valign="middle" align="left"> </td>
1822
<td valign="middle" align="left">[<a href="#Levelpack-Basics" title="Beginning of this chapter or previous chapter"> << </a>]</td>
1823
<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up </a>]</td>
1824
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Next chapter"> >> </a>]</td>
1825
<td valign="middle" align="left"> </td>
1826
<td valign="middle" align="left"> </td>
1827
<td valign="middle" align="left"> </td>
1828
<td valign="middle" align="left"> </td>
1829
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
1830
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
1831
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
1832
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
1834
<a name="Level-Basics-1"></a>
1835
<h1 class="chapter">3. Level Basics</h1>
1837
<p>Now that you have played some levels of Enigma, you may have noticed that Enigma is quite a
1838
dynamic game with versatile levels. Thus, it is not astonishing that it is impossible to describe
1839
such levels with a static approach of a simple object map like Sokoban. Some levels, like mazes,
1840
generate their layout and look different each time you play them. Other levels provide a dynamic
1841
behavior during the play; i.e., switches may open doors only in certain circumstances. To
1842
comply with these demands, we have integrated the powerful lightweight C extension language
1843
<a href="http://www.lua.org">Lua</a> as of version 5.1.4 into Enigma.
1845
<p>Up to Enigma 0.92, two different level formats did exist. One was a XML-like format, primarily
1846
designed for external level editor programs. Because its static object map description part was
1847
inconvenient for manual editing, many authors never used it. The second format was plain Lua
1848
code that used an interface of Enigma Lua functions to add objects and callback functions.
1849
Nearly all authors used this second format, but it had a small drawback:
1850
you could store metadata for the level (like the author name, license info, and last but not least,
1851
the level name itself) only as unformatted Lua comments, and you had
1852
to reinsert it manually into the level-package indices.
1854
<p>With the post-0.92 XMLification of Enigma, we achieved full XML support by integrating
1855
Apache Xerces, and were wondering how to get rid of the old level format drawbacks and how to
1856
add some compelling new features:
1860
a single format with optional parts - use only those parts you need
1863
no major changes or any limitations for Lua level authors
1866
keep all author-supplied metadata in the level
1869
enable plug & play for users - copy the level from the author and play it
1870
without manual index edition
1873
support of various encodings, such as US-ASCII, UTF-8, UTF-16, Windows-1252
1876
internationalization of levels - allow authors to add strings in their native
1877
language and supply translators with all translatable level strings and comments
1878
from the authors’ how-to-translate.
1881
add a release and dependency management for levels and libraries
1884
add level update and upgrade support for levels and libraries
1887
substitute the old XML format with a versatile editor interface
1890
keep the format open to future extensions
1894
<p>Let us have a first view on complete simple ‘<samp>Hello World</samp>’ level in the new format:
1896
<table><tr><td> </td><td><pre class="example"><?xml version="1.0" encoding="<var>UTF-8</var>" standalone="no" ?>
1897
<<i>el</i>:<b>level</b> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="<i>http://enigma-game.org/schema/level/1 level.xsd</i>" xmlns:<i>el</i>="<i>http://enigma-game.org/schema/level/1</i>">
1898
<<i>el</i>:<b>protected</b> >
1899
<<i>el</i>:<b>info</b> <i>el</i>:<b>type</b>="<var>level</var>">
1900
<<i>el</i>:<b>identity</b> <i>el</i>:<b>title</b>="<var>Demo Simple</var>" <i>el</i>:<b>id</b>="<var>20060210ral001</var>"/>
1901
<<i>el</i>:<b>version</b> <i>el</i>:<b>score</b>="<var>1</var>" <i>el</i>:<b>release</b>="<var>1</var>" <i>el</i>:<b>revision</b>="<var>2</var>" <i>el</i>:<b>status</b>="<var>stable</var>"/>
1902
<<i>el</i>:<b>author</b> <i>el</i>:<b>name</b>="<var>Ronald Lamprecht</var>"/>
1903
<<i>el</i>:<b>copyright</b>><var>Copyright © 2006,2009 Ronald Lamprecht</var></<i>el</i>:<b>copyright</b>>
1904
<<i>el</i>:<b>license</b> <i>el</i>:<b>type</b>="<var>GPL v2.0 or above</var>" <i>el</i>:<b>open</b>="<var>true</var>"/>
1905
<<i>el</i>:<b>compatibility</b> <i>el</i>:<b>enigma</b>="<var>1.10</var>"/>
1906
<<i>el</i>:<b>modes</b> <i>el</i>:<b>easy</b>="<var>false</var>" <i>el</i>:<b>single</b>="<var>true</var>" <i>el</i>:<b>network</b>="<var>false</var>"/>
1907
<<i>el</i>:<b>score</b> <i>el</i>:<b>easy</b>="<var>-</var>" <i>el</i>:<b>difficult</b>="<var>-</var>"/>
1908
</<i>el</i>:<b>info</b>>
1909
<<i>el</i>:<b>luamain</b>><![CDATA[
1910
<i>ti</i>["<var> </var>"] = {"<b>fl_lawn_b</b>"}
1911
<i>ti</i>["<var>#</var>"] = {"<b>st_box</b>"}
1912
<i>ti</i>["<var>o</var>"] = {"<b>st_oxyd</b>"}
1913
<i>ti</i>["<var>@</var>"] = {"#<b>ac_marble</b>"}
1915
<i>wo</i>(<i>ti</i>, " ", {
1916
"<var>####################</var>",
1917
"<var># #</var>",
1918
"<var># o @ o #</var>",
1919
"<var># #</var>",
1920
"<var>####################</var>",
1922
]]></<i>el</i>:<b>luamain</b>>
1923
<<i>el</i>:<b>i18n</b>/>
1924
</<i>el</i>:<b>protected</b>>
1925
</<i>el</i>:<b>level</b>>
1926
</pre></td></tr></table>
1928
<p>You may notice that the XML portion contains all the metadata that the level author is
1929
accustomed to supplying with a level. The XML part is like a formula that you can copy from a
1930
template and fill out.
1932
<p>The Lua code is embedded in the XML. The only limitation to the Lua portion is that it reserves
1933
‘<samp>]]></samp>’ for the end mark, and you would have to substitute it with
1934
‘<samp>]] ></samp>’. No further restrictions.
1936
<p>Since the example above includes all mandatory XML parts, we should achieve our aim to avoid
1937
major changes for Lua level authors.
1939
<p>You can find the example above in the ‘<samp>Exp</samp>’ levelpack grouped in
1940
‘<samp>Development</samp>’.
1941
The source code is located on the system path subdirectory
1942
‘<samp>levels/enigma_experimental</samp>’
1943
(see section <a href="#Locating-Resources">Locating Resources</a>).
1945
<p>If you make your first coding experiments on a copy of this level, either add your
1946
copy to the auto folder (see section <a href="#Getting-Started-with-Levelpacks">Getting Started with Levelpacks</a>), or use it as
1947
an argument on the command line (see section <a href="#Startup-Switches">Startup Switches</a>).
1949
<p>Of course we must look at the details of the format and explain the optional
1952
<table class="menu" border="0" cellspacing="0">
1953
<tr><td align="left" valign="top"><a href="#Getting-Started-with-Levels">3.1 Getting Started with Levels</a></td><td> </td><td align="left" valign="top">
1955
<tr><td align="left" valign="top"><a href="#XML-Level-structure">3.2 XML Level structure</a></td><td> </td><td align="left" valign="top">
1957
<tr><td align="left" valign="top"><a href="#Info-metadata">3.3 Info metadata</a></td><td> </td><td align="left" valign="top">
1959
<tr><td align="left" valign="top"><a href="#LUA-code">3.4 LUA code</a></td><td> </td><td align="left" valign="top">
1961
<tr><td align="left" valign="top"><a href="#Internationalization-_0028i18n_0029">3.5 Internationalization (i18n)</a></td><td> </td><td align="left" valign="top">
1963
<tr><td align="left" valign="top"><a href="#Usage">3.6 Usage</a></td><td> </td><td align="left" valign="top">
1965
<tr><td align="left" valign="top"><a href="#Update-and-Upgrade">3.7 Update and Upgrade</a></td><td> </td><td align="left" valign="top">
1967
<tr><td align="left" valign="top"><a href="#Library-Files">3.8 Library Files</a></td><td> </td><td align="left" valign="top">
1969
<tr><td align="left" valign="top"><a href="#Multilevel-Files">3.9 Multilevel Files</a></td><td> </td><td align="left" valign="top">
1974
<a name="Getting-Started-with-Levels"></a>
1975
<table cellpadding="1" cellspacing="1" border="0">
1976
<tr><td valign="middle" align="left">[<a href="#Level-Basics" title="Previous section in reading order"> < </a>]</td>
1977
<td valign="middle" align="left">[<a href="#XML-Level-structure" title="Next section in reading order"> > </a>]</td>
1978
<td valign="middle" align="left"> </td>
1979
<td valign="middle" align="left">[<a href="#Level-Basics" title="Beginning of this chapter or previous chapter"> << </a>]</td>
1980
<td valign="middle" align="left">[<a href="#Level-Basics" title="Up section"> Up </a>]</td>
1981
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Next chapter"> >> </a>]</td>
1982
<td valign="middle" align="left"> </td>
1983
<td valign="middle" align="left"> </td>
1984
<td valign="middle" align="left"> </td>
1985
<td valign="middle" align="left"> </td>
1986
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
1987
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
1988
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
1989
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
1991
<a name="Getting-Started-with-Levels-1"></a>
1992
<h2 class="section">3.1 Getting Started with Levels</h2>
1994
<p>Most likely you are keen on understanding the basic principles of placing
1995
objects in a level. Here is a very simple level description that can also serve
1996
as a starting-point for new landscapes. (In fact, this is the first welcome
1997
level in levelpack Enigma I, so you can try it out right away.)
1999
<table><tr><td> </td><td><pre class="example"> 1 <i>ti</i>["<var> </var>"] = {"<b>fl_gravel</b>"}
2000
2 <i>ti</i>["<var>#</var>"] = {"<b>st_box</b>"}
2001
3 <i>ti</i>["<var>O</var>"] = {"<b>st_oxyd</b>"}
2002
4 if <i>wo</i>["<b>IsDifficult</b>"] then
2003
5 <i>ti</i>["<var>Q</var>"] = {"<b>st_quake</b>", <b>name</b>="<var>quake</var>"}
2004
6 <i>ti</i>["<var>T</var>"] = {"<b>st_timer</b>", <b>interval</b>=<var>10.0</var>, <b>target</b>="<var>quake</var>"}
2006
8 <i>ti</i>["<var>Q</var>"] = <i>ti</i>[" "]
2007
9 <i>ti</i>["<var>T</var>"] = <i>ti</i>[" "]
2009
11 <i>ti</i>["<var>@</var>"] = {"<b>ac_marble_black</b>", <var>0.0</var>, <var>0.5</var>}
2011
12 <i>wo</i>(<i>ti</i>, " ", {
2012
13 "<var>####################</var>",
2013
14 "<var># #</var>",
2014
15 "<var># #</var>",
2015
16 "<var># O O #</var>",
2016
17 "<var># @ #</var>",
2017
18 "<var># #</var>",
2018
19 "<var># QT #</var>",
2019
20 "<var># #</var>",
2020
21 "<var># #</var>",
2021
22 "<var># O O #</var>",
2022
23 "<var># #</var>",
2023
24 "<var># #</var>",
2024
25 "<var>####################</var>"})
2025
</pre></td></tr></table>
2027
<p>The resulting level looks like this inside the game:
2029
<img src="images/first_level.png" alt="images/first_level">
2031
<p>Let’s now turn to a line-by-line analysis of this program:
2033
<table><tr><td> </td><td><pre class="example"> 1 <i>ti</i>["<var> </var>"] = {"<b>fl_gravel</b>"}
2034
2 <i>ti</i>["<var>#</var>"] = {"<b>st_box</b>"}
2035
3 <i>ti</i>["<var>O</var>"] = {"<b>st_oxyd</b>"}
2036
</pre></td></tr></table>
2038
<p>First we declare some keys for objects we like to use in our level map. We
2039
just add each key to our <i>ti</i> tiles repository and assign an object tile
2040
description that consists of the object kind name in these simple cases. The
2041
two character prefix of the kind name shows us the basic object type like floor,
2042
item, stone, actor, etc.
2044
<table><tr><td> </td><td><pre class="example"> 4 if <i>wo</i>["<b>IsDifficult</b>"] then
2045
5 <i>ti</i>["<var>Q</var>"] = {"<b>st_quake</b>", <b>name</b>="<var>quake</var>"}
2046
6 <i>ti</i>["<var>T</var>"] = {"<b>st_timer</b>", <b>interval</b>=<var>10.0</var>, <b>target</b>="<var>quake</var>"}
2048
8 <i>ti</i>["<var>Q</var>"] = <i>ti</i>[" "]
2049
9 <i>ti</i>["<var>T</var>"] = <i>ti</i>[" "]
2051
</pre></td></tr></table>
2053
<p>The welcome level provides two modes, the regular difficult one and an easy one.
2054
As the regular difficult one differs just in two additional stones we add two
2055
mode specific tile declarations.
2057
<p>In the difficult mode we assign two stone definitions. Each provides the
2058
stone kind and additional attributes. The ‘<samp>st_quake</samp>’ is the stone that
2059
closes oxyd stones when being hit or toggled. We just name it, to be able to
2060
reference it later on. The second stone is a timer that should get active
2061
every 10 seconds and should send a toggle message to its target, our oxyd
2062
closing ‘<samp>st_quake</samp>’. As we did name this stone we can reference it here
2063
as target by its name.
2065
<table><tr><td> </td><td><pre class="example">11 <i>ti</i>["<var>@</var>"] = {"<b>ac_marble_black</b>", <var>0.0</var>, <var>0.5</var>}
2066
</pre></td></tr></table>
2068
<p>Now we just need to declare our actor. It is a black marble that should not
2069
be placed at the left upper corner of a grid but in the mid of the left
2070
border of a tile grid. Actually we just want to center it within the level.
2071
As a one screen sized level has the extension of 20 x 13 we need the offsets
2074
<table><tr><td> </td><td><pre class="example">12 <i>wo</i>(<i>ti</i>, " ", {
2075
13 "<var>####################</var>",
2076
14 "<var># #</var>",
2077
15 "<var># #</var>",
2078
16 "<var># O O #</var>",
2079
17 "<var># @ #</var>",
2080
18 "<var># #</var>",
2081
19 "<var># QT #</var>",
2082
20 "<var># #</var>",
2083
21 "<var># #</var>",
2084
22 "<var># O O #</var>",
2085
23 "<var># #</var>",
2086
24 "<var># #</var>",
2087
25 "<var>####################</var>"})
2088
</pre></td></tr></table>
2090
<p>Now we can create the world simply by providing a map. We just need to call
2091
‘<samp>wo</samp>’, our world handle, provide it our tile resolver, the key of the
2092
default floor and a map of tile keys.
2094
<p>You will find all conceptional background information in chapter
2095
<a href="#Enigma-Paradigm">Enigma Paradigm</a> and more examples and syntax information in chapter
2096
<a href="#Lua-API">Lua API</a>. But first you should take the time to get aware of the XML
2097
based level metadata.
2101
<a name="XML-Level-structure"></a>
2102
<table cellpadding="1" cellspacing="1" border="0">
2103
<tr><td valign="middle" align="left">[<a href="#Getting-Started-with-Levels" title="Previous section in reading order"> < </a>]</td>
2104
<td valign="middle" align="left">[<a href="#Info-metadata" title="Next section in reading order"> > </a>]</td>
2105
<td valign="middle" align="left"> </td>
2106
<td valign="middle" align="left">[<a href="#Level-Basics" title="Beginning of this chapter or previous chapter"> << </a>]</td>
2107
<td valign="middle" align="left">[<a href="#Level-Basics" title="Up section"> Up </a>]</td>
2108
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Next chapter"> >> </a>]</td>
2109
<td valign="middle" align="left"> </td>
2110
<td valign="middle" align="left"> </td>
2111
<td valign="middle" align="left"> </td>
2112
<td valign="middle" align="left"> </td>
2113
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
2114
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
2115
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
2116
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
2118
<a name="XML-Level-structure-1"></a>
2119
<h2 class="section">3.2 XML Level structure</h2>
2121
<p>Let us start with a complete overview of all existing top XML element nodes. The
2122
following level skeleton contains optional elements that are beyond level basics.
2123
We include these elements for completeness:
2125
<table><tr><td> </td><td><pre class="example"><?xml version="1.0" encoding="<var>UTF-8</var>" standalone="no" ?>
2126
<<i>el</i>:<b>level</b> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="<i>http://enigma-game.org/schema/level/1 level.xsd http://enigma-game.org/schema/editor editor.xsd</i>" xmlns:<i>el</i>="<i>http://enigma-game.org/schema/level/1</i>" xmlns:<i>ee</i>="<i>http://enigma-game.org/schema/editor</i>">
2127
<<i>el</i>:<b>protected</b>>
2128
<<i>el</i>:<b>info</b> <i>el</i>:<b>type</b>="<var>level</var>">
2129
<!-- required elements omitted -->
2130
</<i>el</i>:<b>info</b>>
2131
<<i>el</i>:<b>elements</b>/>
2132
<<i>el</i>:<b>luamain</b>><![CDATA[
2133
]]></<i>el</i>:<b>luamain</b>>
2134
<<i>ee</i>:<b>editor</b>/>
2135
<<i>el</i>:<b>i18n</b>/>
2136
</<i>el</i>:<b>protected</b>>
2137
<<i>el</i>:<b>public</b>>
2138
<<i>el</i>:<b>i18n</b>/>
2139
<<i>el</i>:<b>upgrade</b>/>
2140
</<i>el</i>:<b>public</b>>
2141
</<i>el</i>:<b>level</b>>
2142
</pre></td></tr></table>
2144
<p>The first line is the XML declaration. It is fixed besides the encoding
2145
specification. Enigma supports on all platforms, at least ‘<samp>US-ASCII</samp>’,
2146
‘<samp>UTF-8</samp>’, ‘<samp>UTF-16</samp>’, ‘<samp>ISO-8859-1</samp>’, ‘<samp>windows-1252</samp>’.
2147
Enter your encoding and make sure that your editor saves the level in this encoding.
2148
On some editors, you can start in ASCII mode, copy the level skeleton with a
2149
different encoding declaration, like UTF-8, save the level still in ASCII mode
2150
and reopen the file. The editor may then detect the XML declaration and switch
2151
automatically to the given encoding. Note that unless you enter
2152
international strings in the level, you do not have to bother with the encoding
2153
at all. You can choose UTF-8 in this case.
2155
<p>Some additional remarks for XML newbies: The XML markup tags are quite similar
2156
to HTML. But XML requires a corresponding
2157
end tag ‘<samp></element></samp>’ for each start tag ‘<samp><element></samp>’. For elements that have
2158
only attributes and no content,
2159
you can and should use the alternative empty element notation ‘<samp><element/></samp>’.
2160
Note that when we define an element as empty or state that no content is allowed,
2161
not a single whitespace, not even a linebreak is allowed between start and end tag. Use the
2162
empty element notation to avoid mistakes.
2164
<p>We use a pretty printing format with an indentation of 2. Each element starts on a separate line.
2165
Elements with text content have the end tag on the same line. Only elements with subelements
2166
have the end tag on a separate line with the same indentation.
2168
<p>This format is not mandatory. You can even insert linebreaks in text contents, within the marks,
2169
and even within attribute values. But note: The basic rule is that each linebreak will be
2170
substituted by a space during the XML parsing. Take this space into account to avoid mistakes,
2171
or simply live with the long lines.
2173
<p>A namespace identifier prefixes all tag names and attribute names. We
2174
use ‘<samp>el</samp>’ as an abbreviation for Enigma levels. All tag names you can
2175
manually edit use this prefix.
2177
<p>Finally, a short comment on the XML reserved characters, ‘<samp>&</samp>’ and ‘<samp><</samp>’.
2178
These two characters are reserved as tag and entity starting characters. If you
2179
need them in text contents or in attribute values, you must substitute
2180
them by the entity sequences ‘<samp>&amp;</samp>’ and ‘<samp>&lt;</samp>’. Additionally, you must enclose
2181
attribute values with either ‘<samp>"</samp>’ or ‘<samp>'</samp>’. Of course, you must substitute the
2182
enclosing character used in attribute values, too. Use ‘<samp>&quot</samp>’
2183
and ‘<samp>&apos</samp>’.
2187
<dl compact="compact">
2188
<dt> <b>/level</b>, <i>required, single occurrence</i></dt>
2189
<dd><p>This is the root node. Only one instance of this node occurs per file. Like the first XML
2190
declaration line, this second line is quite fixed. There are two versions. The simple 3-attribute
2191
version, as used in the first example, and only level editor programs use the 4-attribute version
2192
as above. For manual level
2193
editing, just copy the simple version as the second line to your level file.
2195
<p><b>Attributes:</b>
2197
<dl compact="compact">
2198
<dt> <b>xmlns:xsi</b>, <i>required, contents fixed</i></dt>
2199
<dd><p>Namespace definition for the schema. The contents are fixed to
2200
“http://www.w3.org/2001/XMLSchema-instance”. The attribute tag ‘<samp>xsi</samp>’ must
2201
match the prefix of the next attribute tag, and is standard.
2204
<dt> <b>xsi:schemaLocation</b>, <i>required, contents fixed</i></dt>
2205
<dd><p>Location of the schemas used. The contents are the fixed Enigma level
2206
namespace, followed by the schema location URL. Level editor programs will add
2207
their namespace and their schema location URL, as in the second example above.
2210
<dt> <b>xmlns:el</b>, <i>required, contents fixed</i></dt>
2211
<dd><p>Namespace definition for “Enigma level”. We use ‘<samp>el</samp>’ as the namespace prefix
2212
for all level element and attribute tags, as standard. The prefix used can be
2213
arbitrary, but must match this attributes tag. The contents of the attribute is
2214
fixed to the Enigma level namespace.
2217
<dt> <b>xmlns:ee</b>, <i>optional</i></dt>
2218
<dd><p>Only level editor programs use this last namespace definition. For
2219
example, we declared ‘<samp>ee</samp>’ as the namespace prefix for all editor element and
2220
attribute tags. The prefix you use can be arbitrary, but must match this attributes
2221
tag. The contents of the attribute are the editor’s namespace.
2227
<dt> <b>/level/protected</b>, <i>required, single occurrence</i></dt>
2229
<p>The protected node section contains all level data that derive from the author and
2230
should not be modified by anyone else.
2233
<dt> <b>/level/protected/info</b>, <i>required, single occurrence</i></dt>
2235
<p>The info node section contains all level metadata. It is mandatory and described in
2236
detail at section <a href="#Info-metadata">Info metadata</a>.
2239
<dt> <b>/level/protected/elements</b>, <i>optional, single occurrence</i></dt>
2241
<p>The elements node section is optional. It contains level description parts that
2242
are given in a data-driven manner. Though the driving force is the support
2243
for level editor programs, a level author may use any parts of this section he or she
2247
<dt> <b>/level/protected/luamain</b>, <i>optional, single occurrence</i></dt>
2249
<p>The luamain node section is the part to insert manually Lua level descriptions.
2250
It is described in detail at section <a href="#LUA-code">LUA code</a>.
2253
<dt> <b>/level/protected/editor</b>, <i>optional, single occurrence</i></dt>
2255
<p>The editor node section is an open extension area for level editor programs.
2256
They can add any additional information in this section that they need.
2257
Enigma simply ignores this node section.
2260
<dt> <b>/level/protected/i18n</b>, <i>required, single occurrence</i></dt>
2262
<p>The i18n node section contains English strings, native translations and comments
2263
supplied by the author for the translators. This node section is mandatory
2264
and described in detail at section <a href="#Internationalization-_0028i18n_0029">Internationalization (i18n)</a>.
2267
<dt> <b>/level/public</b>, <i>optional, single occurrence</i></dt>
2269
<p>This public node section is an optional extension to the protected part. It
2270
contains information that the author has not validated and may even be added
2271
after the last author’s review.
2274
<dt> <b>/level/public/i18n</b>, <i>optional, single occurrence</i></dt>
2276
<p>This public i18n section contains further translations supplied for the level. They
2277
may derive from the author or other sources. The translators will
2278
validate these translations, and they continue in use if the translators do not
2279
supply corrected versions. See <a href="#Internationalization-_0028i18n_0029">Internationalization (i18n)</a>.
2282
<dt> <b>/level/public/upgrade</b>, <i>optional, single occurrence</i></dt>
2284
<p>This upgrade node is part of the <a href="#Update-and-Upgrade">Update and Upgrade</a> system.
2290
<a name="Info-metadata"></a>
2291
<table cellpadding="1" cellspacing="1" border="0">
2292
<tr><td valign="middle" align="left">[<a href="#XML-Level-structure" title="Previous section in reading order"> < </a>]</td>
2293
<td valign="middle" align="left">[<a href="#g_t_003cidentity_003e" title="Next section in reading order"> > </a>]</td>
2294
<td valign="middle" align="left"> </td>
2295
<td valign="middle" align="left">[<a href="#Level-Basics" title="Beginning of this chapter or previous chapter"> << </a>]</td>
2296
<td valign="middle" align="left">[<a href="#Level-Basics" title="Up section"> Up </a>]</td>
2297
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Next chapter"> >> </a>]</td>
2298
<td valign="middle" align="left"> </td>
2299
<td valign="middle" align="left"> </td>
2300
<td valign="middle" align="left"> </td>
2301
<td valign="middle" align="left"> </td>
2302
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
2303
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
2304
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
2305
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
2307
<a name="Info-metadata-1"></a>
2308
<h2 class="section">3.3 Info metadata</h2>
2310
<p>The Info node contains all author-supplied metadata for the level. This is the
2311
source of these data. All other parts of Enigma, such as level indices, simply contain
2312
copies that will be automatically updated to the level’s original data.
2314
<p>Let us look at all supported subnodes of info with typically used attributes:
2316
<table><tr><td> </td><td><pre class="example"><<i>el</i>:<b>info</b> <i>el</i>:<b>type</b>="<var>level</var>">
2317
<<i>el</i>:<b>identity</b> <i>el</i>:<b>title</b>="<var>Demo I18N</var>" <i>el</i>:<b>subtitle</b>="<var>Translate or let it be translated</var>" <i>el</i>:<b>id</b>="<var>20060211ral002</var>"/>
2318
<<i>el</i>:<b>version</b> <i>el</i>:<b>score</b>="<var>1</var>" <i>el</i>:<b>release</b>="<var>1</var>" <i>el</i>:<b>revision</b>="<var>0</var>" <i>el</i>:<b>status</b>="<var>experimental</var>"/>
2319
<<i>el</i>:<b>author</b> <i>el</i>:<b>name</b>="<var>Ronald Lamprecht</var>" <i>el</i>:<b>email</b>="<var>ral@users.berlios.de</var>"/>
2320
<<i>el</i>:<b>copyright</b>><var>Copyright © 2006 Ronald Lamprecht</var></<i>el</i>:<b>copyright</b>>
2321
<<i>el</i>:<b>license</b> <i>el</i>:<b>type</b>="<var>GPL v2.0 or above</var>" <i>el</i>:<b>open</b>="<var>true</var>"/>
2322
<<i>el</i>:<b>compatibility</b> <i>el</i>:<b>enigma</b>="<var>0.92</var>"/>
2323
<<i>el</i>:<b>modes</b> <i>el</i>:<b>easy</b>="<var>false</var>" <i>el</i>:<b>single</b>="<var>true</var>" <i>el</i>:<b>network</b>="<var>false</var>"/>
2324
<<i>el</i>:<b>comments</b>/>
2325
<<i>el</i>:<b>update</b> <i>el</i>:<b>url</b>="<var>http://…</var>"/>
2326
<<i>el</i>:<b>upgrade</b> <i>el</i>:<b>url</b>="<var>http://…</var>" <i>el</i>:<b>release</b>="<var>2</var>"/>
2327
<<i>el</i>:<b>score</b> <i>el</i>:<b>easy</b>="<var>-</var>" <i>el</i>:<b>difficult</b>="<var>-</var>"/>
2328
</<i>el</i>:<b>info</b>>
2329
</pre></td></tr></table>
2331
<p><b>Attributes:</b>
2333
<dl compact="compact">
2334
<dt> <b>type</b>, <i>required</i>, values = <code>"level"</code>, <code>"library"</code>, <code>"multilevel"</code></dt>
2335
<dd><p>You may use the schema for single Enigma levels, libraries that contain level
2336
description parts for reuse, and descriptions for multiple levels at once.
2338
<p>‘<samp>level</samp>’ are all single level descriptions. It does not matter if you
2339
edit them manually or with a level editor program, or which description elements you
2342
<p>‘<samp>library</samp>’ are level description parts that may be included in levels.
2343
<a href="#Library-Files">Library Files</a> consist simply of Lua code in the luamain node. Libraries
2344
may make use of nearly all nodes besides the ‘<samp>/level/protected/info/score</samp>’
2345
and ‘<samp>/level/*/i18n</samp>’, which both must be provided, but will not be evaluated.
2346
Libraries are included in levels via the dependency node-element. See
2347
<a href="#g_t_003ccompatibility_003e"><compatibility></a>.
2349
<p>‘<samp>multilevel</samp>’ are descriptions for multiple levels at once. The main purpose
2350
is to support foreign game level formats, like the Sokoban level format, which
2351
usually describes a whole set of level maps in a single file (see section <a href="#Multilevel-Files">Multilevel Files</a>).
2354
<dt> <b>quantity</b>, <i>optional</i></dt>
2355
<dd><p>The number of levels contained in a multilevel file (see section <a href="#Multilevel-Files">Multilevel Files</a>).
2360
<p><b>Contents - Elements:</b>
2362
<dl compact="compact">
2363
<dt> <b>identity</b>, <i>required</i></dt>
2364
<dd><p>The title, subtitle and the main level identification string. See <a href="#g_t_003cidentity_003e"><identity></a>.
2367
<dt> <b>version</b>, <i>required</i></dt>
2368
<dd><p>All aspects of the level <a href="#g_t_003cversion_003e"><version></a>.
2371
<dt> <b>author</b>, <i>required</i></dt>
2372
<dd><p>All information provided about the author him- or herself. See <a href="#g_t_003cauthor_003e"><author></a>.
2375
<dt> <b>copyright</b>, <i>required</i></dt>
2376
<dd><p>The <a href="#g_t_003ccopyright_003e"><copyright></a> message for the level.
2379
<dt> <b>license</b>, <i>required</i></dt>
2380
<dd><p>Information about the <a href="#g_t_003clicense_003e"><license></a> conditions.
2383
<dt> <b>compatibility</b>, <i>required</i></dt>
2384
<dd><p>All information about <a href="#g_t_003ccompatibility_003e"><compatibility></a> to Enigma releases, dependencies
2385
from libraries, external data and the editor program that generated the level.
2388
<dt> <b>modes</b>, <i>required</i></dt>
2389
<dd><p>The <a href="#g_t_003cmodes_003e"><modes></a> that the level supports, such as difficulty, network and control.
2392
<dt> <b>comments</b>, <i>optional</i></dt>
2393
<dd><p>Optional comments, such as credits, dedication and code comments. See <a href="#g_t_003ccomments_003e"><comments></a>.
2396
<dt> <b>update</b>, <i>optional</i></dt>
2397
<dd><p><a href="#Update-and-Upgrade">Update and Upgrade</a>
2400
<dt> <b>upgrade</b>, <i>optional</i></dt>
2401
<dd><p><a href="#Update-and-Upgrade">Update and Upgrade</a>
2404
<dt> <b>score</b>, <i>required</i></dt>
2405
<dd><p>The author’s own <a href="#g_t_003cscore_003e"><score></a> of this level.
2410
<table class="menu" border="0" cellspacing="0">
2411
<tr><td align="left" valign="top"><a href="#g_t_003cidentity_003e">3.3.1 <identity></a></td><td> </td><td align="left" valign="top">
2413
<tr><td align="left" valign="top"><a href="#g_t_003cversion_003e">3.3.2 <version></a></td><td> </td><td align="left" valign="top">
2415
<tr><td align="left" valign="top"><a href="#g_t_003cauthor_003e">3.3.3 <author></a></td><td> </td><td align="left" valign="top">
2417
<tr><td align="left" valign="top"><a href="#g_t_003ccopyright_003e">3.3.4 <copyright></a></td><td> </td><td align="left" valign="top">
2419
<tr><td align="left" valign="top"><a href="#g_t_003clicense_003e">3.3.5 <license></a></td><td> </td><td align="left" valign="top">
2421
<tr><td align="left" valign="top"><a href="#g_t_003ccompatibility_003e">3.3.6 <compatibility></a></td><td> </td><td align="left" valign="top">
2423
<tr><td align="left" valign="top"><a href="#g_t_003cmodes_003e">3.3.7 <modes></a></td><td> </td><td align="left" valign="top">
2425
<tr><td align="left" valign="top"><a href="#g_t_003ccomments_003e">3.3.8 <comments></a></td><td> </td><td align="left" valign="top">
2427
<tr><td align="left" valign="top"><a href="#g_t_003cscore_003e">3.3.9 <score></a></td><td> </td><td align="left" valign="top">
2433
<a name="g_t_003cidentity_003e"></a>
2434
<table cellpadding="1" cellspacing="1" border="0">
2435
<tr><td valign="middle" align="left">[<a href="#Info-metadata" title="Previous section in reading order"> < </a>]</td>
2436
<td valign="middle" align="left">[<a href="#g_t_003cversion_003e" title="Next section in reading order"> > </a>]</td>
2437
<td valign="middle" align="left"> </td>
2438
<td valign="middle" align="left">[<a href="#Level-Basics" title="Beginning of this chapter or previous chapter"> << </a>]</td>
2439
<td valign="middle" align="left">[<a href="#Info-metadata" title="Up section"> Up </a>]</td>
2440
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Next chapter"> >> </a>]</td>
2441
<td valign="middle" align="left"> </td>
2442
<td valign="middle" align="left"> </td>
2443
<td valign="middle" align="left"> </td>
2444
<td valign="middle" align="left"> </td>
2445
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
2446
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
2447
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
2448
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
2450
<a name="g_t_003cidentity_003e-1"></a>
2451
<h3 class="subsection">3.3.1 <identity></h3>
2453
<p>The ‘<samp><b>identity</b></samp>’ element is required, since it provides the information for human
2454
and system identification of the level.
2456
<table><tr><td> </td><td><pre class="example"><<i>el</i>:<b>identity</b> <i>el</i>:<b>title</b>="<var>Demo I18N</var>" <i>el</i>:<b>subtitle</b>="<var>Translate or let it be translated</var>" <i>el</i>:<b>id</b>="<var>20060211ral002</var>"/>
2457
</pre></td></tr></table>
2459
<p><b>Attributes:</b>
2461
<dl compact="compact">
2462
<dt> <b>title</b>, <i>required</i></dt>
2463
<dd><p>The English title of the level. The string can contain arbitrary characters
2464
that are displayable by Enigma’s font and XML conformant. Just in case of
2465
<a href="#Multilevel-Files">Multilevel Files</a> a trailing hash sign has a special meaning. Anyway please
2466
make sure that the title is not too long, since Enigma will use it on the level
2467
selection menu. Translations of the title can be provided in the
2468
<a href="#Internationalization-_0028i18n_0029">Internationalization (i18n)</a> sections.
2471
<dt> <b>subtitle</b>, <i>optional</i></dt>
2472
<dd><p>An optional English subtitle. Used for title parts that are too long for the
2473
main title, or for a short first hint. Enigma displays the subtitle on the level info
2474
page and on the start of the level. Translations of the subtitle can be provided
2475
in the <a href="#Internationalization-_0028i18n_0029">Internationalization (i18n)</a> sections.
2478
<dt> <b>id</b>, <i>required</i></dt>
2479
<dd><p>This is the central system identification string of the level that remains valid
2480
for all time, independent of upcoming release updates. The id string should not
2481
contain spaces, braces and wildcard characters, that means no character out
2482
of ‘<samp>*? ()[]{}</samp>’. Enigma’s main demand on the id is that it is unique among
2483
all levels created by all authors around the world and that it does not end on a
2484
closing square bracket.
2486
<p>Since you can edit levels with any text editor or different special Enigma level
2487
editors, there is no control about the uniqueness. Thus, we have to provide a
2488
simple convention to avoid any possible id clashes:
2490
<p><var><b>YYYYMMDDuserNNN</b></var>
2492
<p>Where ‘<samp>YYYY</samp>’,‘<samp>MM</samp>’,‘<samp>DD</samp>’ is the date of the creation of the first
2493
experimental version, ‘<samp>user</samp>’ stands for a user-specific name and ‘<samp>NNN</samp>’
2494
for a random number. For example, my level called ‘<samp>Houdini</samp>’ has the id
2495
‘<samp>20060816ral719</samp>’. Of course all levels created on the same day have to
2496
differ in the random number part. The id is an Enigma level system id, and is
2497
never exposed to users.
2499
<p>For backward compatibility, legacy levels keep their former filename as the
2500
new level id, and do not fit in the name schema given above. Still, that does
2501
not harm since the only requirement is the uniqueness.
2508
<p>The element itself is empty - no content is allowed.
2511
<a name="g_t_003cversion_003e"></a>
2512
<table cellpadding="1" cellspacing="1" border="0">
2513
<tr><td valign="middle" align="left">[<a href="#g_t_003cidentity_003e" title="Previous section in reading order"> < </a>]</td>
2514
<td valign="middle" align="left">[<a href="#g_t_003cauthor_003e" title="Next section in reading order"> > </a>]</td>
2515
<td valign="middle" align="left"> </td>
2516
<td valign="middle" align="left">[<a href="#Level-Basics" title="Beginning of this chapter or previous chapter"> << </a>]</td>
2517
<td valign="middle" align="left">[<a href="#Info-metadata" title="Up section"> Up </a>]</td>
2518
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Next chapter"> >> </a>]</td>
2519
<td valign="middle" align="left"> </td>
2520
<td valign="middle" align="left"> </td>
2521
<td valign="middle" align="left"> </td>
2522
<td valign="middle" align="left"> </td>
2523
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
2524
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
2525
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
2526
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
2528
<a name="g_t_003cversion_003e-1"></a>
2529
<h3 class="subsection">3.3.2 <version></h3>
2531
<p>This element provides the versioning information for the system.
2533
<table><tr><td> </td><td><pre class="example"><<i>el</i>:<b>version</b> <i>el</i>:<b>score</b>="<var>1</var>" <i>el</i>:<b>release</b>="<var>1</var>" <i>el</i>:<b>revision</b>="<var>0</var>" <i>el</i>:<b>status</b>="<var>experimental</var>"/>
2534
</pre></td></tr></table>
2536
<p><b>Attributes:</b>
2538
<dl compact="compact">
2539
<dt> <b>score</b>, <i>required</i></dt>
2540
<dd><p>The score version is given as a positive integer number. New levels start with
2541
score version “1”. New level versions need to increase the
2542
score version number if the level modifications cause different solutions with
2543
incomparable score values. Of course, level authors should be very restrictive
2544
with such modifications.
2546
<p>During the development of a level, you should use the attribute ‘<samp><b>status</b></samp>’ to mark a
2547
level as not released. When the author changes the ‘<samp><b>status</b></samp>’ to
2548
‘<samp>released</samp>’, he has to check scoring compatibility and increase the score
2549
version if necessary.
2551
<p>This attribute is the logical equivalence to the Enigma 0.92 ‘<samp>index.txt</samp>’ attribute
2552
‘<samp>revision</samp>’.
2555
<dt> <b>release</b>, <i>required</i></dt>
2556
<dd><p>The technical release version is given as a positive integer number. New levels
2557
start with release version “1”. You must increase the release version number if
2558
the level modifications cause either technical incompatibilities with previous Enigma releases,
2559
or the scoring version has been increased.
2561
<p>The primary cause for technical incompatibilities should be the compensation
2562
of Enigma engine changes. Since such compensations will not run on the old Enigma
2563
version, the level versions must be distinguished by a different release number.
2565
<p>In both cases, technical and scoring incompatibilities, the level file name must
2566
be changed, too. This is necessary since different Enigma versions may be installed on some
2567
systems at the same time. They have the need for both level versions at the same time. Internet
2568
servers providing Enigma levels need to offer the different level release at the same time, too.
2570
<p>To enable people to assign different level release files to a level itself, we
2571
strongly recommend the name convention for levels
2572
<var>AuthoridentifierLevelnumber_Releasenumber.Suffix</var>, where the levelnumber is at
2573
least 2 digits; for example, ‘<samp>ral01_2.xml</samp>’
2576
<dt> <b>revision</b>, <i>required</i></dt>
2577
<dd><p>The revision number is a simple, ever-increasing version number. Every published
2578
version of the level should have a new revision number. The revision number is
2579
independent from the scoring and release version number.
2581
<p>If Enigma finds two levelfiles in its data search paths with identical filenames,
2582
id, score and release version, it will load the one with the higher revision number.
2583
This feature guarantees that an older level revision stored on the user’s
2584
home level directory cannot supersede a new revision of a level distributed with a new
2585
Enigma release. Online updates will check the level revision numbers, too.
2587
<p>Although the revision evaluates to a number, the attribute can take a second
2588
string format as the literal keyword ‘<samp>$Revision$</samp>’. This
2589
<a href="http://subversion.tigris.org/">Subversion</a> format allows level authors to
2590
let their Subversion repository automatically insert the level revision number. They must simply
2591
set ‘<samp>svn propset svn:keywords "Revision" level.xml</samp>’
2592
at their repository for every level file. Since the Subversion revision number is
2593
ever-increasing, it fulfills our criteria. Note that Enigma does not require that revision
2594
numbers be consecutive.
2597
<dt> <b>status</b>, <i>required</i>, values = “released”, “stable”, “test”, “experimental”</dt>
2598
<dd><p>This attribute describes the quality of the level during development. Enigma
2599
uses the status to protect the score database from being spoiled by unplanned solution
2600
scores. It will record scores only for levels marked as ‘<samp>released</samp>’.
2602
<p>As a level author, if you start to change a released level, you should first change the
2603
status back to ‘<samp>experimental</samp>’. Then make your changes and test
2604
the level. When you are definitively sure that you did not introduce any spoilers,
2605
you can release the level again with a new revision and perhaps a new release or
2606
score version number.
2613
<p>The element itself is empty - no content is allowed.
2616
<a name="g_t_003cauthor_003e"></a>
2617
<table cellpadding="1" cellspacing="1" border="0">
2618
<tr><td valign="middle" align="left">[<a href="#g_t_003cversion_003e" title="Previous section in reading order"> < </a>]</td>
2619
<td valign="middle" align="left">[<a href="#g_t_003ccopyright_003e" title="Next section in reading order"> > </a>]</td>
2620
<td valign="middle" align="left"> </td>
2621
<td valign="middle" align="left">[<a href="#Level-Basics" title="Beginning of this chapter or previous chapter"> << </a>]</td>
2622
<td valign="middle" align="left">[<a href="#Info-metadata" title="Up section"> Up </a>]</td>
2623
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Next chapter"> >> </a>]</td>
2624
<td valign="middle" align="left"> </td>
2625
<td valign="middle" align="left"> </td>
2626
<td valign="middle" align="left"> </td>
2627
<td valign="middle" align="left"> </td>
2628
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
2629
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
2630
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
2631
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
2633
<a name="g_t_003cauthor_003e-1"></a>
2634
<h3 class="subsection">3.3.3 <author></h3>
2636
<p>The information about the author him/herself. Enigma requires the author element itself, but
2637
all attributes are optional to allow an author to be anonymous. Please remember that level
2638
administrators and translators may need to contact you as the author. So please provide a way
2639
for them to contact you.
2641
<p>The author element node may look like:
2643
<table><tr><td> </td><td><pre class="example"><<i>el</i>:<b>author</b> <i>el</i>:<b>name</b>="<var>Ronald Lamprecht</var>" <i>el</i>:<b>email</b>="<var>ral@users.berlios.de</var>" <i>el</i>:<b>homepage</b>="<var>http://myhomepage.domain</var>"/>
2644
</pre></td></tr></table>
2646
<p><b>Attributes:</b>
2648
<dl compact="compact">
2649
<dt> <b>name</b>, <i>optional</i>, default = “anonymous”</dt>
2650
<dd><p>The author’s name as it will be displayed on the level info page and on the start
2651
of the level. The name defaults to ‘<samp>anonymous</samp>’.
2654
<dt> <b>email</b>, <i>optional</i></dt>
2655
<dd><p>The author’s email address or a newsgroup or forum he monitors. In general, this is a
2656
hint as to how to communicate with him or her. The value will simply be displayed as a string on
2657
the level info page.
2660
<dt> <b>homepage</b>, <i>optional</i></dt>
2661
<dd><p>An address for the author or where the author publishes additional Enigma levels.
2662
The value will simply be displayed as a string on the level info page.
2669
<p>The element itself is empty; no content is allowed.
2672
<a name="g_t_003ccopyright_003e"></a>
2673
<table cellpadding="1" cellspacing="1" border="0">
2674
<tr><td valign="middle" align="left">[<a href="#g_t_003cauthor_003e" title="Previous section in reading order"> < </a>]</td>
2675
<td valign="middle" align="left">[<a href="#g_t_003clicense_003e" title="Next section in reading order"> > </a>]</td>
2676
<td valign="middle" align="left"> </td>
2677
<td valign="middle" align="left">[<a href="#Level-Basics" title="Beginning of this chapter or previous chapter"> << </a>]</td>
2678
<td valign="middle" align="left">[<a href="#Info-metadata" title="Up section"> Up </a>]</td>
2679
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Next chapter"> >> </a>]</td>
2680
<td valign="middle" align="left"> </td>
2681
<td valign="middle" align="left"> </td>
2682
<td valign="middle" align="left"> </td>
2683
<td valign="middle" align="left"> </td>
2684
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
2685
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
2686
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
2687
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
2689
<a name="g_t_003ccopyright_003e-1"></a>
2690
<h3 class="subsection">3.3.4 <copyright></h3>
2692
<p>The standardized location for the author’s copyright message:
2693
</p><table><tr><td> </td><td><pre class="example"><<i>el</i>:<b>copyright</b>><var>Copyright © 2006 Ronald Lamprecht</var></<i>el</i>:<b>copyright</b>>
2694
</pre></td></tr></table>
2696
<p><b>Attributes:</b>
2702
<p>The author’s copyright notice.
2705
<a name="g_t_003clicense_003e"></a>
2706
<table cellpadding="1" cellspacing="1" border="0">
2707
<tr><td valign="middle" align="left">[<a href="#g_t_003ccopyright_003e" title="Previous section in reading order"> < </a>]</td>
2708
<td valign="middle" align="left">[<a href="#g_t_003ccompatibility_003e" title="Next section in reading order"> > </a>]</td>
2709
<td valign="middle" align="left"> </td>
2710
<td valign="middle" align="left">[<a href="#Level-Basics" title="Beginning of this chapter or previous chapter"> << </a>]</td>
2711
<td valign="middle" align="left">[<a href="#Info-metadata" title="Up section"> Up </a>]</td>
2712
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Next chapter"> >> </a>]</td>
2713
<td valign="middle" align="left"> </td>
2714
<td valign="middle" align="left"> </td>
2715
<td valign="middle" align="left"> </td>
2716
<td valign="middle" align="left"> </td>
2717
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
2718
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
2719
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
2720
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
2722
<a name="g_t_003clicense_003e-1"></a>
2723
<h3 class="subsection">3.3.5 <license></h3>
2725
<p>Of course, every author is free to choose the license conditions for his/her levels.
2726
However, the author must state the conditions. Thus, this node element and its
2727
attributes are required:
2729
<table><tr><td> </td><td><pre class="example"><<i>el</i>:<b>license</b> <i>el</i>:<b>type</b>="<var>GPL v2.0 or above</var>" <i>el</i>:<b>open</b>="<var>true</var>"/>
2730
</pre></td></tr></table>
2732
<p><b>Attributes:</b>
2734
<dl compact="compact">
2735
<dt> <b>type</b>, <i>required</i></dt>
2736
<dd><p>A short license identifier of the license type, with an optional link address to
2737
the license text or the string ‘<samp>special</samp>’, if the author supplies his/her own
2738
license as the content of this element.
2741
<dt> <b>open</b>, <i>required</i></dt>
2742
<dd><p>A boolean statement, whether the chosen license fulfills the criteria of the
2743
<a href="http://www.opensource.org/">Open Source Initiative (OSI)</a>. Please note
2744
that a value of ‘<samp>false</samp>’ may prevent your level from being distributed
2752
<p>You may add a complete license text as the contents of this element. Please
2753
use the type attribute to identify the level.
2756
<a name="g_t_003ccompatibility_003e"></a>
2757
<table cellpadding="1" cellspacing="1" border="0">
2758
<tr><td valign="middle" align="left">[<a href="#g_t_003clicense_003e" title="Previous section in reading order"> < </a>]</td>
2759
<td valign="middle" align="left">[<a href="#g_t_003cmodes_003e" title="Next section in reading order"> > </a>]</td>
2760
<td valign="middle" align="left"> </td>
2761
<td valign="middle" align="left">[<a href="#Level-Basics" title="Beginning of this chapter or previous chapter"> << </a>]</td>
2762
<td valign="middle" align="left">[<a href="#Info-metadata" title="Up section"> Up </a>]</td>
2763
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Next chapter"> >> </a>]</td>
2764
<td valign="middle" align="left"> </td>
2765
<td valign="middle" align="left"> </td>
2766
<td valign="middle" align="left"> </td>
2767
<td valign="middle" align="left"> </td>
2768
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
2769
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
2770
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
2771
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
2773
<a name="g_t_003ccompatibility_003e-1"></a>
2774
<h3 class="subsection">3.3.6 <compatibility></h3>
2776
<table><tr><td> </td><td><pre class="example"><<i>el</i>:<b>compatibility</b> <i>el</i>:<b>enigma</b>="<var>0.92</var>" <i>el</i>:<b>engine</b>="<var>enigma</var>">
2777
<<i>el</i>:<b>dependency</b> <i>el</i>:<b>path</b>="<var>lib/natmaze</var>" <i>el</i>:<b>id</b>="<var>lib/natmaze</var>" <i>el</i>:<b>release</b>="<var>1</var>" <i>el</i>:<b>preload</b>="<var>true</var>" <i>el</i>:<b>url</b>="<var>http://anywhere.xxx/mypage/natmaze.xml</var>"/>
2778
<<i>el</i>:<b>externaldata</b> <i>el</i>:<b>path</b>="<var>./extfile</var>" <i>el</i>:<b>url</b>="<var>http://anywhere.xxx/mypage/extdata.xml</var>"/>
2779
<<i>el</i>:<b>editor</b> <i>el</i>:<b>name</b>="<var>none</var>" <i>el</i>:<b>version</b>="<var></var>"/>
2780
</<i>el</i>:<b>compatibility</b>>
2781
</pre></td></tr></table>
2783
<p><b>Attributes:</b>
2785
<dl compact="compact">
2786
<dt> <b>enigma</b>, <i>required</i></dt>
2787
<dd><p>The minimal Enigma release number required for compatibility.
2790
<dt> <b>engine</b>, <i>optional</i>, values = “enigma”, “oxyd1”, “per.oxyd”, “oxyd.extra”, “oxyd.magnum”; default = “enigma”</dt>
2791
<dd><p>The required engine compatibility mode that influences the behavior of various
2792
objects. This attribute is evaluated only for levels. Libraries ignore this
2797
<p><b>Contents - Elements:</b>
2799
<p>The compatibility element itself contains only subelements as content.
2801
<dl compact="compact">
2802
<dt> <b>dependency</b>, <i>optional, multiple occurrence</i></dt>
2803
<dd><p>You can use this element to specify any Enigma-Lua library this level depends on. You can
2804
specify several libraries by multiple occurrence of this element. If you configure a library to be
2805
preloaded, the engine will load it before it loads or executes any level Lua code. The load
2806
sequence of several libraries conforms strictly to the sequence of their dependencies elements.
2808
<p><b>Attributes:</b>
2809
</p><dl compact="compact">
2810
<dt> <b>path</b>, <i>required</i></dt>
2811
<dd><p>The resource path of the library without its suffix or any release extension.
2812
Enigma stores most libraries in the ‘<samp>lib</samp>’ subdirectory of its
2813
‘<samp>levels</samp>’ directory, in most cases the resource path will be like the one in
2814
the example above: ‘<samp>lib/ant</samp>’. This is the valid path for the library file
2815
that may be either ‘<samp>levels/lib/ant.xml</samp>’ or ‘<samp>levels/lib/ant.lua</samp>’ or
2816
‘<samp>levels/lib/ant_1.xml</samp>’.
2818
<p>However, libraries can also be totally level pack-specific. In this case, you may use
2819
a relative resource path, such as ‘<samp>./mylib</samp>’ and store the library in the level
2820
pack directory itself.
2823
<dt> <b>id</b>, <i>required</i></dt>
2824
<dd><p>The version independent id of the library, as specified in the library metadata.
2825
Enigma will check it on load of the library to avoid problems, and may use
2826
it with the release number to detect relocated libraries.
2829
<dt> <b>release</b>, <i>required</i></dt>
2830
<dd><p>Although different release versions of libraries must have different filenames, we require to
2831
specify the library version. Enigma will check it on load of the library to avoid problems, and
2832
may use it with the release number to detect relocated libraries.
2835
<dt> <b>preload</b>, <i>required</i></dt>
2836
<dd><p>A boolean statement that specifies whether the library should be preloaded. If
2837
the library is not preloaded, you can still load it via Lua code statements. Yet
2838
even those libraries must be declared since Enigma will checked them on conformance.
2839
You should always preload your libraries if you make use of the ‘<samp>elements</samp>’
2843
<dt> <b>url</b>, <i>optional</i></dt>
2844
<dd><p>This optional attribute allows you to specify a backup address for the library.
2845
This will be useful for using new libraries that are not yet distributed
2848
<p>For the development and test phase of new libraries themselves, a developer can hand out test
2849
levels with an empty ‘<samp>library</samp>’ resource path
2850
attribute. The test levels will load the newest library version as published
2861
<dt> <b>externaldata</b>, <i>optional, multiple occurrence</i></dt>
2862
<dd><p>You can use this element to specify any external text data file this level
2863
depends on. You can specify several files by multiple occurrences of this
2864
element. Files declared can be read via the Lua interface.
2866
<p>This feature should support levels that simulate foreign games like Sokoban
2867
within Enigma. Due to copyrights and license conditions, the inclusion of such
2868
data within a level or even the distribution with Enigma may not be possible.
2869
However, distributing or downloading the data in the original unmodified format
2872
<p><b>Attributes:</b>
2873
</p><dl compact="compact">
2874
<dt> <b>path</b>, <i>required</i></dt>
2875
<dd><p>The resource path of the external data file without its suffix ‘<samp>.txt</samp>’. The
2876
path has to be either of the format <code>"./name"</code> for an external data file
2877
that is locally stored in the same folder as the level file, or will be saved
2878
at this position when it gets downloaded. Or the path can be of the format
2879
<code>"externaldata/name"</code> for shared external data files, that are referenced
2880
by multiple level files stored at different folders. The external data file will
2881
be locally stored or gets saved in the folder <code>"levels/externaldata"</code>. In any
2882
case the local name of the external data file will have the suffix ‘<samp>.txt</samp>’
2883
to mark it readable but not executable for the local operating system.
2886
<dt> <b>url</b>, <i>optional</i></dt>
2887
<dd><p>This optional attribute allows you to specify an internet download address for
2888
the external data file. On first access a missing external data file will be
2889
downloaded and a copy will be stored locally for further access.
2898
<dt> <b>editor</b>, <i>optional, single occurrence</i></dt>
2899
<dd><p>Special level editor programs use this element to store information about themselves.
2901
<p><b>Attributes:</b>
2903
<dl compact="compact">
2904
<dt> <b>name</b>, <i>required</i></dt>
2905
<dd><p>The name of the level editor.
2908
<dt> <b>version</b>, <i>required</i></dt>
2909
<dd><p>A version number of the editor, given as a string.
2926
<a name="g_t_003cmodes_003e"></a>
2927
<table cellpadding="1" cellspacing="1" border="0">
2928
<tr><td valign="middle" align="left">[<a href="#g_t_003ccompatibility_003e" title="Previous section in reading order"> < </a>]</td>
2929
<td valign="middle" align="left">[<a href="#g_t_003ccomments_003e" title="Next section in reading order"> > </a>]</td>
2930
<td valign="middle" align="left"> </td>
2931
<td valign="middle" align="left">[<a href="#Level-Basics" title="Beginning of this chapter or previous chapter"> << </a>]</td>
2932
<td valign="middle" align="left">[<a href="#Info-metadata" title="Up section"> Up </a>]</td>
2933
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Next chapter"> >> </a>]</td>
2934
<td valign="middle" align="left"> </td>
2935
<td valign="middle" align="left"> </td>
2936
<td valign="middle" align="left"> </td>
2937
<td valign="middle" align="left"> </td>
2938
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
2939
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
2940
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
2941
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
2943
<a name="g_t_003cmodes_003e-1"></a>
2944
<h3 class="subsection">3.3.7 <modes></h3>
2946
<p>The modes element allows the author to declare the supported and the default
2947
modes of his level. Enigma’s engine checks that the level is used in supported
2950
<table><tr><td> </td><td><pre class="example"><<i>el</i>:<b>modes</b> <i>el</i>:<b>easy</b>="<var>false</var>" <i>el</i>:<b>single</b>="<var>true</var>" <i>el</i>:<b>network</b>="<var>false</var>" <i>el</i>:<b>control</b>="<var>force</var>" <i>el</i>:<b>scoreunit</b>="<var>duration</var>" <i>el</i>:<b>scoretarget</b>="<var>time</var>"/>
2951
</pre></td></tr></table>
2953
<p><b>Attributes:</b>
2955
<dl compact="compact">
2956
<dt> <b>easy</b>, <i>required</i>, values = “true”, “false”</dt>
2957
<dd><p>If a level provides a second easy-difficulty mode, set this attribute to ‘<samp>true</samp>’.
2958
If only a one difficulty mode is supported, set this attribute to ‘<samp>false</samp>’.
2961
<dt> <b>single</b>, <i>required</i>, values = “true”, “false”</dt>
2962
<dd><p>If a level provides a single player game as it is standard, set this attribute to
2963
‘<samp>true</samp>’. Set this attribute to ‘<samp>false</samp>’ only if the level is a 2-player-network game.
2966
<dt> <b>network</b>, <i>required</i>, values = “true”, “false”</dt>
2967
<dd><p>If a level provides a 2-player-network game, set this attribute to ‘<samp>true</samp>’.
2968
If not, set this attribute to ‘<samp>false</samp>’.
2971
<dt> <b>control</b>, <i>optional</i>, values = “force”, “balance”, “key”, “other”; default = “force”</dt>
2972
<dd><p>This attribute defines the standard control mode of the level. You can play a level by using the
2973
mouse to generate forces on the marbles, since it is the standard and was the only way up to
2974
Enigma 0.92. Or you can play a level using the mouse, or other input devices to balance the
2975
level-world with the marbles. Or you may use the keyboard with its cursor keys to move the
2976
actor like in classic Sokoban games.
2978
<p>Although the user has always the last choice to define the input method he/she
2979
currently wants to use, the author must define the standard control-mode that
2980
the scoring system uses. Enigma will save and evaluate only scores achieved in the defined
2981
control mode for high score lists.
2984
<dt> <b>scoreunit</b>, <i>optional</i>, values = “duration”, “number”; default = “duration”</dt>
2985
<dd><p>This attribute defines the evaluation and display mode of score values. By the
2986
default ‘<samp>duration</samp>’, the score is interpreted as level solution time and displayed
2987
in a <b>MM:SS</b> format. The ‘<samp>number</samp>’ mode displays scores as plain
2988
numbers and lower numbers will be evaluated as better scores. This mode is appropriate
2989
for counting pushes and moves.
2992
<dt> <b>scoretarget</b>, <i>optional</i>, values = “time”, “pushes”, “moves”, *; default = “time”</dt>
2993
<dd><p>The score target triggers the measuring of score values. ‘<samp>time</samp>’ will take the
2994
solution time, ‘<samp>pushes</samp>’ counts the pushes of stones, ‘<samp>moves</samp>’ counts the
2995
moves of the actor. Any other value will call a Lua function for score values.
2996
The target is used as a short title for the score in user interface displays.
3006
<a name="g_t_003ccomments_003e"></a>
3007
<table cellpadding="1" cellspacing="1" border="0">
3008
<tr><td valign="middle" align="left">[<a href="#g_t_003cmodes_003e" title="Previous section in reading order"> < </a>]</td>
3009
<td valign="middle" align="left">[<a href="#g_t_003cscore_003e" title="Next section in reading order"> > </a>]</td>
3010
<td valign="middle" align="left"> </td>
3011
<td valign="middle" align="left">[<a href="#Level-Basics" title="Beginning of this chapter or previous chapter"> << </a>]</td>
3012
<td valign="middle" align="left">[<a href="#Info-metadata" title="Up section"> Up </a>]</td>
3013
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Next chapter"> >> </a>]</td>
3014
<td valign="middle" align="left"> </td>
3015
<td valign="middle" align="left"> </td>
3016
<td valign="middle" align="left"> </td>
3017
<td valign="middle" align="left"> </td>
3018
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
3019
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
3020
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
3021
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
3023
<a name="g_t_003ccomments_003e-1"></a>
3024
<h3 class="subsection">3.3.8 <comments></h3>
3026
<p>The optional comments node allows the author to add a few comments and to determine how
3027
they should be processed. Please note that internationalization support will not translate
3030
<table><tr><td> </td><td><pre class="example"><<i>el</i>:<b>comments</b>>
3031
<<i>el</i>:<b>credits</b> <i>el</i>:<b>showinfo</b>="<var>true</var>" <i>el</i>:<b>showstart</b>="<var>false</var>"><var>Thanks to the author of my favorite libs</var></<i>el</i>:<b>credits</b>>
3032
<<i>el</i>:<b>dedication</b> <i>el</i>:<b>showinfo</b>="<var>true</var>" <i>el</i>:<b>showstart</b>="<var>false</var>"><var>To a honorable or a beloved person</var></<i>el</i>:<b>dedication</b>>
3033
<<i>el</i>:<b>code</b>><var>some important general notes</var></<i>el</i>:<b>code</b>>
3034
</<i>el</i>:<b>comments</b>>
3035
</pre></td></tr></table>
3037
<p><b>Attributes:</b>
3040
<p><b>Contents - Elements:</b>
3042
<p>The comments element itself contains only subelements as content.
3044
<dl compact="compact">
3045
<dt> <b>credits</b>, <i>optional, single occurrence</i></dt>
3046
<dd><p>The place to honor people who helped to make your level run.
3048
<p><b>Attributes:</b>
3049
</p><dl compact="compact">
3050
<dt> <b>showinfo</b>, <i>optional</i>, default = “false”</dt>
3051
<dd><p>A value of ‘<samp>true</samp>’ will display the message on the level info
3055
<dt> <b>showstart</b>, <i>optional</i>, default = “false”</dt>
3056
<dd><p>A value of ‘<samp>true</samp>’ will display the message on startup of the
3057
level. Please use this feature only in rare cases.
3063
<p>The credits message itself. It may be broken into several lines. Whitespace will
3064
be collapsed before display.
3067
<dt> <b>dedication</b>, <i>optional, single occurrence</i></dt>
3068
<dd><p>The place to dedicate the level to a honorable or a beloved person. Please use
3069
this place instead of adding document-items within the level.
3071
<p><b>Attributes:</b>
3072
</p><dl compact="compact">
3073
<dt> <b>showinfo</b>, <i>optional</i>, default = “false”</dt>
3074
<dd><p>A value of ‘<samp>true</samp>’ will display the message on the level info
3078
<dt> <b>showstart</b>, <i>optional</i>, default = “false”</dt>
3079
<dd><p>A value of ‘<samp>true</samp>’ will display the message on startup of the
3080
level. Please use this feature only in rare cases.
3086
<p>The dedication message itself. It may be broken into several lines. Whitespace will
3087
be collapsed before display.
3090
<dt> <b>code</b>, <i>optional, single occurrence</i></dt>
3092
<p><b>Attributes:</b>
3098
<p>The main code comment, which may be an explanation of the <a href="#g_t_003cversion_003e"><version></a> status
3099
or a to-do list. It may be broken into several lines. This comment will not be
3106
<a name="g_t_003cscore_003e"></a>
3107
<table cellpadding="1" cellspacing="1" border="0">
3108
<tr><td valign="middle" align="left">[<a href="#g_t_003ccomments_003e" title="Previous section in reading order"> < </a>]</td>
3109
<td valign="middle" align="left">[<a href="#LUA-code" title="Next section in reading order"> > </a>]</td>
3110
<td valign="middle" align="left"> </td>
3111
<td valign="middle" align="left">[<a href="#Level-Basics" title="Beginning of this chapter or previous chapter"> << </a>]</td>
3112
<td valign="middle" align="left">[<a href="#Info-metadata" title="Up section"> Up </a>]</td>
3113
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Next chapter"> >> </a>]</td>
3114
<td valign="middle" align="left"> </td>
3115
<td valign="middle" align="left"> </td>
3116
<td valign="middle" align="left"> </td>
3117
<td valign="middle" align="left"> </td>
3118
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
3119
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
3120
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
3121
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
3123
<a name="g_t_003cscore_003e-1"></a>
3124
<h3 class="subsection">3.3.9 <score></h3>
3126
<p>In this node, the author should provide his own scoring values as hints and
3127
a challenge for other players. All values are related to the control mode defined
3128
in <a href="#g_t_003cmodes_003e"><modes></a>.
3130
<table><tr><td> </td><td><pre class="example"><<i>el</i>:<b>score</b> <i>el</i>:<b>easy</b>="<var>01:07</var>" <i>el</i>:<b>difficult</b>="<var>-</var>"/>
3131
</pre></td></tr></table>
3133
<p><b>Attributes:</b>
3135
<dl compact="compact">
3136
<dt> <b>easy</b>, <i>required</i></dt>
3137
<dd><p>The solution time for the easy mode. The format is either <var><b>MM:SS</b></var>, where
3138
MM stands for the minutes, and SS for the seconds, or <var><b>-</b></var> if the author did
3139
not yet solve the level him/herself. For levels with a score unit mode ‘<samp>number</samp>’,
3140
the value would be the number of marble moves or pushes.
3143
<dt> <b>difficult</b>, <i>required</i></dt>
3144
<dd><p>The solution time for the difficult mode. The format is either <var><b>MM:SS</b></var>, where
3145
MM stands for the minutes, and SS for the seconds, or <var><b>-</b></var> if the author did
3146
not yet solve the level him/herself. For levels with a score unit mode ‘<samp>number</samp>’,
3147
the value would be the number of marble moves or pushes.
3155
<a name="LUA-code"></a>
3156
<table cellpadding="1" cellspacing="1" border="0">
3157
<tr><td valign="middle" align="left">[<a href="#g_t_003cscore_003e" title="Previous section in reading order"> < </a>]</td>
3158
<td valign="middle" align="left">[<a href="#Internationalization-_0028i18n_0029" title="Next section in reading order"> > </a>]</td>
3159
<td valign="middle" align="left"> </td>
3160
<td valign="middle" align="left">[<a href="#Level-Basics" title="Beginning of this chapter or previous chapter"> << </a>]</td>
3161
<td valign="middle" align="left">[<a href="#Level-Basics" title="Up section"> Up </a>]</td>
3162
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Next chapter"> >> </a>]</td>
3163
<td valign="middle" align="left"> </td>
3164
<td valign="middle" align="left"> </td>
3165
<td valign="middle" align="left"> </td>
3166
<td valign="middle" align="left"> </td>
3167
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
3168
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
3169
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
3170
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
3172
<a name="LUA-code-1"></a>
3173
<h2 class="section">3.4 LUA code</h2>
3175
<p>This element takes any Lua code as a single chunk with nearly no limitations:
3177
<table><tr><td> </td><td><pre class="example"> <<i>el</i>:<b>luamain</b>><![CDATA[
3181
create_world( levelw, levelh)
3182
draw_border("st-wood")
3183
fill_floor("fl-leavesb", 0,0,levelw,levelh)
3188
document(5,10,"hint1")
3189
document(10,10,"hint2")
3190
document(10,5,"Heureka!")
3191
set_actor("ac-blackball", 4, 11)
3192
]]></<i>el</i>:<b>luamain</b>>
3193
</pre></td></tr></table>
3195
<p><b>Attributes:</b>
3201
<p>This element takes the main Lua code as its contents.
3203
<p>All other possible libraries that are declared as dependencies, and Lua chunks
3204
supplied by XML elements are preloaded as described in <a href="#g_t_003ccompatibility_003e"><compatibility></a>.
3205
Generally there is no more need to use Lua functions like ‘<samp>Require</samp>’ to load
3206
libraries. Just in case you need to control the point of execution were the
3207
library must be loaded, you can declare the library with the attribute
3208
‘<samp>el:preload="false"</samp>’. You should use the new function @ref{enigma.LoadLib}
3209
to load the library.
3211
<p>The Lua code that is enclosed in a XML CDATA section. This limits the
3212
Lua code not to use the reserved end marker ‘<samp>]]></samp>’. Any occurrence must be
3213
substituted by ‘<samp>]] ></samp>’.
3215
<p>On the other hand, the XML format extends the Lua capabilities to the use of
3216
encodings. You may use Lua strings and comments with Umlauts, but Lua identifiers are still
3217
limited to pure US-ASCII. The benefit is that you can use Umlauts and
3218
other non-ASCII characters within it-document hints.
3221
<a name="Internationalization-_0028i18n_0029"></a>
3222
<table cellpadding="1" cellspacing="1" border="0">
3223
<tr><td valign="middle" align="left">[<a href="#LUA-code" title="Previous section in reading order"> < </a>]</td>
3224
<td valign="middle" align="left">[<a href="#Usage" title="Next section in reading order"> > </a>]</td>
3225
<td valign="middle" align="left"> </td>
3226
<td valign="middle" align="left">[<a href="#Level-Basics" title="Beginning of this chapter or previous chapter"> << </a>]</td>
3227
<td valign="middle" align="left">[<a href="#Level-Basics" title="Up section"> Up </a>]</td>
3228
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Next chapter"> >> </a>]</td>
3229
<td valign="middle" align="left"> </td>
3230
<td valign="middle" align="left"> </td>
3231
<td valign="middle" align="left"> </td>
3232
<td valign="middle" align="left"> </td>
3233
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
3234
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
3235
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
3236
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
3238
<a name="Internationalization-_0028i18n_0029-1"></a>
3239
<h2 class="section">3.5 Internationalization (i18n)</h2>
3241
<p>The internationalization of levels is a driving force behind the level
3242
format changes. As you may have noticed, there are two ‘<samp>i18n</samp>’ elements, one
3243
in the author’s protected section and one in the public. Let us review how to use
3244
them for internationalization of the three documents of our ‘<samp>demo_i18n.xml</samp>’
3247
<table><tr><td> </td><td><pre class="example"> <<i>el</i>:<b>protected</b> >
3248
<!-- elements omitted -->
3249
<<i>el</i>:<b>i18n</b>>
3250
<<i>el</i>:<b>string</b> <i>el</i>:<b>key</b>="<var>title</var>">
3251
<<i>el</i>:<b>english</b> <i>el</i>:<b>translate</b>="<var>false</var>"/>
3252
</<i>el</i>:<b>string</b>>
3253
<<i>el</i>:<b>string</b> <i>el</i>:<b>key</b>="<var>subtitle</var>">
3254
<<i>el</i>:<b>english</b> <i>el</i>:<b>translate</b>="<var>true</var>"/>
3255
<<i>el</i>:<b>translation</b> <i>el</i>:<b>lang</b>="<var>de</var>"><var>Übersetzten oder übersetzten lassen</var></<i>el</i>:<b>translation</b>>
3256
</<i>el</i>:<b>string</b>>
3257
<<i>el</i>:<b>string</b> <i>el</i>:<b>key</b>="<var>hint1</var>">
3258
<<i>el</i>:<b>english</b> <i>el</i>:<b>comment</b>="<var>Let 'right' be ambiguous: correct and opposite of left - if not possible choose correct">Read the right document</var></<i>el</i>:<b>english</b>>
3259
<<i>el</i>:<b>translation</b> <i>el</i>:<b>lang</b>="<var>de</var>"><var>Lies das rechte Dokument</var></<i>el</i>:<b>translation</b>>
3260
</<i>el</i>:<b>string</b>>
3261
<<i>el</i>:<b>string</b> <i>el</i>:<b>key</b>="<var>hint2</var>">
3262
<<i>el</i>:<b>english</b> <i>el</i>:<b>comment</b>="<var>the correct one and not the right positioned one</var>"><var>The right one, not the right one!</var></<i>el</i>:<b>english</b>>
3263
<<i>el</i>:<b>translation</b> <i>el</i>:<b>lang</b>="<var>de</var>"><var>Das rechte, nicht das rechte</var></<i>el</i>:<b>translation</b>>
3264
</<i>el</i>:<b>string</b>>
3265
<<i>el</i>:<b>string</b> <i>el</i>:<b>key</b>="<var>Heureka!</var>">
3266
<<i>el</i>:<b>english</b> <i>el</i>:<b>translate</b>="<var>false</var>"><var>Heureka!</var></<i>el</i>:<b>english</b>>
3267
</<i>el</i>:<b>string</b>>
3268
</<i>el</i>:<b>i18n</b>>
3269
</<i>el</i>:<b>protected</b>>
3270
<<i>el</i>:<b>public</b>>
3271
<<i>el</i>:<b>i18n</b>>
3272
<<i>el</i>:<b>string</b> <i>el</i>:<b>key</b>="<var>hint1</var>">
3273
<<i>el</i>:<b>translation</b> <i>el</i>:<b>lang</b>="<var>fr</var>"><var>Lisez la document de droite</var></<i>el</i>:<b>translation</b>>
3274
</<i>el</i>:<b>string</b>>
3275
</<i>el</i>:<b>i18n</b>>
3276
</<i>el</i>:<b>public</b>>
3277
</pre></td></tr></table>
3279
<p>Two of the documents use key words to reference a string. The last one uses the
3280
English string itself as the key. There are two additional reserved keys,
3281
‘<samp>title</samp>’ and ‘<samp>subtitle</samp>’.
3283
<p>For each string we like to translate or have translated, we define a ‘<samp>string</samp>’
3284
subelement of the protected section and add a ‘<samp>english</samp>’ subelement to the
3285
‘<samp>string</samp>’ element itself. The ‘<samp>string</samp>’ element just takes a single
3286
mandatory attribute, the key of the string. The ‘<samp>english</samp>’ element has a
3287
single mandatory attribute ‘<samp>translate</samp>’ that defaults to ‘<samp>true</samp>’, stating
3288
the author’s decision whether the string should be translated. If the author
3289
does not want a string to be translated, he can and must simply add no ‘<samp>string</samp>’
3290
element for this string at all. Thus, the elements for the strings with the keys
3291
‘<samp>title</samp>’ and ‘<samp>Heureka!</samp>’ are optional and quite unusual.
3293
<p>‘<samp>title</samp>’ and ‘<samp>subtitle</samp>’ display the English text in the <a href="#g_t_003cidentity_003e"><identity></a>
3294
element. All other strings referenced by keys need to add the
3295
English text as the content of the ‘<samp>english</samp>’ element. ‘<samp>hint1</samp>’ and
3296
‘<samp>hint2</samp>’ are examples.
3298
<p>Because we chose quite ambiguous English texts, it is very likely that translators
3299
who do not play the game but just translate the text, may deliver a wrong
3300
translation. To avoid mistakes, a level author may add a ‘<samp>comment</samp>’ attribute
3301
to the ‘<samp>english</samp>’ element. The translator receives this comment with
3302
the English string as we will see later.
3304
<p>If the author is not native English-speaking, he should add his own ‘<samp>translation</samp>’
3305
subelement to the ‘<samp>string</samp>’ element. The ‘<samp>translation</samp>’ element has a
3306
single mandatory attribute ‘<samp>lang</samp>’ that takes the 2-character language
3307
abbreviation. The contents of the element is the translation itself.
3309
<p>All translations added in the protected section take precedence over any translator’s
3310
translation and will work directly after addition without waiting for a translator’s
3313
<p>Last but not least, we have an ‘<samp>i18n</samp>’ element in the public section. This element
3314
takes translation suggestions. The author may add them him/herself for other
3315
languages he/she knows. They may be added by others on the way to the user,
3316
or even by the user himself.
3318
<p>Translations in this section will work immediately after addition without
3319
waiting for a translator’s translation. However, available translations, provided by translators,
3322
<p>The format is identical to the protected section, with the exception that no
3323
‘<samp>english</samp>’ element may be provided. The ‘<samp>key</samp>’ attribute in the
3324
‘<samp>string</samp>’ element must match exactly the ‘<samp>key</samp>’ attribute in the corresponding
3325
‘<samp>string</samp>’ element in the protected section. One subtle difference exists,
3326
due to technical and practical reasons. ‘<samp>key</samp>’ attributes in the public
3327
section need to be XML identifiers; thus, you cannot provide public translations
3328
for strings that use the English phrase as the key. Choose a keyword and provide
3329
the English string in the public ‘<samp>i18n</samp>’ section to avoid these troubles.
3331
<p>The ‘<samp>string</samp>’ element in protected section and in the public section
3332
must be unique concerning the attribute ‘<samp>key</samp>’ within the section. This means
3333
you should add translations for all known languages for a string in ‘<samp>string</samp>’
3334
element in the protected and in the public section. The sequence does not matter.
3336
<p>Let us review what the translator receives for each string. Let us
3337
start with ‘<samp>hint2</samp>’ for the German translator:
3339
<table><tr><td> </td><td><pre class="example"># <i>level</i>: "<var>Demo Internationalization</var>"
3340
# <i>author</i>: "<var>Ronald Lamprecht</var>" <i>email</i> "<var>ral@users.berlios.de</var>"
3341
# <i>comment</i>: "<var>the correct one and not the right positioned one</var>"
3342
# <i>use</i>: "<var>Das rechte, nicht das rechte</var>"
3343
#: po/level_i18n.cc:17
3344
<b>msgid</b> "<var>The right one, not the right one!</var>"
3345
<b>msgstr</b> ""
3346
</pre></td></tr></table>
3348
<p>‘<samp>msgid</samp>’ is the English string. ‘<samp>msgstr</samp>’ takes the German translation.
3349
But the translator does not need to translate since the author provided the German translation
3350
in the ‘<samp># use:</samp>’ line
3352
<p>As another example, ‘<samp>hint1</samp>’ for the French translator:
3353
</p><table><tr><td> </td><td><pre class="example"># <i>level</i>: "<var>Demo Internationalization</var>"
3354
# <i>author</i>: "<var>Ronald Lamprecht</var>" <i>email</i> "<var>ral@users.berlios.de</var>"
3355
# <i>comment</i>: "<var>Let 'right' be ambiguous: correct and opposite of left - if not possible choose correct</var>"
3356
# <i>check</i>: "<var>Lisez la document de droite</var>"
3357
#: po/level_i18n.cc:14
3358
<b>msgid</b> "<var>Read the right document</var>"
3359
<b>msgstr</b> "<var>Lisez le document de droite</var>"
3360
</pre></td></tr></table>
3362
<p>Here the author gives the public translation in the ‘<samp># check:</samp>’ line. Since it
3363
contains at least one mistake, the translator will correct it, as shown in the ‘<samp>msgstr</samp>’
3367
<a name="Usage"></a>
3368
<table cellpadding="1" cellspacing="1" border="0">
3369
<tr><td valign="middle" align="left">[<a href="#Internationalization-_0028i18n_0029" title="Previous section in reading order"> < </a>]</td>
3370
<td valign="middle" align="left">[<a href="#Update-and-Upgrade" title="Next section in reading order"> > </a>]</td>
3371
<td valign="middle" align="left"> </td>
3372
<td valign="middle" align="left">[<a href="#Level-Basics" title="Beginning of this chapter or previous chapter"> << </a>]</td>
3373
<td valign="middle" align="left">[<a href="#Level-Basics" title="Up section"> Up </a>]</td>
3374
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Next chapter"> >> </a>]</td>
3375
<td valign="middle" align="left"> </td>
3376
<td valign="middle" align="left"> </td>
3377
<td valign="middle" align="left"> </td>
3378
<td valign="middle" align="left"> </td>
3379
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
3380
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
3381
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
3382
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
3384
<a name="Usage-1"></a>
3385
<h2 class="section">3.6 Usage</h2>
3387
<p>After all the theory, let’s look at how to deal with the XML levelformat in
3388
practice. Of course, you will not assemble all XML metadata from scratch for
3389
every new level you write. You should use templates. You can start with any
3390
existing level, for example, the ‘<samp>demo_i18n.xml</samp>’ supplied with this
3391
documentation. Add your personal data to your template and store it as the basis for all new
3394
<p>Some level authors are very familiar with the Lua file format since their favorite editor supports
3395
Lua files with syntax coloring. The XML file name and the XML elements will cause
3396
their editor to use XML syntax coloring. Nevertheless, these authors are used
3397
to supplying metadata in the header of their Lua levels as non-standardized Lua
3398
comments; we decided to support a similar Lua-compatible XML format. We call it
3399
“Lua commented XML” since it simply comments out all XML lines with the Lua comment
3400
‘<samp>--xml-- </samp>’. For example:
3402
<table><tr><td> </td><td><pre class="example">--xml-- <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
3403
--xml-- <el:level xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://enigma-game.org/schema/level/1 level.xsd" xmlns:el="http://enigma-game.org/schema/level/1">
3404
--xml-- <el:protected >
3405
--xml-- <el:info el:type="level">
3406
--xml-- <el:identity el:title="Demo Simple" el:id="20060210ral001"/>
3407
--xml-- <el:version el:score="1" el:release="1" el:revision="0" el:status="stable"/>
3408
--xml-- <el:author el:name="Ronald Lamprecht"/>
3409
--xml-- <el:copyright>Copyright © 2006 Ronald Lamprecht</el:copyright>
3410
--xml-- <el:license el:type="GPL2" el:open="true">GPL v2.0 or above</el:license>
3411
--xml-- <el:compatibility el:enigma="0.92"/>
3412
--xml-- <el:modes el:easy="false" el:single="true" el:network="false"/>
3413
--xml-- <el:score el:easy="-" el:difficult="-"/>
3414
--xml-- </el:info>
3415
--xml-- <el:luamain><![CDATA[
3419
<b>create_world</b>( levelw, levelh)
3420
<b>draw_border</b>("<i>st-wood</i>")
3421
<b>fill_floor</b>("<i>fl-leavesb</i>", 0,0,levelw,levelh)
3426
<b>set_actor</b>("<i>ac-blackball</i>", 4, 11)
3427
--xml-- ]]></el:luamain>
3428
--xml-- <el:i18n/>
3429
--xml-- </el:protected>
3430
--xml-- </el:level>
3431
</pre></td></tr></table>
3433
<p>Please note that each XML metadata line must start exactly with ‘<samp>--xml-- </samp>’,
3434
8 characters, including the space at the end! An additional limitation of the
3435
Lua-commented XML format arises from Lua’s capability of handling character
3436
encodings. You need to limit yourself to ‘<samp>UTF-8</samp>’ or, of course ‘<samp>US-ASCII</samp>’
3437
to successfully use the Lua-commented XML format. Please remember, that
3438
although the XML part is Lua-commented, it must still be evaluated and thus must be
3441
<p>Every level stored in this Lua-commented XML format as a file with extension
3442
‘<samp>.lua</samp>’ can be used locally for command line use as well as in any level
3443
package that is stored on the Enigma user’s home directory. However, Lua-commented XML
3444
levels cannot be stored on Internet servers or be updated online. Thus,
3445
this format is good for level development, but you should convert the levels
3446
to the pure XML format for distribution. Please note that Enigma looks for XML levels
3447
first, and uses Lua levels only if it can’t find an XML level.
3449
<p>Another use of Lua-commented XML levels is the format backward compatibility to
3450
Enigma 0.92. If levels do not use new Enigma features, you can include
3451
your levels in Enigma 0.92 level packages in this format.
3453
<p>Since you may need to convert levels several times between the XML and the Lua format,
3454
we do provide tools for conversion: ‘<samp>xml2lua</samp>’ and ‘<samp>lua2xml</samp>’. Both are
3455
very simple Lua 5 scripts that you can execute as
3456
‘<samp>lua xml2lua demo_simple.xml > demo_simple.lua</samp>’ with a properly installed
3457
Lua 5 version. On Unix systems, you can mark the scripts as executable and
3458
simply call ‘<samp>xml2lua demo_simple.xml > demo_simple.lua</samp>’.
3460
<p>Of course you can add the conversion algorithms as simple macros for your favorite
3461
editor. Please publish any editor macros you write.
3463
<p>As you fiddle with the XML metadata, you may produce syntactical errors, of course.
3464
You can validate your level by trying to start it with Enigma. XML errors are
3465
output as Lua errors are. If the error messages are too long to read, you may
3466
want to start Enigma from the command line with the option ‘<samp>--log</samp>’ and read the
3467
messages printed to the command line or written to the file ‘<samp>stdout.txt</samp>’ on
3468
the current working directory for Windows systems.
3470
<p>Of course, you can use any external XML validation tool, too. You just need to
3471
copy the schema file ‘<samp>level.xsd</samp>’ on the same directory as the level itself.
3472
Possible validation tools are the Xerces-C sample application
3473
‘<samp>DOMPrint.exe -n -s -f -v=always level.xml</samp>’ or validating editors, such as
3474
<a href="http://www.freexmleditor.com/">Exchanger XML Lite</a>. Such editors will provide
3475
you with selections of all possible elements and attributes at each position.
3478
<a name="Update-and-Upgrade"></a>
3479
<table cellpadding="1" cellspacing="1" border="0">
3480
<tr><td valign="middle" align="left">[<a href="#Usage" title="Previous section in reading order"> < </a>]</td>
3481
<td valign="middle" align="left">[<a href="#Library-Files" title="Next section in reading order"> > </a>]</td>
3482
<td valign="middle" align="left"> </td>
3483
<td valign="middle" align="left">[<a href="#Level-Basics" title="Beginning of this chapter or previous chapter"> << </a>]</td>
3484
<td valign="middle" align="left">[<a href="#Level-Basics" title="Up section"> Up </a>]</td>
3485
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Next chapter"> >> </a>]</td>
3486
<td valign="middle" align="left"> </td>
3487
<td valign="middle" align="left"> </td>
3488
<td valign="middle" align="left"> </td>
3489
<td valign="middle" align="left"> </td>
3490
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
3491
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
3492
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
3493
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
3495
<a name="Update-and-Upgrade-1"></a>
3496
<h2 class="section">3.7 Update and Upgrade</h2>
3498
<p>Enigma is able to load new level versions since we provide all necessary
3499
attributes in the <a href="#g_t_003cversion_003e"><version></a> element.
3501
<p>If Enigma loads a new level version, which differs just in the ‘<samp><b>revision</b></samp>’, we speak of
3502
an ‘<samp><b>update</b></samp>’. You can perform updates automatically and replace old versions with
3503
the updates, since the author guarantees them to be compatible in scoring and
3504
dependencies. The author should provide a download address for automatic updates in the
3505
protected info element:
3507
<table><tr><td> </td><td><pre class="example"><<i>el</i>:<b>update</b> <i>el</i>:<b>url</b>="<var>http://myLevelServer.org/path/level_1.xml</var>"/>
3508
</pre></td></tr></table>
3510
<p><b>Attributes:</b>
3512
<dl compact="compact">
3513
<dt> <b>url</b>, <i>required</i></dt>
3514
<dd><p>A long-term valid, complete address for update downloads of this level in the same score and
3520
<p>If the author of a level introduces incompatibilities into the level, he increases the release
3521
version of the level and stores it with a new filename. We call the download of such a new level
3522
version an ‘<samp><b>upgrade</b></samp>’.
3524
<p>To publish the availability of an upgrade release, the author should update the previous release
3525
with a final revision that simply adds an upgrade element that announces the new release:
3527
<table><tr><td> </td><td><pre class="example"><<i>el</i>:<b>upgrade</b> <i>el</i>:<b>url</b>="<var>http://myLevelServer.org/path/level_2.xml</var>" <i>el</i>:<b>release</b>="<var>2</var>"/>
3528
</pre></td></tr></table>
3530
<p><b>Attributes:</b>
3532
<dl compact="compact">
3533
<dt> <b>url</b>, <i>required</i></dt>
3534
<dd><p>A long-term valid, complete address for upgrade downloads of this level. A path
3538
<dt> <b>release</b>, <i>required</i></dt>
3539
<dd><p>The release version of the upgrade.
3544
<p>Since the author cannot update all distributed levels himself to announce the availability of the
3545
new release, we added another upgrade element in the public section. Level administrators can
3546
use this element for the same purpose, with the same syntax, without modifying the author’s
3550
<a name="Library-Files"></a>
3551
<table cellpadding="1" cellspacing="1" border="0">
3552
<tr><td valign="middle" align="left">[<a href="#Update-and-Upgrade" title="Previous section in reading order"> < </a>]</td>
3553
<td valign="middle" align="left">[<a href="#Writing-a-Library" title="Next section in reading order"> > </a>]</td>
3554
<td valign="middle" align="left"> </td>
3555
<td valign="middle" align="left">[<a href="#Level-Basics" title="Beginning of this chapter or previous chapter"> << </a>]</td>
3556
<td valign="middle" align="left">[<a href="#Level-Basics" title="Up section"> Up </a>]</td>
3557
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Next chapter"> >> </a>]</td>
3558
<td valign="middle" align="left"> </td>
3559
<td valign="middle" align="left"> </td>
3560
<td valign="middle" align="left"> </td>
3561
<td valign="middle" align="left"> </td>
3562
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
3563
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
3564
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
3565
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
3567
<a name="Library-Files-1"></a>
3568
<h2 class="section">3.8 Library Files</h2>
3570
<p>Libraries are collections of Lua functions for reuse in many levels. To use a library, you must
3571
declare it as a dependency, as described in <a href="#g_t_003ccompatibility_003e"><compatibility></a>. Preloading the library is all
3572
you have to do to use the library. Otherwise, you can use the function @ref{enigma.LoadLib} to
3573
load the library at a certain point of execution.
3575
<p>Enigma provides several very useful <a href="#Libraries">Libraries</a>. You will find them on the system
3576
path in the subdirectory ‘<samp>levels/lib</samp>’. Most of them are documented in-line.
3577
You will find a separate documentation file
3578
‘<samp>doc/ant_lua.txt</samp>’ for ‘<samp>ant</samp>’.
3580
<p>In this section, we will concentrate on the aspects of writing and maintaining
3583
<table class="menu" border="0" cellspacing="0">
3584
<tr><td align="left" valign="top"><a href="#Writing-a-Library">3.8.1 Writing a Library</a></td><td> </td><td align="left" valign="top">
3586
<tr><td align="left" valign="top"><a href="#Maintaining-a-Library">3.8.2 Maintaining a Library</a></td><td> </td><td align="left" valign="top">
3591
<a name="Writing-a-Library"></a>
3592
<table cellpadding="1" cellspacing="1" border="0">
3593
<tr><td valign="middle" align="left">[<a href="#Library-Files" title="Previous section in reading order"> < </a>]</td>
3594
<td valign="middle" align="left">[<a href="#Maintaining-a-Library" title="Next section in reading order"> > </a>]</td>
3595
<td valign="middle" align="left"> </td>
3596
<td valign="middle" align="left">[<a href="#Level-Basics" title="Beginning of this chapter or previous chapter"> << </a>]</td>
3597
<td valign="middle" align="left">[<a href="#Library-Files" title="Up section"> Up </a>]</td>
3598
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Next chapter"> >> </a>]</td>
3599
<td valign="middle" align="left"> </td>
3600
<td valign="middle" align="left"> </td>
3601
<td valign="middle" align="left"> </td>
3602
<td valign="middle" align="left"> </td>
3603
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
3604
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
3605
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
3606
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
3608
<a name="Writing-a-Library-1"></a>
3609
<h3 class="subsection">3.8.1 Writing a Library</h3>
3611
<p>Library files are nearly identical to level files. The main difference is the
3612
attribute ‘<samp>el:type</samp>’ in the ‘<samp>info</samp>’ element, which you should set to
3613
‘<samp>library</samp>’. You must provide all other elements and attributes as you
3614
must for levels. Of course no scoring related attributes will ever be
3615
evaluated and you should set them to default.
3617
<p>Libraries may depend on others, so you must provide an id and a release number.
3618
Several releases of a library can coexist and you can update and upgrade them
3619
if you provide the necessary information. Of course, libraries may contain document
3620
strings that can be localized if you provide the ‘<samp>i18n</samp>’ elements.
3622
<p>The ‘<samp>el:luamain</samp>’ element takes the complete Lua code as it does for levels.
3623
Let’s look at the essential XML parts of a library:
3625
<table><tr><td> </td><td><pre class="example"><?xml version="1.0" encoding="<var>UTF-8</var>" standalone="no" ?>
3626
<<i>el</i>:<b>level</b> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="<i>http://enigma-game.org/schema/level/1 level.xsd</i>" xmlns:<i>el</i>="<i>http://enigma-game.org/schema/level/1</i>">
3627
<<i>el</i>:<b>protected</b> >
3628
<<i>el</i>:<b>info</b> <i>el</i>:<b>type</b>="<var>library</var>">
3629
<<i>el</i>:<b>identity</b> <i>el</i>:<b>title</b>="" <i>el</i>:<b>id</b>="<var>lib/ant</var>"/>
3630
<<i>el</i>:<b>version</b> <i>el</i>:<b>score</b>="<var>1</var>" <i>el</i>:<b>release</b>="<var>1</var>" <i>el</i>:<b>revision</b>="<var>0</var>" <i>el</i>:<b>status</b>="<var>released</var>"/>
3631
<<i>el</i>:<b>author</b> <i>el</i>:<b>name</b>="<var>Petr Machata</var>"/>
3632
<<i>el</i>:<b>copyright</b>><var>Copyright © 2002-2003 Petr Machata</var></<i>el</i>:<b>copyright</b>>
3633
<<i>el</i>:<b>license</b> <i>el</i>:<b>type</b>="<var>GPL v2.0 or above</var>" <i>el</i>:<b>open</b>="<var>true</var>"/>
3634
<<i>el</i>:<b>compatibility</b> <i>el</i>:<b>enigma</b>="<var>0.92</var>">
3635
<<i>el</i>:<b>dependency</b> <i>el</i>:<b>path</b>="<var>lib/natmaze</var>" <i>el</i>:<b>id</b>="<var>lib/natmaze</var>" <i>el</i>:<b>release</b>="<var>1</var>" <i>el</i>:<b>preload</b>="<var>false</var>">
3636
</<i>el</i>:<b>compatibility</b>>
3637
<<i>el</i>:<b>modes</b> <i>el</i>:<b>easy</b>="<var>false</var>" <i>el</i>:<b>single</b>="<var>false</var>" <i>el</i>:<b>network</b>="<var>false</var>"/>
3638
<<i>el</i>:<b>score</b> <i>el</i>:<b>easy</b>="<var>-</var>" <i>el</i>:<b>difficult</b>="<var>-</var>"/>
3639
</<i>el</i>:<b>info</b>>
3640
<<i>el</i>:<b>luamain</b>><![CDATA[
3642
]]></<i>el</i>:<b>luamain</b>>
3643
<<i>el</i>:<b>i18n</b>/>
3644
</<i>el</i>:<b>protected</b>>
3645
</<i>el</i>:<b>level</b>>
3646
</pre></td></tr></table>
3649
<a name="Maintaining-a-Library"></a>
3650
<table cellpadding="1" cellspacing="1" border="0">
3651
<tr><td valign="middle" align="left">[<a href="#Writing-a-Library" title="Previous section in reading order"> < </a>]</td>
3652
<td valign="middle" align="left">[<a href="#Multilevel-Files" title="Next section in reading order"> > </a>]</td>
3653
<td valign="middle" align="left"> </td>
3654
<td valign="middle" align="left">[<a href="#Level-Basics" title="Beginning of this chapter or previous chapter"> << </a>]</td>
3655
<td valign="middle" align="left">[<a href="#Library-Files" title="Up section"> Up </a>]</td>
3656
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Next chapter"> >> </a>]</td>
3657
<td valign="middle" align="left"> </td>
3658
<td valign="middle" align="left"> </td>
3659
<td valign="middle" align="left"> </td>
3660
<td valign="middle" align="left"> </td>
3661
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
3662
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
3663
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
3664
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
3666
<a name="Maintaining-a-Library-1"></a>
3667
<h3 class="subsection">3.8.2 Maintaining a Library</h3>
3669
<p>Libraries may exist in different releases and revisions. Library versions that differ simply in the
3670
revision, denote compatible versions. Library versions that introduce incompatibilities must
3671
differ in the release number. However, since existing levels may depend on the legacy behavior
3672
of the older release, you must maintain both library release versions and distribute them with
3673
Enigma at the same time.
3675
<p>To coexist, these different library releases must follow a strict naming scheme. Every library has
3676
a base name. In the example above it is ‘<samp>lib/ant</samp>’.
3677
The filename of a given release is the basename with the addition of an underscore and the
3678
release number plus the suffix ‘<samp>xml</samp>’. Thus, you must store release ‘<samp>lib/ant</samp>’ as
3679
‘<samp>lib/ant_2.xml</samp>’.
3681
<p>If you look at the lib directory, you may wonder that Enigma stores most library files without
3682
release number addition to the basename. This is due to 0.92 Lua level format compatibility
3683
support. You can store one, and of course only one, release of each library without release
3684
number addition to the basename. Enigma will load this version from pure Lua levels that do
3685
not provide any information of the required library release.
3687
<p>If a library file with a complete filename is not present, the default library file without release
3688
number addition will be loaded for XML load requests, too. Yet the future belongs to the new
3689
naming scheme, and every new library should follow it from the beginning.
3692
<a name="Multilevel-Files"></a>
3693
<table cellpadding="1" cellspacing="1" border="0">
3694
<tr><td valign="middle" align="left">[<a href="#Maintaining-a-Library" title="Previous section in reading order"> < </a>]</td>
3695
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Next section in reading order"> > </a>]</td>
3696
<td valign="middle" align="left"> </td>
3697
<td valign="middle" align="left">[<a href="#Level-Basics" title="Beginning of this chapter or previous chapter"> << </a>]</td>
3698
<td valign="middle" align="left">[<a href="#Level-Basics" title="Up section"> Up </a>]</td>
3699
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Next chapter"> >> </a>]</td>
3700
<td valign="middle" align="left"> </td>
3701
<td valign="middle" align="left"> </td>
3702
<td valign="middle" align="left"> </td>
3703
<td valign="middle" align="left"> </td>
3704
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
3705
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
3706
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
3707
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
3709
<a name="Multilevel-Files-1"></a>
3710
<h2 class="section">3.9 Multilevel Files</h2>
3712
<p>Another concept of code reusage besides <a href="#Library-Files">Library Files</a> are multilevel files.
3713
The code contained in a single file generates several levels, called sublevels,
3714
that appear as autonomous levels in a levelpack. Of course this concept is much
3715
less flexible than the library concept as other level files can not reuse the
3716
code. But you can write a multilevel if you wrote a lot of specific code for a
3717
complex level that provides more than just two variants, which would be
3718
otherwise presented as ‘<samp>difficult</samp>’ and ‘<samp>easy</samp>’ <a href="#g_t_003cmodes_003e"><modes></a>.
3720
<p>But the main reason for multilevel files is the support of foreign game level
3721
formats like Sokoban, which describe a whole set of levels in a single file.
3722
Enigma imports these original files with just a few lines of code. It would be
3723
inefficient, even though being possible, to write an Enigma level stub for
3724
every level imported from a single foreign file.
3726
<p>But multilevel files have some restrictions. They use a single set of XML
3727
level metadata. Thus these metadata must fit to all levels. The
3728
<a href="#g_t_003cversion_003e"><version></a> will be identical as it reflects either the code version of the
3729
native level or the version of the imported foreign file. But the other data
3730
like <a href="#g_t_003cauthor_003e"><author></a>, <a href="#g_t_003ccompatibility_003e"><compatibility></a> and <a href="#g_t_003cmodes_003e"><modes></a> have to match, too.
3731
If they do not, you can not use a multilevel file.
3733
<p>Just the values for ‘<samp>title</samp>’ and ‘<samp>id</samp>’ will and have to differ for all
3734
levels described by a single multilevel file. There exists special support for
3735
multilevels to handle these attributes.
3737
<p>Let us look at all attributes and features of multilevels that differ from
3738
standard level files.
3740
<p>First you have to declare in the <a href="#Info-metadata">Info metadata</a> element the type as
3741
<code>"multilevel"</code> and to provide the quantity of generated levels. The
3742
sublevels will be numbered from 1 to the given quantity.
3744
<p>In the element <a href="#g_t_003cidentity_003e"><identity></a> you have to provide just one unique level id
3745
value. Enigma will automatically append the string <code>"[1]"</code> for the first
3746
sublevel, <code>"[2]"</code> for the second and so on. Thus every sublevel has an
3749
<p>Additionally you should provide a base title for the levels in this metadata
3750
<a href="#g_t_003cidentity_003e"><identity></a> element. If your title ends with a hash ‘<samp>#</samp>’ sign Enigma
3751
will autogenerate titles for the sublevels by appending the sublevel number to
3752
the given common title string.
3754
<p>For individual sublevel titles the <a href="#LUA-code">LUA code</a> has to provide the titles.
3755
The title in the <a href="#g_t_003cidentity_003e"><identity></a> element may not end on a hash sign and will
3756
only be used as a default title base in case the <a href="#LUA-code">LUA code</a> fails to
3757
provide a sublevel title. Prior execution of the Lua code the global
3758
attribute <a href="#SublevelNumber">SublevelNumber</a> gets initialized. The Lua part has either way to
3759
load the appropriate sublevel based on this number. Now it has additionally the
3760
task to set the second special multilevel global attribute <a href="#SublevelTitle">SublevelTitle</a>.
3763
<p><a href="#g_t_003ccompatibility_003e"><compatibility></a> externaldata
3768
<a name="Enigma-Paradigm"></a>
3769
<table cellpadding="1" cellspacing="1" border="0">
3770
<tr><td valign="middle" align="left">[<a href="#Multilevel-Files" title="Previous section in reading order"> < </a>]</td>
3771
<td valign="middle" align="left">[<a href="#The-World_0027s-Structure" title="Next section in reading order"> > </a>]</td>
3772
<td valign="middle" align="left"> </td>
3773
<td valign="middle" align="left">[<a href="#Level-Basics" title="Beginning of this chapter or previous chapter"> << </a>]</td>
3774
<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up </a>]</td>
3775
<td valign="middle" align="left">[<a href="#Lua-API" title="Next chapter"> >> </a>]</td>
3776
<td valign="middle" align="left"> </td>
3777
<td valign="middle" align="left"> </td>
3778
<td valign="middle" align="left"> </td>
3779
<td valign="middle" align="left"> </td>
3780
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
3781
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
3782
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
3783
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
3785
<a name="Enigma-Paradigm-1"></a>
3786
<h1 class="chapter">4. Enigma Paradigm</h1>
3788
<p>Now that you have learned about the formal declarative XML part of a level you
3789
should be eager to understand the basic principles of the participants of an
3790
Enigma level world. In this chapter we explain all the fundamental concepts and
3791
the terms used in the following chapters that describe the level author’s view
3794
<p>Please note that we describe the features of the new API of Enigma 1.10. The
3795
API of the earlier releases does not provide all the features and differs in
3798
<table class="menu" border="0" cellspacing="0">
3799
<tr><td align="left" valign="top"><a href="#The-World_0027s-Structure">4.1 The World’s Structure</a></td><td> </td><td align="left" valign="top">
3801
<tr><td align="left" valign="top"><a href="#Object-Description">4.2 Object Description</a></td><td> </td><td align="left" valign="top">
3803
<tr><td align="left" valign="top"><a href="#Methods-of-Interaction">4.3 Methods of Interaction</a></td><td> </td><td align="left" valign="top">
3805
<tr><td align="left" valign="top"><a href="#The-Lifecycle-of-a-Level">4.4 The Lifecycle of a Level</a></td><td> </td><td align="left" valign="top">
3810
<a name="The-World_0027s-Structure"></a>
3811
<table cellpadding="1" cellspacing="1" border="0">
3812
<tr><td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Previous section in reading order"> < </a>]</td>
3813
<td valign="middle" align="left">[<a href="#World_0027s-Shape-and-Coordinates" title="Next section in reading order"> > </a>]</td>
3814
<td valign="middle" align="left"> </td>
3815
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Beginning of this chapter or previous chapter"> << </a>]</td>
3816
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Up section"> Up </a>]</td>
3817
<td valign="middle" align="left">[<a href="#Lua-API" title="Next chapter"> >> </a>]</td>
3818
<td valign="middle" align="left"> </td>
3819
<td valign="middle" align="left"> </td>
3820
<td valign="middle" align="left"> </td>
3821
<td valign="middle" align="left"> </td>
3822
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
3823
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
3824
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
3825
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
3827
<a name="The-World_0027s-Structure-1"></a>
3828
<h2 class="section">4.1 The World’s Structure</h2>
3830
<p>We speak of a level as the opus as a whole that describes the initial composition
3831
of a gaming world and its dynamic behaviour during the game play. Let us look
3832
at the participating objects in details.
3834
<table class="menu" border="0" cellspacing="0">
3835
<tr><td align="left" valign="top"><a href="#World_0027s-Shape-and-Coordinates">4.1.1 World’s Shape and Coordinates</a></td><td> </td><td align="left" valign="top"> Grid Positions and Tiles
3837
<tr><td align="left" valign="top"><a href="#Object-Layers">4.1.2 Object Layers</a></td><td> </td><td align="left" valign="top"> Floors, Items, Stones, Actors and Others
3839
<tr><td align="left" valign="top"><a href="#World-as-an-Object">4.1.3 World as an Object</a></td><td> </td><td align="left" valign="top"> Global attributes and handle
3841
<tr><td align="left" valign="top"><a href="#Unpositioned-Objects">4.1.4 Unpositioned Objects</a></td><td> </td><td align="left" valign="top"> Other objects like rubbers and gadgets
3843
<tr><td align="left" valign="top"><a href="#Player-and-Inventory">4.1.5 Player and Inventory</a></td><td> </td><td align="left" valign="top"> Yin and Yang
3845
<tr><td align="left" valign="top"><a href="#Owned-Objects">4.1.6 Owned Objects</a></td><td> </td><td align="left" valign="top"> Objects temporary owned by others
3850
<a name="World_0027s-Shape-and-Coordinates"></a>
3851
<table cellpadding="1" cellspacing="1" border="0">
3852
<tr><td valign="middle" align="left">[<a href="#The-World_0027s-Structure" title="Previous section in reading order"> < </a>]</td>
3853
<td valign="middle" align="left">[<a href="#Object-Layers" title="Next section in reading order"> > </a>]</td>
3854
<td valign="middle" align="left"> </td>
3855
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Beginning of this chapter or previous chapter"> << </a>]</td>
3856
<td valign="middle" align="left">[<a href="#The-World_0027s-Structure" title="Up section"> Up </a>]</td>
3857
<td valign="middle" align="left">[<a href="#Lua-API" title="Next chapter"> >> </a>]</td>
3858
<td valign="middle" align="left"> </td>
3859
<td valign="middle" align="left"> </td>
3860
<td valign="middle" align="left"> </td>
3861
<td valign="middle" align="left"> </td>
3862
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
3863
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
3864
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
3865
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
3867
<a name="World_0027s-Shape-and-Coordinates-1"></a>
3868
<h3 class="subsection">4.1.1 World’s Shape and Coordinates</h3>
3870
<p>Having played a few levels you will have noticed that every screen shows
3871
quadratic tiles, 20 ones in the horizontal and 13 ones in the vertical direction.
3872
Even if it is difficult for a player to map together all rooms and screens of a
3873
large level, every level world has the shape of a rectangle in whole.
3874
Nevertheless some parts may never be visible to the player due to walls of
3875
stones or oceans of water.
3877
<a name="index-onescreener"></a>
3878
<p>On the creation of a world the level author has to give its size in measure of
3879
tiles. The given width and height of the world are fixed and cannot be changed
3880
later on. A common size is 20x13 for a <em>Onescreener</em>. But there are no limits.
3881
You can even build levels smaller than a screen. Note that for larger levels
3882
you have to take into account that one tile row or column is usually shared
3883
between two screens on scrolling. Thus a level of 2x2 screens has a size of
3884
39x25 tiles, a 3x4 screen level has 58x49 tiles,...
3886
<a name="index-position"></a>
3887
<p>Looking at the edges of all the tiles we get a grid that spans our world. We
3888
define the upper left corner of our world as the <em>position</em> {0, 0}. The first
3889
coordinate is the horizontal offset to the right, the second coordinate the
3890
vertical offset to the bottom. For a Onescreener level the tile in the lower
3891
right corner is located at position {19, 12}, whereas the corner itself is at
3892
the position {20, 13} (Note that this point is actually not part of the level
3895
<p>A position of an actor like the black marble needs to be given by two floating
3896
numbers as coordinates like {1.5, 2.5} for an actor positioned in the center
3897
of the tile that is one column right and two rows down of the upper left corner
3900
<a name="index-grid-position"></a>
3901
<p>But most objects like stones can only be placed on the fixed integral grid
3902
positions. Even if you try to put a stone on {1.5, 2.5} it will be put on
3903
the grid position {1, 2}. Thus we speak of a <em>grid position</em> if just the
3904
integral part is taken into account. You may note that a tile is positioned
3905
according to its upper left corner. Actually the upper and the left edge are
3906
part of a tile, whereas the right and lower edge belong to the neighbour tiles.
3908
<a name="index-tile"></a>
3909
<p>Finally let us look more precisely on the tile itself. On one grid position you
3910
may place a floor, an item, a stone and even several actors. The combination
3911
of all objects on one grid position is called a <em>tile</em>. It is a common
3912
technique to declare these object combinations once in so called tile
3913
definitions. As many grid positions share the same combination of objects these
3914
tiles can be reused very efficiently.
3917
<a name="Object-Layers"></a>
3918
<table cellpadding="1" cellspacing="1" border="0">
3919
<tr><td valign="middle" align="left">[<a href="#World_0027s-Shape-and-Coordinates" title="Previous section in reading order"> < </a>]</td>
3920
<td valign="middle" align="left">[<a href="#World-as-an-Object" title="Next section in reading order"> > </a>]</td>
3921
<td valign="middle" align="left"> </td>
3922
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Beginning of this chapter or previous chapter"> << </a>]</td>
3923
<td valign="middle" align="left">[<a href="#The-World_0027s-Structure" title="Up section"> Up </a>]</td>
3924
<td valign="middle" align="left">[<a href="#Lua-API" title="Next chapter"> >> </a>]</td>
3925
<td valign="middle" align="left"> </td>
3926
<td valign="middle" align="left"> </td>
3927
<td valign="middle" align="left"> </td>
3928
<td valign="middle" align="left"> </td>
3929
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
3930
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
3931
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
3932
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
3934
<a name="Object-Layers-1"></a>
3935
<h3 class="subsection">4.1.2 Object Layers</h3>
3937
<a name="index-layer"></a>
3938
<p>On every grid position you may set a floor, an item and a stone. But just one
3939
of each. If you set a second stone the first one will be replaced. Floor, item
3940
and stone have a unique physical arrangement with the floor always being below
3941
an item and a stone always being on top of the others. Thus we speak of three
3942
object <em>layers</em> - the floor layer, the item layer and the stone layer.
3944
<a name="index-default-floor"></a>
3945
<p>The floor layer has a unique prerequisite. Every grid position needs to be
3946
covered by a floor. You can define a default tile which contains a
3947
<em>default floor</em> that gets automatically set on every grid where you set
3948
no other floor. Even if you <em>kill</em> a floor, that means removing a floor
3949
without setting a replacement floor, a default floor will be set for you.
3951
<p>The floors provide two elementary features to the game: friction and adhesion.
3952
The friction slows down actors and the adhesion enables you to accelerate
3953
actors with your mouse. A floor may additionally cause a directed flat force
3954
that gives the user the feeling of a slope. And last but not least a floor
3955
may burn. A whole set of attributes let you control the details of the fire
3958
<p>The item layer is shared between items that an actor can pick up and items that
3959
are static. The first category are items like keys, banana, etc. Static items
3960
are bombs, landmines, triggers, hollows and items that will only be set by the
3961
system itself like laserbeams, fire animations, ash, etc. As only one item can
3962
be positioned of every grid position a marble can not drop an item on such a
3963
static item. This is the technical reason that you can not intercept a laser
3964
beam by dropping an item. But as an level author you are free to add any item
3965
you like to the initial grid tile.
3967
<p>The stone layer is straight forward. The level author can choose a stone out
3968
of the repository per grid. Of course most grid positions should be kept free
3969
for the actors to move around. Even if most levels have a stone wall at the
3970
border of the world that visually limits the area this is not mandatory. Without
3971
a stone wall the marbles will be bounced at the physically boundary of the world.
3973
<p>The actors live in another layer that is not grid based. The actors can be
3974
placed at any position. Actors that pass a stone will be displayed below the
3978
<a name="World-as-an-Object"></a>
3979
<table cellpadding="1" cellspacing="1" border="0">
3980
<tr><td valign="middle" align="left">[<a href="#Object-Layers" title="Previous section in reading order"> < </a>]</td>
3981
<td valign="middle" align="left">[<a href="#Unpositioned-Objects" title="Next section in reading order"> > </a>]</td>
3982
<td valign="middle" align="left"> </td>
3983
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Beginning of this chapter or previous chapter"> << </a>]</td>
3984
<td valign="middle" align="left">[<a href="#The-World_0027s-Structure" title="Up section"> Up </a>]</td>
3985
<td valign="middle" align="left">[<a href="#Lua-API" title="Next chapter"> >> </a>]</td>
3986
<td valign="middle" align="left"> </td>
3987
<td valign="middle" align="left"> </td>
3988
<td valign="middle" align="left"> </td>
3989
<td valign="middle" align="left"> </td>
3990
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
3991
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
3992
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
3993
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
3995
<a name="World-as-an-Object-1"></a>
3996
<h3 class="subsection">4.1.3 World as an Object</h3>
3998
<p>Friction, Brittleness, Modes and Co., Scrollmodes
4001
<a name="Unpositioned-Objects"></a>
4002
<table cellpadding="1" cellspacing="1" border="0">
4003
<tr><td valign="middle" align="left">[<a href="#World-as-an-Object" title="Previous section in reading order"> < </a>]</td>
4004
<td valign="middle" align="left">[<a href="#Player-and-Inventory" title="Next section in reading order"> > </a>]</td>
4005
<td valign="middle" align="left"> </td>
4006
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Beginning of this chapter or previous chapter"> << </a>]</td>
4007
<td valign="middle" align="left">[<a href="#The-World_0027s-Structure" title="Up section"> Up </a>]</td>
4008
<td valign="middle" align="left">[<a href="#Lua-API" title="Next chapter"> >> </a>]</td>
4009
<td valign="middle" align="left"> </td>
4010
<td valign="middle" align="left"> </td>
4011
<td valign="middle" align="left"> </td>
4012
<td valign="middle" align="left"> </td>
4013
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
4014
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
4015
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
4016
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
4018
<a name="Unpositioned-Objects-1"></a>
4019
<h3 class="subsection">4.1.4 Unpositioned Objects</h3>
4021
<p>You should be missing at least one object, that can neither be assigned to a
4022
single position nor to one of the above layers: rubberbands! In fact there are
4023
many <a href="#Other-Objects">Other Objects</a> besides floors, items, stones and actors that are
4024
unpositioned. Besides visible rubberbands and wires useful gadgets,
4025
that help in plug and play composition of levels, can be added to the world.
4027
<p>All these other objects are full objects concerning the following chapters. But
4028
you need to use the world’s <a href="#add">add</a> method to add them and you need to use
4029
<a href="#Object-Reference">Object Reference</a> or <a href="#Object-Naming">Object Naming</a> to access them later on, as no
4030
position driven access does exist.
4033
<a name="Player-and-Inventory"></a>
4034
<table cellpadding="1" cellspacing="1" border="0">
4035
<tr><td valign="middle" align="left">[<a href="#Unpositioned-Objects" title="Previous section in reading order"> < </a>]</td>
4036
<td valign="middle" align="left">[<a href="#Owned-Objects" title="Next section in reading order"> > </a>]</td>
4037
<td valign="middle" align="left"> </td>
4038
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Beginning of this chapter or previous chapter"> << </a>]</td>
4039
<td valign="middle" align="left">[<a href="#The-World_0027s-Structure" title="Up section"> Up </a>]</td>
4040
<td valign="middle" align="left">[<a href="#Lua-API" title="Next chapter"> >> </a>]</td>
4041
<td valign="middle" align="left"> </td>
4042
<td valign="middle" align="left"> </td>
4043
<td valign="middle" align="left"> </td>
4044
<td valign="middle" align="left"> </td>
4045
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
4046
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
4047
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
4048
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
4050
<a name="Player-and-Inventory-1"></a>
4051
<h3 class="subsection">4.1.5 Player and Inventory</h3>
4053
<p>Enigma is conceptionally a game for 2 players. But nevertheless it can be played
4054
by one user on a single computer by toggling the control between two virtual
4055
players. We do call these virtual player’s <code>YIN</code> and <code>YANG</code>, as the
4056
first player controls in most cases a black marble, whereas the second
4057
controls usually a white marble.
4059
<p>Each virtual player has its own inventory of up to 13 items. The leftmost
4060
item of the inventory is called ‘<samp>revealed</samp>’, as an item activation by a
4061
mouse click does activate this item and on actor hits this item may cause
4064
<p>The players inventories do exist outside of the rectangular world. Thus
4065
any item being part of a player’s inventory will report an invalid, out of world
4066
position, that evaluates on an ‘<samp>exists()</samp>’ request to ‘<samp>false</samp>’. You
4067
can add items directly to inventories by the advanced world method <a href="#add">add</a>.
4069
<p>Even though the actors are assigned to players they are quite independent
4070
objects that live in one of the <a href="#Object-Layers">Object Layers</a>. Their relationship to
4071
players is as follows:
4073
<p>Each virtual player can own and control one or several actors of any kind. That
4074
means player <code>YIN</code> is not limited to a black <a href="#ac_005fmarble">ac_marble</a>, but may as
4075
well control a white <a href="#ac_005fpearl">ac_pearl</a>, an <a href="#ac_005fhorse">ac_horse</a> or any other set of one
4076
or several arbitrary actors.
4078
<p>Ownership and control of actors are two distinct aspects. Ownership of an actor
4079
means that every item picked up by an actor ends up in the player’s inventory and
4080
items of the player’s inventory can act on all owned actors. The control of an
4081
actor by a player does just affect the movement of the actor by the users
4082
force input. An actor may be controlled by a player without parallel ownership.
4083
Another actor may be owned by a player without being controlled by it, thus
4084
being a passive actor that depends on being pushed by others. An actor may even
4085
be controlled by both players, but it can just be owned by one player or none.
4087
<p>The assignment of actors to players is solely configured by
4088
<a href="#Actor-Attributes">Actor Attributes</a>.
4090
<p>When a single user plays Enigma he starts with the control over the player
4091
<code>Yin</code>. By usage of yinyang objects he can toggle the control to the player
4092
<code>Yang</code> and back again. Items <a href="#it_005fyinyang">it_yinyang</a> are added automatically for
4093
network levels when played by a single user. They allow an arbitrary switch
4094
between the players. The stones <a href="#st_005fyinyang">st_yinyang</a> do limit the user’s ability to
4095
switch between the player control.
4099
<a name="Owned-Objects"></a>
4100
<table cellpadding="1" cellspacing="1" border="0">
4101
<tr><td valign="middle" align="left">[<a href="#Player-and-Inventory" title="Previous section in reading order"> < </a>]</td>
4102
<td valign="middle" align="left">[<a href="#Object-Description" title="Next section in reading order"> > </a>]</td>
4103
<td valign="middle" align="left"> </td>
4104
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Beginning of this chapter or previous chapter"> << </a>]</td>
4105
<td valign="middle" align="left">[<a href="#The-World_0027s-Structure" title="Up section"> Up </a>]</td>
4106
<td valign="middle" align="left">[<a href="#Lua-API" title="Next chapter"> >> </a>]</td>
4107
<td valign="middle" align="left"> </td>
4108
<td valign="middle" align="left"> </td>
4109
<td valign="middle" align="left"> </td>
4110
<td valign="middle" align="left"> </td>
4111
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
4112
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
4113
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
4114
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
4116
<a name="Owned-Objects-1"></a>
4117
<h3 class="subsection">4.1.6 Owned Objects</h3>
4119
<p>Besides objects owned by a player and being part of his inventory, objects can
4120
be temporary part of another object. The most obvious case is an item contained
4121
in an <a href="#it_005fbag">it_bag</a>. Other samples are two <a href="#st_005fshogun">st_shogun</a> stones pushed onto
4122
the same grid position or for a short fraction of time a stone swapping the
4123
position with an <a href="#st_005fswap">st_swap</a> or an <a href="#st_005fpull">st_pull</a>.
4125
<p>In any case the owned object will report the same position as the owner itself.
4126
Even in case of some items contained in a bag that is itself part of another bag
4127
all items will report the same position as the outmost bag. If this bag is part
4128
of an player’s inventory all items report an invalid position.
4130
<p>You can not directly enforce ownership by setting two objects to the same
4131
position as this standard operation will kill and replace the old object by the
4132
new one. Where possible, like in the case of an bag, you can add objects to
4133
a container object by usage of the world advanced method <a href="#add">add</a>.
4137
<a name="Object-Description"></a>
4138
<table cellpadding="1" cellspacing="1" border="0">
4139
<tr><td valign="middle" align="left">[<a href="#Owned-Objects" title="Previous section in reading order"> < </a>]</td>
4140
<td valign="middle" align="left">[<a href="#Object-Kind" title="Next section in reading order"> > </a>]</td>
4141
<td valign="middle" align="left"> </td>
4142
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Beginning of this chapter or previous chapter"> << </a>]</td>
4143
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Up section"> Up </a>]</td>
4144
<td valign="middle" align="left">[<a href="#Lua-API" title="Next chapter"> >> </a>]</td>
4145
<td valign="middle" align="left"> </td>
4146
<td valign="middle" align="left"> </td>
4147
<td valign="middle" align="left"> </td>
4148
<td valign="middle" align="left"> </td>
4149
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
4150
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
4151
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
4152
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
4154
<a name="Object-Description-1"></a>
4155
<h2 class="section">4.2 Object Description</h2>
4157
<p>Knowing where to place objects it is time to know how to select an object type,
4158
how to specify the details of the object and how to reference it later on.
4160
<table class="menu" border="0" cellspacing="0">
4161
<tr><td align="left" valign="top"><a href="#Object-Kind">4.2.1 Object Kind</a></td><td> </td><td align="left" valign="top">
4163
<tr><td align="left" valign="top"><a href="#Object-Reference">4.2.2 Object Reference</a></td><td> </td><td align="left" valign="top">
4165
<tr><td align="left" valign="top"><a href="#Object-Naming">4.2.3 Object Naming</a></td><td> </td><td align="left" valign="top">
4167
<tr><td align="left" valign="top"><a href="#Object-Attributes">4.2.4 Object Attributes</a></td><td> </td><td align="left" valign="top">
4172
<a name="Object-Kind"></a>
4173
<table cellpadding="1" cellspacing="1" border="0">
4174
<tr><td valign="middle" align="left">[<a href="#Object-Description" title="Previous section in reading order"> < </a>]</td>
4175
<td valign="middle" align="left">[<a href="#Object-Reference" title="Next section in reading order"> > </a>]</td>
4176
<td valign="middle" align="left"> </td>
4177
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Beginning of this chapter or previous chapter"> << </a>]</td>
4178
<td valign="middle" align="left">[<a href="#Object-Description" title="Up section"> Up </a>]</td>
4179
<td valign="middle" align="left">[<a href="#Lua-API" title="Next chapter"> >> </a>]</td>
4180
<td valign="middle" align="left"> </td>
4181
<td valign="middle" align="left"> </td>
4182
<td valign="middle" align="left"> </td>
4183
<td valign="middle" align="left"> </td>
4184
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
4185
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
4186
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
4187
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
4189
<a name="Object-Kind-1"></a>
4190
<h3 class="subsection">4.2.1 Object Kind</h3>
4192
<a name="index-abstract-kind"></a>
4193
<p>Up to now we have spoken about object kinds of floor ‘<samp>fl</samp>’, item
4194
‘<samp>it</samp>’, stone ‘<samp>st</samp>’ and actor ‘<samp>ac</samp>’. All these kinds are called
4195
<em>abstract</em>. You can check if a given object is of such a kind, but you can
4196
not instantiate an abstract kind.
4198
<p>To create an object you need to give a specific kind name like
4199
‘<samp>st_switch</samp>’. You will find all object kinds described in the chapters
4200
starting with <a href="#Floor-Objects">Floor Objects</a>. All these kind names with at least one
4201
underscore can be instantiated.
4203
<p>Most kinds provide subkinds like ‘<samp>st_switch_black</samp>’ and
4204
‘<samp>st_switch_white</samp>’. In case of the switches you get a color independent
4205
switch if you do not append a suffix. In other cases like ‘<samp>st_chess</samp>’
4206
the super kind will result in a default ‘<samp>st_chess_black</samp>’ as no colorless
4209
<p>If you request an object for its kind it will always return the most specific
4210
kind. This means that a fresh generated ‘<samp>st_chess</samp>’ returns the kind
4211
‘<samp>st_chess_black</samp>’, whereas an ‘<samp>st_switch</samp>’ reports its name
4214
<p>Objects can change their kind by level code statements or by user actions. You
4215
may set a color on a switch or a marble may cause a color change on a chess
4216
stone by hitting it with a revealed wand. The object will report the new kind on
4217
subsequent requests.
4219
<p>A few special object kinds do exist only for setting a new object. They are
4220
usually named with a suffix ‘<samp>_new</samp>’. These objects will never report their
4221
initial kind name but change to a standard kind immediately.
4223
<p>If you are not interested in the specific subkind you can check an object for
4224
conformity to any super kind. E.g. any switch stone of whatever color will
4225
return true if checked for ‘<samp>st_switch</samp>’.
4228
<a name="Object-Reference"></a>
4229
<table cellpadding="1" cellspacing="1" border="0">
4230
<tr><td valign="middle" align="left">[<a href="#Object-Kind" title="Previous section in reading order"> < </a>]</td>
4231
<td valign="middle" align="left">[<a href="#Object-Naming" title="Next section in reading order"> > </a>]</td>
4232
<td valign="middle" align="left"> </td>
4233
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Beginning of this chapter or previous chapter"> << </a>]</td>
4234
<td valign="middle" align="left">[<a href="#Object-Description" title="Up section"> Up </a>]</td>
4235
<td valign="middle" align="left">[<a href="#Lua-API" title="Next chapter"> >> </a>]</td>
4236
<td valign="middle" align="left"> </td>
4237
<td valign="middle" align="left"> </td>
4238
<td valign="middle" align="left"> </td>
4239
<td valign="middle" align="left"> </td>
4240
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
4241
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
4242
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
4243
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
4245
<a name="Object-Reference-1"></a>
4246
<h3 class="subsection">4.2.2 Object Reference</h3>
4248
<p>Having set objects to the various layers a level author sometimes has the need
4249
of referencing them later on. On callbacks the engine provides references to
4250
sender objects. But the author can request any grid object anytime by its
4253
<p>With an object reference, that is of a special Lua type ‘<samp>object</samp>’, you can
4254
request the objects on its current state and attributes, modify the
4255
object, send messages or perform any supported methods of the object.
4257
<p>Objects can be grouped for efficient handling of common operations on
4258
all affected objects. E.g. if you can send a message to a group of objects
4259
all objects will receive the message in turn. The sequence of several objects
4260
in a group is constant and guaranteed to be observed in processing common
4263
<p>As objects can seize to exist you have to be aware that the references are
4264
volatile, too. You can check every object reference for existence. But in many
4265
cases the validity of the reference is unimportant as Enigma 1.10 is very
4266
tolerant on invalid object references access. The operations will simply be
4267
ignored and requests will return default values.
4269
<p>As a general thumb rule you should request and keep object references just
4270
for the time of a local call. As long as your level code is processed in
4271
sequence without the running world simulation giving the player a chance to
4272
kill objects by marble actions, objects should seize to exist just due to your
4273
own direct statements.
4275
<p>To gain access to an object later on a subsequent call you can address it via
4276
two methods. First you can address it via its position. But as many objects are
4277
movable the position is not constant. Therefore you can address an object by
4278
name. See section <a href="#Object-Naming">Object Naming</a>.
4281
<a name="Object-Naming"></a>
4282
<table cellpadding="1" cellspacing="1" border="0">
4283
<tr><td valign="middle" align="left">[<a href="#Object-Reference" title="Previous section in reading order"> < </a>]</td>
4284
<td valign="middle" align="left">[<a href="#Object-Attributes" title="Next section in reading order"> > </a>]</td>
4285
<td valign="middle" align="left"> </td>
4286
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Beginning of this chapter or previous chapter"> << </a>]</td>
4287
<td valign="middle" align="left">[<a href="#Object-Description" title="Up section"> Up </a>]</td>
4288
<td valign="middle" align="left">[<a href="#Lua-API" title="Next chapter"> >> </a>]</td>
4289
<td valign="middle" align="left"> </td>
4290
<td valign="middle" align="left"> </td>
4291
<td valign="middle" align="left"> </td>
4292
<td valign="middle" align="left"> </td>
4293
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
4294
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
4295
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
4296
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
4298
<a name="Object-Naming-1"></a>
4299
<h3 class="subsection">4.2.3 Object Naming</h3>
4301
<p>For addressing objects on a long term valid basis every object can individually
4302
be tagged by a name. Assigning a name to an object is as simple as setting
4303
the attribute ‘<samp>name</samp>’ with a unique string on this object. Of course you
4304
can request an objects name by reading the attribute ‘<samp>name</samp>’.
4306
<p>The name is a string that should be made up of characters ‘<samp>a..z</samp>’,
4307
‘<samp>A..Z</samp>’, numbers ‘<samp>0..9</samp>’ and the underscore ‘<samp>_</samp>’. Other special
4308
characters are only allowed as far as they are explained in the following text.
4310
<a name="index-auto-naming"></a>
4311
<p>It is up to you to ensure unique names. Reuse of an already assigned name
4312
will unname the prior object and assign the name to the new object. To simplify
4313
the naming of larger groups of similar objects you can add the hash sign
4314
‘<samp>#</samp>’ as the last character to a name, e.g. ‘<samp>mydoor#</samp>’. This causes Enigma
4315
to add a unique random number to the given string. Thus an auto named object
4316
will never unname another prior auto named object. But if you delete an
4317
auto named object that has been named e.g. ‘<samp>mydoor#103284</samp>’ the number and
4318
the same name may be assigned to another that is created later on.
4320
<p>All named objects are registered by the <em>named object</em> repository. The API
4321
provides a variable ‘<samp>no</samp>’ that allows you to retrieve any named object, e.g.
4322
‘<samp>no["mylaser_a"]</samp>’. You get an <a href="#Object-Reference">Object Reference</a> or ‘<samp>nil</samp>’, if no
4323
object is registered by the given name.
4325
<p>As you can auto name groups of objects you are allowed to use the wildcard
4326
characters ‘<samp>?</samp>’ and ‘<samp>*</samp>’. The question mark replaces a single
4327
arbitrary character, the asterisk any number of arbitrary characters. E.g.
4328
‘<samp>no["mydoor#*"]</samp>’ retrieves all auto named ‘<samp>mydoor</samp>’ objects in a single
4331
<p>Many object attributes like ‘<samp>target</samp>’, ‘<samp>destination</samp>’ need object
4332
references to other objects. Besides a volatile <a href="#Object-Reference">Object Reference</a> you always
4333
can provide a name string as a long term valid object reference. If the attribute
4334
allows several objects to be given you can either give a group of object
4335
references, a table of object names or a object name with wildcards. Thus
4336
the string ‘<samp>"mydoor#*"</samp>’ is a valid target.
4338
<a name="index-nearest-object"></a>
4339
<p>Often switches are located near by their target object. As a major shortcut
4340
you can reference the nearest object out of a group by prefixing its name
4341
with an ‘<samp>@</samp>’ character.
4343
<table><tr><td> </td><td><pre class="example">ti["F"] = {"st_floppy", target="@door#*"}
4344
ti["D"] = {"st_blocker", name="door#"}
4345
</pre></td></tr></table>
4347
<p>With this tile declaration you can describe arbitrary number of floppy switches
4348
and nearby blocker doors in a world map all by the same two tile key characters.
4349
Every floppy switch will target the nearest blocker door. If two targets are
4350
given within the same distance the one located in the south will win. If the
4351
targets are additionally horizontally aligned the one located in east will win.
4352
In the rare case of objects located on the same position stones will precede
4353
items, floors and actors. The chosen target or destination depends just on the
4354
location of these objects and their type, but nothing else. Thus you can rely
4355
on a stable selection mechanism. <a href="#Nearest-Object-Clustering">Nearest Object Clustering</a> may help you in
4356
case of unexpected selected equidistant targets.
4358
<p>Auto naming and nearest object features help you to reduce the number
4359
of needed tile declarations. Resolvers like <a href="#res_002eautotile">res.autotile</a> and
4360
<a href="#res_002ecomposer">res.composer</a> are another feature for reducing the need of tile declarations.
4362
<p>Another unique feature of object names is their late on access evaluation. This
4363
allows you to reference an object prior to its existence. E.g. if you want to
4364
set two vortices each declaring the other one as its destination, object names
4365
are the favorite solution:
4367
<table><tr><td> </td><td><pre class="example">wo[{3,4}] = {"it_vortex", name="vortex1", destination="vortex2"}
4368
wo[{15,9}] = {"it_vortex", name="vortex2", destination="vortex1"}
4369
</pre></td></tr></table>
4371
<p>In general you will need to use object name references within any tile
4372
declarations as none of the referenced objects will yet exist at the point of
4375
<p>Objects do change over time. Doors do open, a chess may be recolored, a blocker
4376
stone may shrink to a blocker item. This means that the kind of the objects
4377
will change. But in many cases this means that the volatile object reference
4378
will brake, too. For the sake of the level authors the identity of the object
4379
will be transferred even if the reference gets invalid. And like the user
4380
attributes the name is part of the object identity. Thus if you name an
4381
<a href="#st_005fblocker">st_blocker</a> and it shrinks to an <a href="#it_005fblocker">it_blocker</a> you will retrieve this
4382
item if you ask the name object repository for the named object.
4384
<p>When an object like a door is completely killed, e.g. by an <a href="#it_005fseed">it_seed</a>,
4385
it can no longer be targeted by active objects like switches. A still existing
4386
reference to a no longer existing object does not cause problems on
4387
<a href="#Messages">Messages</a>. But what about the nearest object references? To avoid problems
4388
due to killed objects the standard nearest object reference with just one
4389
‘<samp>@</samp>’ as prefix are finalized on <a href="#Level-Initialization">Level Initialization</a>. This means that
4390
they get substituted by the unique name of the nearest of all existing objects
4391
at a point of time when all objects have been created, but before the user takes
4392
action and can incidentally kill a candidate.
4394
<p>But sometimes you may like a dynamic nearest object target or destination. One
4395
that is evaluated when it gets accessed. By prefixing a name with ‘<samp>@@</samp>’
4396
the reference will not get finalized on initialization but remains dynamic.
4398
<table><tr><td> </td><td><pre class="example">ti["c"] = {"it_coin_s", "magic#"}
4399
ti["v"] = {"it_vortex", destination="@@magic#*"}
4400
</pre></td></tr></table>
4402
<p>Setting three magic coins and one vortex in your map will teleport the marble
4403
to the grid of that coin that is nearest to the vortex at the moment of
4406
<p>To avoid unexpected problems with invalid object references a few critical
4407
objects are internally autonamed if the level author does not provide a name.
4408
But these unique names should never interfere with the user assigned object
4412
<a name="Object-Attributes"></a>
4413
<table cellpadding="1" cellspacing="1" border="0">
4414
<tr><td valign="middle" align="left">[<a href="#Object-Naming" title="Previous section in reading order"> < </a>]</td>
4415
<td valign="middle" align="left">[<a href="#Methods-of-Interaction" title="Next section in reading order"> > </a>]</td>
4416
<td valign="middle" align="left"> </td>
4417
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Beginning of this chapter or previous chapter"> << </a>]</td>
4418
<td valign="middle" align="left">[<a href="#Object-Description" title="Up section"> Up </a>]</td>
4419
<td valign="middle" align="left">[<a href="#Lua-API" title="Next chapter"> >> </a>]</td>
4420
<td valign="middle" align="left"> </td>
4421
<td valign="middle" align="left"> </td>
4422
<td valign="middle" align="left"> </td>
4423
<td valign="middle" align="left"> </td>
4424
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
4425
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
4426
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
4427
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
4429
<a name="Object-Attributes-1"></a>
4430
<h3 class="subsection">4.2.4 Object Attributes</h3>
4432
<p>One of the key concepts for the versatility of Enigma is possibility to fine
4433
tune objects by means of attributes. The level author is not limited to a fixed
4434
set of preconfigured objects as given by the object kind.
4436
<p>An attribute is a name, a string, with an assigned value. E.g.
4437
‘<samp>obj["inverse"]=true</samp>’ sets a single object attribute to a boolean value
4438
and ‘<samp>{"it_magnet", range=6.5}</samp>’ describes a magnet item with an initial set
4439
floating point attribute.
4441
<p>The scope of values is manifold. Most Lua types and a bunch of Enigma specific
4442
types can be assigned:
4448
</li><li> nil, DEFAULT
4455
<p>If we speak of a bool value we do it in the sense of Lua 5, that means with the
4456
possible values ‘<samp>true</samp>’ and ‘<samp>false</samp>’.
4458
<p>Many enumerated values like orientations and colors are covered by the integer
4461
<p>Of special interest is the value ‘<samp>nil</samp>’. Just a few attributes make direct
4462
use of the value ‘<samp>nil</samp>’, e.g. "color" on some objects. If you set an
4463
attribute to value ‘<samp>nil</samp>’ you do actually reset its value to the default
4464
value. E.g. if you set the attribute "orientation" of <a href="#st_005fboulder">st_boulder</a> to
4465
‘<samp>nil</samp>’ it will be set to its default, which is actually ‘<samp>NORTH</samp>’, an
4466
enumerated orientation value. A subsequent read of the attribute will return this
4467
value. Just those attributes that allow a nil value will ever return ‘<samp>nil</samp>’
4468
on a read access. As a direct consequence these attributes always default to
4469
‘<samp>nil</samp>’.
4471
<p>The authors of Lua did decide to prohibit the usage of ‘<samp>nil</samp>’ as a value
4472
in Lua tables. As we make heavy usage of anonymous tables as object
4473
declarations, you would not be able to set such attributes to ‘<samp>nil</samp>’. You
4474
would need to set such attributes explicitly. As a workaround we added a custom
4475
value ‘<samp>DEFAULT</samp>’ that can be used anywhere to set attributes - even within
4478
<table><tr><td> </td><td><pre class="example">mySwitch["color"] = nil
4479
mySwitch["color"] = DEFAULT
4480
wo[{3,6}] = {"ac_marble_black", player=DEFAULT}
4481
</pre></td></tr></table>
4483
<p>Note that ‘<samp>DEFAULT</samp>’ is not equal to ‘<samp>nil</samp>’. They are different values
4484
concerning Lua. They just result both in attributes reset to their default. If
4485
you request a nil valued attribute you will always receive the Lua value
4486
‘<samp>nil</samp>’. ‘<samp>DEFAULT</samp>’ will never be returned by the engine.
4488
<p>A group is an ordered set of <a href="#Object-Reference">Object Reference</a>s. As all contained objects
4489
must exist this value is seldom used for attributes in object declarations.
4490
But it is very useful for postprocessing of objects and for usage within
4491
<a href="#Callback-Function">Callback Function</a>s.
4493
<p>The most complex attribute value type are the tokens. Their purpose is the
4494
specification of one or many objects. As Enigma provides several means to do
4495
that this value type combines and mix all possibilities. A tokens value may
4496
be a string, representing an object name, an object reference, a group or a
4497
table with any of these basic types in any sequence and number. E.g. the
4498
following right sides are all valid tokens for the attribute ‘<samp>target</samp>’:
4500
<table><tr><td> </td><td><pre class="example">obj1["target"] = "mydoor"
4501
obj2["target"] = myobject
4502
obj3["target"] = grp(ojb1, obj2, obj3)
4503
obj4["target"] = {"mydoor", myobject}
4504
obj5["target"] = {grp(ojb1, obj2, obj3), "mydoor", myobject, "anotherdoor"}
4505
</pre></td></tr></table>
4507
<p>This versatility is useful to set tokens attributes independent of the given
4508
object reference types.
4510
<p>The chapter <a href="#Common-Attributes-and-Messages">Common Attributes and Messages</a> and its followers describe
4511
the existing object attributes in detail.
4513
<p>Besides these predefined attributes the level author can store own information
4514
on objects for later retrieval. Any name starting with an underscore ‘<samp>_</samp>’
4515
can be used for level specific purposes. This prefix has been chosen as the
4516
resulting names are still valid Lua names. Common usage patterns are switches
4517
or triggers with callback functions. These functions provide the sender, the
4518
switch or trigger, as an argument. If you attach the same function to number of
4519
senders you can store the necessary context information within the sender.
4521
<p>The internal engine uses object attributes as well. Such inaccessible attributes
4522
are named with a leading dollar sign ‘<samp>$</samp>’. They may appear in the documentation
4523
for C++ developers information. Level authors should ignore these attributes.
4525
<p>In some cases you may observe a different behaviour on setting an attribute
4526
within the object definition and setting the same attribute while the object
4527
is already on the grid. E.g. a door ‘<samp>{"st_door_h", state = OPEN}</samp>’ is
4528
opened from the very beginning. Whereas ‘<samp>mydoor["state"] = OPEN</samp>’ on a
4529
closed door will start opening the door. This takes a short time until the
4530
door is really open. You find more details on these as aspects in the section
4531
<a href="#The-Lifecycle-of-a-Level">The Lifecycle of a Level</a>.
4533
<p>If you ever look into the C++ code you may wonder about the implementation of
4534
attributes. They are not all directly stored in a map. Some of them are hold
4535
in object instance variables, other do not exist at all. Objects attributes
4536
are an abstract concept that unifies several internal features within a
4537
common simple API for level description code. Within the C++ engine subtle
4538
reasons like performance optimization forces a much more complex handling.
4542
<a name="Methods-of-Interaction"></a>
4543
<table cellpadding="1" cellspacing="1" border="0">
4544
<tr><td valign="middle" align="left">[<a href="#Object-Attributes" title="Previous section in reading order"> < </a>]</td>
4545
<td valign="middle" align="left">[<a href="#Messages" title="Next section in reading order"> > </a>]</td>
4546
<td valign="middle" align="left"> </td>
4547
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Beginning of this chapter or previous chapter"> << </a>]</td>
4548
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Up section"> Up </a>]</td>
4549
<td valign="middle" align="left">[<a href="#Lua-API" title="Next chapter"> >> </a>]</td>
4550
<td valign="middle" align="left"> </td>
4551
<td valign="middle" align="left"> </td>
4552
<td valign="middle" align="left"> </td>
4553
<td valign="middle" align="left"> </td>
4554
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
4555
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
4556
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
4557
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
4559
<a name="Methods-of-Interaction-1"></a>
4560
<h2 class="section">4.3 Methods of Interaction</h2>
4562
<p>Having looked at the description of the initial object composition of a
4563
level world we still need to understand how to configure the dynamic behaviour
4566
<table class="menu" border="0" cellspacing="0">
4567
<tr><td align="left" valign="top"><a href="#Messages">4.3.1 Messages</a></td><td> </td><td align="left" valign="top"> Asking objects to do something
4569
<tr><td align="left" valign="top"><a href="#Target-_002d-Action">4.3.2 Target - Action</a></td><td> </td><td align="left" valign="top"> Automatic reactions on an event
4571
<tr><td align="left" valign="top"><a href="#Callback-Function">4.3.3 Callback Function</a></td><td> </td><td align="left" valign="top"> Lua hooks to react on events
4573
<tr><td align="left" valign="top"><a href="#Object-State">4.3.4 Object State</a></td><td> </td><td align="left" valign="top">
4578
<a name="Messages"></a>
4579
<table cellpadding="1" cellspacing="1" border="0">
4580
<tr><td valign="middle" align="left">[<a href="#Methods-of-Interaction" title="Previous section in reading order"> < </a>]</td>
4581
<td valign="middle" align="left">[<a href="#Target-_002d-Action" title="Next section in reading order"> > </a>]</td>
4582
<td valign="middle" align="left"> </td>
4583
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Beginning of this chapter or previous chapter"> << </a>]</td>
4584
<td valign="middle" align="left">[<a href="#Methods-of-Interaction" title="Up section"> Up </a>]</td>
4585
<td valign="middle" align="left">[<a href="#Lua-API" title="Next chapter"> >> </a>]</td>
4586
<td valign="middle" align="left"> </td>
4587
<td valign="middle" align="left"> </td>
4588
<td valign="middle" align="left"> </td>
4589
<td valign="middle" align="left"> </td>
4590
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
4591
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
4592
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
4593
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
4595
<a name="Messages-1"></a>
4596
<h3 class="subsection">4.3.1 Messages</h3>
4598
<p>You can generate an initially open door by setting its attributes. But how
4599
can a switch stone open a door when it is hit by a marble? It simply sends
4600
a message ‘<samp>open</samp>’ to the door. Another switch may send a message
4601
‘<samp>on</samp>’ to a laser or ‘<samp>ignite</samp>’ to an <a href="#it_005fdynamite">it_dynamite</a>. On explosion
4602
the dynamite will in turn send automatically ‘<samp>ignite</samp>’ messages to the
4603
neighbour grid positions.
4605
<p>Messages are a simple universal function or from the receiver object and the
4606
Lua level authors point of view a "method". It takes two arguments - the message
4607
name, a string, and an optional value. E.g.
4609
<table><tr><td> </td><td><pre class="example">mydoor:message("open")
4610
myboulder:message("orientate", NORTH)
4613
myboulder:orientate(NORTH)
4614
</pre></td></tr></table>
4616
<p>The last two examples are a common abbreviation of the first two ones.
4618
<p>Messages may return a value. But most messages just return ‘<samp>nil</samp>’.
4620
<p>You can send any message to any object. Not supported messages are silently
4621
ignored. This is the reason that an exploding dynamite can send ‘<samp>ignite</samp>’
4622
messages to its neighbours without knowing if the objects can be ignited at all.
4623
Further on the dynamite has not to bother with the recipients of the messages.
4624
Due to messages the sender and the receiver objects are totally decoupled
4625
concerning the code base. Thus the level author just needs one method that
4626
allows sending arbitrary messages to arbitrary objects.
4628
<p>You should not send a message during initialization of the level. You configure
4629
the switch to send an ‘<samp>open</samp>’ message to the door by <a href="#Target-_002d-Action">Target - Action</a>.
4630
Within a Lua <a href="#Callback-Function">Callback Function</a> you may send messages during runtime to
4633
<p>All messages are listed and described in <a href="#Common-Messages">Common Messages</a> and the
4634
subsequent chapters.
4637
<a name="Target-_002d-Action"></a>
4638
<table cellpadding="1" cellspacing="1" border="0">
4639
<tr><td valign="middle" align="left">[<a href="#Messages" title="Previous section in reading order"> < </a>]</td>
4640
<td valign="middle" align="left">[<a href="#Callback-Function" title="Next section in reading order"> > </a>]</td>
4641
<td valign="middle" align="left"> </td>
4642
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Beginning of this chapter or previous chapter"> << </a>]</td>
4643
<td valign="middle" align="left">[<a href="#Methods-of-Interaction" title="Up section"> Up </a>]</td>
4644
<td valign="middle" align="left">[<a href="#Lua-API" title="Next chapter"> >> </a>]</td>
4645
<td valign="middle" align="left"> </td>
4646
<td valign="middle" align="left"> </td>
4647
<td valign="middle" align="left"> </td>
4648
<td valign="middle" align="left"> </td>
4649
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
4650
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
4651
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
4652
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
4654
<a name="Target-_002d-Action-1"></a>
4655
<h3 class="subsection">4.3.2 Target - Action</h3>
4657
<a name="index-target-action-paradigm"></a>
4658
<p>The "target action paradigm" is a classical object oriented method that allows
4659
you to easily plug together objects. One object is triggered by a function
4660
call or by an event like an actor hitting a stone, crossing over or applying an
4661
item. You simply plug this object to another target object and tell it to send
4662
an action message. Every time the first object is triggered it will send the
4663
message to its target.
4665
<p>You configure such a target action by setting the attributes ‘<samp>target</samp>’
4666
and ‘<samp>action</samp>’ on the first object. E.g. a for a switch stone that should
4667
open a door named ‘<samp>mydoor</samp>’ you can write:
4669
<table><tr><td> </td><td><pre class="example">{st_switch, target="mydoor", action="open"}
4670
</pre></td></tr></table>
4672
<p>Objects like the switch can be triggered on and off. Each time they will
4673
perform the action. If you would like the door to open and close in turn to
4674
the switch you need another action than ‘<samp>open</samp>’. The universal message for
4675
changing targets in their alternate states is ‘<samp>toggle</samp>’.
4677
<table><tr><td> </td><td><pre class="example">{st_switch, target="mydoor", action="toggle"}
4678
{st_switch, target="mydoor"}
4679
</pre></td></tr></table>
4681
<p>Now the door will toggle in sync with the switch between its open and closed
4682
state. The message <a href="#toggle">toggle</a> can be used quite independent of the target
4683
object. In fact it is the default action message. As a default you may omit
4684
the action in this case as it is demonstrated by the second example.
4686
<p>But keep in mind that toggling just changes the state of the target. If you
4687
start with a switch in off state and an open door, the door will close when
4688
the switch in turned on. They will not sync. If you configure two switches
4689
both targeting the same door, you will have no clear relationship between the
4690
switch states and the door.
4692
<p>As you remember messages can take a value. Action messages are no exception.
4693
Every object sends its actions with a value, usually a bool value. A switch
4694
sends a value ‘<samp>true</samp>’ if it just switched on, and a value ‘<samp>false</samp>’ if
4695
it just switched off. The appropriate message for the door would be the
4696
universal message ‘<samp>signal</samp>’:
4698
<table><tr><td> </td><td><pre class="example">{st_switch, target="mydoor", action="signal"}
4699
</pre></td></tr></table>
4701
<p>Now the door will open when the switch is turned on and close if the switch is
4704
<p>The message <a href="#signal">signal</a> takes an integer value of ‘<samp>0</samp>’ or ‘<samp>1</samp>’.
4705
Indeed the action value does not match. But in this as in many other cases
4706
the messages and values are designed in a way that they are automatically converted to
4707
the appropriated type. This compatibility is the basis for a seamless plugging
4710
<p>In many cases authors face the task of triggering two or more objects by a
4711
single object. ‘<samp>target</samp>’ and ‘<samp>action</samp>’ are both able to take
4712
multiple values. ‘<samp>target</samp>’ is of type tokens, as described in
4713
<a href="#Object-Attributes">Object Attributes</a>, whereas ‘<samp>action</samp>’ can be a string or a table
4716
<table><tr><td> </td><td><pre class="example">{st_switch, target={grp(ojb1, obj2, obj3), "mydoor", myobject, "anotherdoor"},
4717
action={"toggle", "open", "turn", "close"}}
4718
</pre></td></tr></table>
4720
<p>All objects described by a token receive the related message in the action
4721
table. If not enough messages are listed the default action ‘<samp>toggle</samp>’
4724
<p>Usually actions are performed at once. That is very important as the sequence
4725
of actions if often essential. Consider an <a href="#st_005fbox">st_box</a> being pushed from one
4726
<a href="#it_005ftrigger">it_trigger</a> to a neighboring one, or just an <a href="#ac_005fmarble">ac_marble</a> moving from
4727
the first trigger to the neighboring one. In both cases it is important that
4728
the first trigger is released prior the second one to be pressed. If this
4729
sequence gets mixed up both triggers could be pressed by a single object for
4730
a moment what could cause major shortcuts in a level. Thus all actions are
4731
performed in the logical sequence and in a stable, repeatable sequence without
4734
<p>Action may be simple or sometimes be very complex world rearrangements. But in
4735
any case you should <b>never ever</b> ‘<samp>kill</samp>’ the sender object. Killing the
4736
sender can cause application crashes! Be aware that even chained actions are not
4737
allowed to kill any prior sender object. Thus an <a href="#it_005ftrigger">it_trigger</a> that toggles
4738
an <a href="#st_005fswitch">st_switch</a> which in turn kills the first trigger is as critical as the
4739
trigger killing itself. We do generally discourage you to kill any object
4740
within its own action, as there is no dissolving animation and the WYSIWYG
4741
user paradigm is violated, too. But if there is urgent need for reasons of the
4742
level gaming logic you can perform the action in a secure, delayed mode. Just
4743
add the attribute <a href="#safeaction">safeaction</a> with value ‘<samp>true</samp>’ to the self killing
4744
sender object. The action will no longer be performed at once, but with a
4745
minimum delay in a manner that will never cause crashes. But be aware that
4746
even a minimum delay, which is still within the same timeslice, may disturb
4747
the sequence of actions. This can cause unexpected logical results on the other
4751
<a name="Callback-Function"></a>
4752
<table cellpadding="1" cellspacing="1" border="0">
4753
<tr><td valign="middle" align="left">[<a href="#Target-_002d-Action" title="Previous section in reading order"> < </a>]</td>
4754
<td valign="middle" align="left">[<a href="#Object-State" title="Next section in reading order"> > </a>]</td>
4755
<td valign="middle" align="left"> </td>
4756
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Beginning of this chapter or previous chapter"> << </a>]</td>
4757
<td valign="middle" align="left">[<a href="#Methods-of-Interaction" title="Up section"> Up </a>]</td>
4758
<td valign="middle" align="left">[<a href="#Lua-API" title="Next chapter"> >> </a>]</td>
4759
<td valign="middle" align="left"> </td>
4760
<td valign="middle" align="left"> </td>
4761
<td valign="middle" align="left"> </td>
4762
<td valign="middle" align="left"> </td>
4763
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
4764
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
4765
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
4766
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
4768
<a name="Callback-Function-1"></a>
4769
<h3 class="subsection">4.3.3 Callback Function</h3>
4771
<a name="index-Callback-Function"></a>
4772
<a name="index-callback-function"></a>
4773
<p>The most powerful extension to the <a href="#Target-_002d-Action">Target - Action</a> paradigm that you can
4774
think of are callback functions. Instead of a target object as receiver of an
4775
action message you can supply an own <a href="http://www.lua.org">Lua</a> function that
4776
is called whenever the action is triggered.
4778
<table><tr><td> </td><td><pre class="example">{"st_switch", target="my_magic", action="callback"}
4779
{"st_switch", target="my_magic"}
4780
</pre></td></tr></table>
4782
<p>The ‘<samp>target</samp>’ is the name of the function as a string. You may set the
4783
‘<samp>action</samp>’ to the string ‘<samp>"callback"</samp>’ for purpose of clarification,
4784
but it is not necessary as you see in the second example. The engine identifies
4785
the target to be of type of a Lua function and thus the action needs to be
4786
a callback. But you should note and remember that it is up to you to ensure that
4787
all object names and callback functions names are unique.
4789
<p>Let us look at the syntax of such a callback function
4791
<table><tr><td> </td><td><pre class="example">function my_magic(value, sender)
4792
if value == true then
4793
wo[sender + {1,0}] = {"it_coin_s"}
4796
</pre></td></tr></table>
4798
<p>The function is called with two arguments. The first one is a value. The type
4799
and contents depends on the issuing object, but in most cases it is a boolean
4800
value. You will find the value described in the objects description. The second
4801
argument is the reference of the calling object.
4803
<p>In the example we check if the <a href="#st_005fswitch">st_switch</a> did just toggle to ON. If this
4804
is given we take the switch, which is the sender, as a position and set a new
4805
<a href="#it_005fcoin">it_coin</a> to the grid east of it - a small bank automate that supplies money.
4807
<p>The <a href="#Advanced-Lua-Examples">Advanced Lua Examples</a> will show examples of real powerful callback
4808
functions with a line by line comment.
4810
<p>Further usage and aspects of callbacks in the level’s lifecycle are given in
4811
the section <a href="#Callbacks-and-Load-Balancing">Callbacks and Load Balancing</a>.
4814
<a name="Object-State"></a>
4815
<table cellpadding="1" cellspacing="1" border="0">
4816
<tr><td valign="middle" align="left">[<a href="#Callback-Function" title="Previous section in reading order"> < </a>]</td>
4817
<td valign="middle" align="left">[<a href="#The-Lifecycle-of-a-Level" title="Next section in reading order"> > </a>]</td>
4818
<td valign="middle" align="left"> </td>
4819
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Beginning of this chapter or previous chapter"> << </a>]</td>
4820
<td valign="middle" align="left">[<a href="#Methods-of-Interaction" title="Up section"> Up </a>]</td>
4821
<td valign="middle" align="left">[<a href="#Lua-API" title="Next chapter"> >> </a>]</td>
4822
<td valign="middle" align="left"> </td>
4823
<td valign="middle" align="left"> </td>
4824
<td valign="middle" align="left"> </td>
4825
<td valign="middle" align="left"> </td>
4826
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
4827
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
4828
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
4829
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
4831
<a name="Object-State-1"></a>
4832
<h3 class="subsection">4.3.4 Object State</h3>
4834
<p>A key concept for the ability to plug together objects like switches and doors
4835
are the very simple state machines of these objects. Most objects are described
4836
by simple machines with just 2 states like ‘<samp>ON</samp>’,‘<samp>OFF</samp>’ or ‘<samp>OPEN</samp>’,
4837
‘<samp>CLOSED</samp>’. These objects can be plugged together by just few common messages.
4838
Further on these simple state machines are suited to the gamers who do not want
4839
to read manuals but want to explore the objects by playing with just a few tests.
4841
<p>Even though states are usually named by appropriate uppercase names like above,
4842
the states are integer numbers starting with ‘<samp>0</samp>’ usually related to the
4843
default state. But some objects use another mapping due to historic reasons.
4844
E.g. states that are orientation related use the state ‘<samp>3</samp>’ representing
4845
‘<samp>NORTH</samp>’ usually as the default and number the orientations clockwise down to
4846
‘<samp>0</samp>’ representing ‘<samp>WEST</samp>’.
4848
<p>In most cases it is sufficient to perform a state independent common action
4849
like <a href="#toggle">toggle</a>. Even two stated objects can be easily synchronized by the
4850
standard action <a href="#signal">signal</a>. But sometimes you may want to perform very state
4851
specific actions. Let us look how this can be done.
4853
<p>E.g. let us take an <a href="#st_005ffourswitch">st_fourswitch</a>, that has four states, and two
4854
<a href="#st_005flaser">st_laser</a> which should be switched on and off. Both lasers should emit
4855
their beams while the fourswitch is in 3 of its states. But one of them should
4856
be off just while the fourswitch is in the ‘<samp>EAST</samp>’ state and the other
4857
should be off just while the fourswitch is in the ‘<samp>WEST</samp>’ state.
4858
This can be done by usage of state dependent target and actions:
4860
<table><tr><td> </td><td><pre class="example">{st_fourswitch, target_3="laser#2", action_3="on",
4861
target_2="laser#1", action_2="off",
4862
target_1="laser#1", action_1="on",
4863
target_0="laser#2", action_0="off"}
4864
</pre></td></tr></table>
4866
<p>Adding a number as suffix to ‘<samp>target_</samp>’ and ‘<samp>action_</samp>’ gives you
4867
special target and action attributes that will take precedence over the general
4868
‘<samp>target</samp>’ and ‘<samp>action</samp>’ attributes if the state value equals the suffix
4869
number. An alternative declaration would be:
4871
<table><tr><td> </td><td><pre class="example">{st_fourswitch, target={"laser#1", "laser#2"},
4872
action_3={"nop", "on"},
4873
action_2={"off", "nop"},
4874
action_1={"on", "nop"},
4875
action_0={"nop", "off"}}
4876
</pre></td></tr></table>
4878
<p>Here we do address both lasers in all states. But one of them receives a
4879
<a href="#nop">nop</a> message that stands for "no operation". In fact this message will
4880
never be send. It is just a dummy message that we have need of for syntax
4881
reasons in the case above.
4883
<p>Another example are two <a href="#it_005ftrigger">it_trigger</a> that switch a laser. An object pressing
4884
the first trigger should switch the laser on, an object pressing the second
4885
trigger should switch it off. But a trigger is two stated and performs one
4886
action on being pressed and another on being released. Thus we want to block
4887
the actions on trigger release events:
4889
<table><tr><td> </td><td><pre class="example">{it_trigger, name="on_trigger", target="laser#1", action_1="on", action_0="nop"}
4890
{it_trigger, name="off_trigger", target="laser#1", action_1="off", action_0="nop"}
4891
</pre></td></tr></table>
4893
<p>The blocking of ‘<samp>action_0</samp>’ is essential and can not be omitted, as
4894
otherwise the default action would be performed. This would be a ‘<samp>toggle</samp>’
4895
message that would switch the laser.
4897
<p>As this useful default mechanism can sometimes be annoying you can switch off
4898
the default message by setting the <a href="#nopaction">nopaction</a> attribute to true.
4900
<table><tr><td> </td><td><pre class="example">{it_trigger, name="on_trigger", target="laser#1", action_1="on", nopaction=true}
4901
{it_trigger, name="off_trigger", target="laser#1", action_1="off", nopaction=true}
4902
</pre></td></tr></table>
4904
<p>When an objects leaves a trigger the state ‘<samp>0</samp>’ action will be performed.
4905
As neither ‘<samp>action_0</samp>’ nor ‘<samp>action</samp>’ is specified the default action
4906
will be performed, which is now ‘<samp>nop</samp>’.
4908
<p>If you ever look into the C++ code you may note that many objects do have much
4909
more complex state machines than you expect from the level authors and gamers
4910
view. This is due to running animations, timers, etc.. The C++ objects map their
4911
complex internal state set to the much simpler external state set. This is the
4912
main reason that some features that level authors request can not be provided
4917
<a name="The-Lifecycle-of-a-Level"></a>
4918
<table cellpadding="1" cellspacing="1" border="0">
4919
<tr><td valign="middle" align="left">[<a href="#Object-State" title="Previous section in reading order"> < </a>]</td>
4920
<td valign="middle" align="left">[<a href="#Library-Preloading" title="Next section in reading order"> > </a>]</td>
4921
<td valign="middle" align="left"> </td>
4922
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Beginning of this chapter or previous chapter"> << </a>]</td>
4923
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Up section"> Up </a>]</td>
4924
<td valign="middle" align="left">[<a href="#Lua-API" title="Next chapter"> >> </a>]</td>
4925
<td valign="middle" align="left"> </td>
4926
<td valign="middle" align="left"> </td>
4927
<td valign="middle" align="left"> </td>
4928
<td valign="middle" align="left"> </td>
4929
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
4930
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
4931
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
4932
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
4934
<a name="The-Lifecycle-of-a-Level-1"></a>
4935
<h2 class="section">4.4 The Lifecycle of a Level</h2>
4939
Levelloading, Initialization, Runtime Callbacks,
4940
Ending Conditions - the mystery of Oxyds and Meditation
4941
</p><table class="menu" border="0" cellspacing="0">
4942
<tr><td align="left" valign="top"><a href="#Library-Preloading">4.4.1 Library Preloading</a></td><td> </td><td align="left" valign="top">
4944
<tr><td align="left" valign="top"><a href="#Snapshot-Principle">4.4.2 Snapshot Principle</a></td><td> </td><td align="left" valign="top">
4946
<tr><td align="left" valign="top"><a href="#Level-Initialization">4.4.3 Level Initialization</a></td><td> </td><td align="left" valign="top">
4948
<tr><td align="left" valign="top"><a href="#Object-Transformation">4.4.4 Object Transformation</a></td><td> </td><td align="left" valign="top"> Identity Transfer in case of Transformations
4950
<tr><td align="left" valign="top"><a href="#Named-Positions">4.4.5 Named Positions</a></td><td> </td><td align="left" valign="top"> Positions as successors of killed Floors
4952
<tr><td align="left" valign="top"><a href="#Callbacks-and-Load-Balancing">4.4.6 Callbacks and Load Balancing</a></td><td> </td><td align="left" valign="top">
4954
<tr><td align="left" valign="top"><a href="#Level-Restart">4.4.7 Level Restart</a></td><td> </td><td align="left" valign="top">
4956
<tr><td align="left" valign="top"><a href="#Ending-Conditions">4.4.8 Ending Conditions</a></td><td> </td><td align="left" valign="top"> Meditation vs. Oxydpairs
4961
<a name="Library-Preloading"></a>
4962
<table cellpadding="1" cellspacing="1" border="0">
4963
<tr><td valign="middle" align="left">[<a href="#The-Lifecycle-of-a-Level" title="Previous section in reading order"> < </a>]</td>
4964
<td valign="middle" align="left">[<a href="#Snapshot-Principle" title="Next section in reading order"> > </a>]</td>
4965
<td valign="middle" align="left"> </td>
4966
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Beginning of this chapter or previous chapter"> << </a>]</td>
4967
<td valign="middle" align="left">[<a href="#The-Lifecycle-of-a-Level" title="Up section"> Up </a>]</td>
4968
<td valign="middle" align="left">[<a href="#Lua-API" title="Next chapter"> >> </a>]</td>
4969
<td valign="middle" align="left"> </td>
4970
<td valign="middle" align="left"> </td>
4971
<td valign="middle" align="left"> </td>
4972
<td valign="middle" align="left"> </td>
4973
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
4974
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
4975
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
4976
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
4978
<a name="Library-Preloading-1"></a>
4979
<h3 class="subsection">4.4.1 Library Preloading</h3>
4982
<a name="Snapshot-Principle"></a>
4983
<table cellpadding="1" cellspacing="1" border="0">
4984
<tr><td valign="middle" align="left">[<a href="#Library-Preloading" title="Previous section in reading order"> < </a>]</td>
4985
<td valign="middle" align="left">[<a href="#Level-Initialization" title="Next section in reading order"> > </a>]</td>
4986
<td valign="middle" align="left"> </td>
4987
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Beginning of this chapter or previous chapter"> << </a>]</td>
4988
<td valign="middle" align="left">[<a href="#The-Lifecycle-of-a-Level" title="Up section"> Up </a>]</td>
4989
<td valign="middle" align="left">[<a href="#Lua-API" title="Next chapter"> >> </a>]</td>
4990
<td valign="middle" align="left"> </td>
4991
<td valign="middle" align="left"> </td>
4992
<td valign="middle" align="left"> </td>
4993
<td valign="middle" align="left"> </td>
4994
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
4995
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
4996
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
4997
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
4999
<a name="Snapshot-Principle-1"></a>
5000
<h3 class="subsection">4.4.2 Snapshot Principle</h3>
5002
<p>Most levels contain objects that take influence on each other. A switch might
5003
toggle a door by <a href="#Target-_002d-Action">Target - Action</a>, marbles may press a trigger, or a laser
5004
might activate a laserswitch or transform a hammer into a sword. Of course it is
5005
essential to know how to set up such objects to get the desired start
5006
configuration without the objects changing unexpected on level initialization.
5008
<p>The snapshot principle is a simple thumb rule that you can rely on in describing
5009
the level as a snapshot of object at a given point of time. Every object has just
5010
to be configured as it should be at the given time. All interactions that would
5011
take place in a running game do not take place while setting objects during
5014
<p>E.g. if a switch toggles a door and the switch should be initially on and the
5015
door should be initially open you describe the object with exactly these
5018
<table><tr><td> </td><td><pre class="example">{"st_switch", target="mydoor", state=ON}
5019
{"st_door", name="mydoor", state=OPEN}
5020
</pre></td></tr></table>
5022
<p>A laser that is initially on that illuminates a laserswitch needs an initially
5023
active laserswitch. But of course no attribute exists that would allow you to
5024
set a laserswitch active. The snapshot principle includes the rule that all
5025
internal states are updated without external actions. This means that the
5026
laserswitch will show up active without causing an action on its target.
5028
<table><tr><td> </td><td><pre class="example">{"st_laser", state=ON}
5029
{"st_laserswitch", target="mydoor"}
5030
</pre></td></tr></table>
5032
<p>What about objects that transform on laser light. The snapshot principle keeps
5033
the object from transforming during initialization. A hammer that is set in
5034
an initially existing laser beam will not transform to a sword. It remains as
5035
a hammer that will transform on any subsequent new laser light during the game.
5037
<p>Of course it cannot be allowed to describe impossible initial level states.
5038
Objects like dynamite do explode immediately on a laser beam hit. Thus a
5039
dynamite item in an initial laser beam is a fault that causes an exception.
5040
The snapshot principle forces you in this case to set an explosion item instead
5043
<p>Some objects do process internal state transformations that cannot be configured
5044
by attributes. But some of these states may be of interest on describing a
5045
snapshot of a level. Where possible a special object subkind exists with a suffix
5046
of ‘<samp>_new</samp>’. These objects can be used in the initial level description to
5047
set objects in special initial states. E.g. <a href="#it_005fblocker">it_blocker</a> provides such a
5048
special subkind. Note that these objects will never report their initial
5049
subkind on a kind request as they come into existence as a standard object.
5053
<a name="Level-Initialization"></a>
5054
<table cellpadding="1" cellspacing="1" border="0">
5055
<tr><td valign="middle" align="left">[<a href="#Snapshot-Principle" title="Previous section in reading order"> < </a>]</td>
5056
<td valign="middle" align="left">[<a href="#Object-Transformation" title="Next section in reading order"> > </a>]</td>
5057
<td valign="middle" align="left"> </td>
5058
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Beginning of this chapter or previous chapter"> << </a>]</td>
5059
<td valign="middle" align="left">[<a href="#The-Lifecycle-of-a-Level" title="Up section"> Up </a>]</td>
5060
<td valign="middle" align="left">[<a href="#Lua-API" title="Next chapter"> >> </a>]</td>
5061
<td valign="middle" align="left"> </td>
5062
<td valign="middle" align="left"> </td>
5063
<td valign="middle" align="left"> </td>
5064
<td valign="middle" align="left"> </td>
5065
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
5066
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
5067
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
5068
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
5070
<a name="Level-Initialization-1"></a>
5071
<h3 class="subsection">4.4.3 Level Initialization</h3>
5073
<p>Knowing what has been preloaded and knowing exactly which objects we have to
5074
set in which state, it is time to have a look on how your level code is
5075
processed. The main issue is to guarantee that all parts referenced have been
5076
set up properly in advance.
5078
<p>Prior execution of the first line of your code the world exists just as an
5079
abstract handle, but not as grid array able to accept objects. Thus the first
5080
lines of code should set up all <a href="#Global-Attributes">Global Attributes</a> deviating from their
5081
defaults. Even though many attributes can be set or changes later on and even
5082
on runtime, there are some attributes like <a href="#ProvideExtralifes">ProvideExtralifes</a> that take
5083
only effect if being set prior world creation, or others like <a href="#MaxOxydColor">MaxOxydColor</a>
5084
that must be set prior their first usage. Our recommendation is to collect all
5085
global attribute settings at the very beginning of the level.
5087
<p>The second section of your level code should be the declaration of tiles. Being
5088
just declarations these code lines do not set objects to the world. They just
5089
depend on global attributes and may reference each other. Listing them all
5090
together in a code section makes it easy to maintain the overview and to avoid
5091
dependency conflicts.
5093
<p>If you use <a href="#Resolvers">Resolvers</a> you should put their declarations in the next code
5094
section as they may refer to tiles and global attributes and need to be set up
5095
prior the world creation.
5097
<p>The central statement of every level is the <a href="#World-Creation">World Creation</a>. It sets up
5098
the world to its size and sets initial objects according to the given tile
5099
declarations to the grid array. While you are free to add and change any of
5100
these objects later on the size of the world is fixed and can not be changed.
5102
<p>Thus subsequent code lines should <a href="#add">add</a> other objects, draw additional
5103
maps of objects and finalize some objects. The most common statement for such
5104
a finalization is the <a href="#shuffleOxyd">shuffleOxyd</a> method. It needs to know all
5105
<a href="#st_005foxyd">st_oxyd</a> to be able to color and shuffle them. Another finalization may
5106
be a custom rendering of a maze, that extracts the maze shape out of the
5107
level map (see section <a href="#res_002emaze">res.maze</a>).
5109
<p>This post world creation code may well have the need of loops or even some
5110
local used functions that need to be integrated to precede. Please keep such
5111
functions near by their usage and within the same code section.
5113
<p>Another set of functions that you may want to add are <a href="#Callbacks-and-Load-Balancing">Callbacks and Load Balancing</a>. We recommend to append these functions as the last section as they
5114
are not called within the level initialization itself.
5116
<p>But there is one very special exception. The <code>postinit()</code> callback is
5117
called after the level initialization code has been processed and all subsequent
5118
engine internal initialization has been finished. If this function is present
5119
in a level it gets executed directly before the first mouse movement event gets
5120
processed. Thus you can rely within this function that all objects are set up
5121
in their final state. If you have need of such a postinit callback you should
5122
put it after all the level intialization code and in front of other callback
5123
functions that will be executed on subsequent events.
5126
<a name="Object-Transformation"></a>
5127
<table cellpadding="1" cellspacing="1" border="0">
5128
<tr><td valign="middle" align="left">[<a href="#Level-Initialization" title="Previous section in reading order"> < </a>]</td>
5129
<td valign="middle" align="left">[<a href="#Named-Positions" title="Next section in reading order"> > </a>]</td>
5130
<td valign="middle" align="left"> </td>
5131
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Beginning of this chapter or previous chapter"> << </a>]</td>
5132
<td valign="middle" align="left">[<a href="#The-Lifecycle-of-a-Level" title="Up section"> Up </a>]</td>
5133
<td valign="middle" align="left">[<a href="#Lua-API" title="Next chapter"> >> </a>]</td>
5134
<td valign="middle" align="left"> </td>
5135
<td valign="middle" align="left"> </td>
5136
<td valign="middle" align="left"> </td>
5137
<td valign="middle" align="left"> </td>
5138
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
5139
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
5140
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
5141
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
5143
<a name="Object-Transformation-1"></a>
5144
<h3 class="subsection">4.4.4 Object Transformation</h3>
5146
<p>During runtime some Enigma objects do transform into other successor objects,
5147
like an <a href="#st_005fblocker">st_blocker</a>/<a href="#it_005fblocker">it_blocker</a>, an <a href="#st_005fbrake">st_brake</a>/<a href="#it_005fbrake">it_brake</a>,
5148
an <a href="#it_005frubberband">it_rubberband</a>/<a href="#ot_005frubberband">ot_rubberband</a>, an <a href="#it_005fhammer">it_hammer</a>/<a href="#it_005fsword">it_sword</a>,...
5150
<p>Even though the successor object may have other attributes, some attributes and
5151
especially any user attributes should be maintained. In fact the objects name,
5152
its target and action attributes and all attributes starting with an underscore
5153
‘<samp>_</samp>’, the user attributes, are transferred to the successor object. Thus you
5154
can rely on the successor to message the same target and you can it access it
5158
<a name="Named-Positions"></a>
5159
<table cellpadding="1" cellspacing="1" border="0">
5160
<tr><td valign="middle" align="left">[<a href="#Object-Transformation" title="Previous section in reading order"> < </a>]</td>
5161
<td valign="middle" align="left">[<a href="#Callbacks-and-Load-Balancing" title="Next section in reading order"> > </a>]</td>
5162
<td valign="middle" align="left"> </td>
5163
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Beginning of this chapter or previous chapter"> << </a>]</td>
5164
<td valign="middle" align="left">[<a href="#The-Lifecycle-of-a-Level" title="Up section"> Up </a>]</td>
5165
<td valign="middle" align="left">[<a href="#Lua-API" title="Next chapter"> >> </a>]</td>
5166
<td valign="middle" align="left"> </td>
5167
<td valign="middle" align="left"> </td>
5168
<td valign="middle" align="left"> </td>
5169
<td valign="middle" align="left"> </td>
5170
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
5171
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
5172
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
5173
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
5175
<a name="Named-Positions-1"></a>
5176
<h3 class="subsection">4.4.5 Named Positions</h3>
5178
<p>Many stones are movable and if the user can not push them, most may still be
5179
swapped. Items may be picked up by actors or be killed in a burning fire. Thus
5180
in most cases it is preferable to mark anchors or shapes in the floor. On every
5181
grid position a floor object is guaranteed and they are much more stable than
5182
other objects. But nevertheless a user may push an <a href="#st_005fbox">st_box</a>, an
5183
<a href="#st_005fpuzzle">st_puzzle</a> or other floor building stone on an <a href="#fl_005fwater">fl_water</a> or
5184
<a href="#fl_005fabyss">fl_abyss</a>. Furthermore a user may drop and ignite an <a href="#it_005fbomb">it_bomb</a> that
5185
destructs the floor leaving a new <a href="#fl_005fabyss">fl_abyss</a>. In all these cases you may
5186
loose a named anchor or an essential part of a named grid area accessible as
5189
<p>Thus for every named floor that gets killed its position is stored in a
5190
repository under its name. You just need to retrieve the named positions
5191
instead of the named objects if you want to get all affected floor positions.
5193
<table><tr><td> </td><td><pre class="example">ti["~"] = {"fl_water", "water#"}
5196
wo[po["water#*"]] = {"it_cherry"}
5198
</pre></td></tr></table>
5200
<p>Note that a request for a named position will include all positions of matching
5201
named objects as well as those named positions derived from killed floors.
5204
<a name="Callbacks-and-Load-Balancing"></a>
5205
<table cellpadding="1" cellspacing="1" border="0">
5206
<tr><td valign="middle" align="left">[<a href="#Named-Positions" title="Previous section in reading order"> < </a>]</td>
5207
<td valign="middle" align="left">[<a href="#Level-Restart" title="Next section in reading order"> > </a>]</td>
5208
<td valign="middle" align="left"> </td>
5209
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Beginning of this chapter or previous chapter"> << </a>]</td>
5210
<td valign="middle" align="left">[<a href="#The-Lifecycle-of-a-Level" title="Up section"> Up </a>]</td>
5211
<td valign="middle" align="left">[<a href="#Lua-API" title="Next chapter"> >> </a>]</td>
5212
<td valign="middle" align="left"> </td>
5213
<td valign="middle" align="left"> </td>
5214
<td valign="middle" align="left"> </td>
5215
<td valign="middle" align="left"> </td>
5216
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
5217
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
5218
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
5219
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
5221
<a name="Callbacks-and-Load-Balancing-1"></a>
5222
<h3 class="subsection">4.4.6 Callbacks and Load Balancing</h3>
5224
<p>The most flexible feature for a level author to establish an unique behaviour
5225
of his level are <a href="#Callback-Function">Callback Function</a>s.
5227
<p><a href="#Target-_002d-Action">Target - Action</a> kill warning
5228
<a href="#ot_005ftimer">ot_timer</a>
5230
<p>global and res.*.function
5233
<a name="Level-Restart"></a>
5234
<table cellpadding="1" cellspacing="1" border="0">
5235
<tr><td valign="middle" align="left">[<a href="#Callbacks-and-Load-Balancing" title="Previous section in reading order"> < </a>]</td>
5236
<td valign="middle" align="left">[<a href="#Ending-Conditions" title="Next section in reading order"> > </a>]</td>
5237
<td valign="middle" align="left"> </td>
5238
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Beginning of this chapter or previous chapter"> << </a>]</td>
5239
<td valign="middle" align="left">[<a href="#The-Lifecycle-of-a-Level" title="Up section"> Up </a>]</td>
5240
<td valign="middle" align="left">[<a href="#Lua-API" title="Next chapter"> >> </a>]</td>
5241
<td valign="middle" align="left"> </td>
5242
<td valign="middle" align="left"> </td>
5243
<td valign="middle" align="left"> </td>
5244
<td valign="middle" align="left"> </td>
5245
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
5246
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
5247
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
5248
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
5250
<a name="Level-Restart-1"></a>
5251
<h3 class="subsection">4.4.7 Level Restart</h3>
5254
<a name="Ending-Conditions"></a>
5255
<table cellpadding="1" cellspacing="1" border="0">
5256
<tr><td valign="middle" align="left">[<a href="#Level-Restart" title="Previous section in reading order"> < </a>]</td>
5257
<td valign="middle" align="left">[<a href="#Lua-API" title="Next section in reading order"> > </a>]</td>
5258
<td valign="middle" align="left"> </td>
5259
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Beginning of this chapter or previous chapter"> << </a>]</td>
5260
<td valign="middle" align="left">[<a href="#The-Lifecycle-of-a-Level" title="Up section"> Up </a>]</td>
5261
<td valign="middle" align="left">[<a href="#Lua-API" title="Next chapter"> >> </a>]</td>
5262
<td valign="middle" align="left"> </td>
5263
<td valign="middle" align="left"> </td>
5264
<td valign="middle" align="left"> </td>
5265
<td valign="middle" align="left"> </td>
5266
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
5267
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
5268
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
5269
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
5271
<a name="Ending-Conditions-1"></a>
5272
<h3 class="subsection">4.4.8 Ending Conditions</h3>
5274
<p>Two essential questions remain to be answered. When and under which conditions
5275
is a level successfully finished. How do I declare a level as being a
5276
meditation level in opposite to a standard oxyd pair opening level.
5278
<p>In fact there is no ’meditation’ flag, neither within the XML Level
5279
<a href="#Info-metadata">Info metadata</a> nor as one of the <a href="#Global-Attributes">Global Attributes</a>. That means there
5280
is no formal distinction between both level ’types’. But there are two different
5281
types of ending conditions. Both are checked permanently and whichever
5282
is fulfilled first wins. Thus Enigma allows you to write true hybrid levels
5283
that provide <a href="#st_005foxyd">st_oxyd</a> as well as <a href="#it_005fmeditation">it_meditation</a> allowing the user
5284
to solve the level by two totally different means.
5286
<p>The main way to end the game is to fulfill the oxyd pair opening condition:
5288
<p>The game is over when the user succeeds in opening all regular colored
5289
<a href="#st_005foxyd">st_oxyd</a>s by pairs.
5291
<p>This implies that there is at least one pair of regular colored oxyd stones
5292
and that all oxyd colors appear in even number of instances. Whereas you will
5293
always add at least one pair of oxyds for a standard level, you may simply loose
5294
track of the number of instances. Therefore the engine will permanently check at
5295
runtime that every oxyd color appears in an even number of instances. Any
5296
violation causes an error. In case you will add or delete oxyd stones you
5297
need to disable this checking by setting the global attribute
5298
<a href="#AllowSingleOxyds">AllowSingleOxyds</a> to <code>true</code>. Now it is your reponsibility as an
5299
author to ensure that the level remains solvable by adding or removing pairs
5302
<p>The second way to end the game is to fulfill the meditation condition:
5304
<p>All <a href="#ac_005fpearl">ac_pearl</a>s must reside for at least one second within the uneven area
5305
of an <a href="#it_005fmeditation">it_meditation</a>, all <a href="#it_005fmeditation">it_meditation</a> marked as <code>essential</code>
5306
must be occupied and the number of <a href="#ac_005fpearl">ac_pearl</a>s must be equal to the number
5307
of occupied <a href="#it_005fmeditation">it_meditation</a>s.
5309
<p>This implies again that there exists at least one <a href="#ac_005fpearl">ac_pearl</a> and that
5310
no two pearls can reside within the same <a href="#it_005fmeditation">it_meditation</a>. There must be at
5311
least the same number of <a href="#it_005fmeditation">it_meditation</a> as of <a href="#ac_005fpearl">ac_pearl</a>, but there may
5312
be more <a href="#it_005fmeditation">it_meditation</a>s as long as they are not marked as being essential.
5313
A surplus of <a href="#it_005fmeditation">it_meditation</a> can easily occur due to explosions of
5314
<a href="#it_005fdynamite">it_dynamite</a>.
5316
<p>A level that should be solved by fulfillment of the meditation condition can
5317
contain <a href="#st_005foxyd">st_oxyd</a> and by setting <a href="#AllowSingleOxyds">AllowSingleOxyds</a> to <code>true</code> you
5318
can add odd numbers of oxyd stones of a color. On the other hand you can add
5319
<a href="#ac_005fpearl">ac_pearl</a> to a level that should be solved by fulfillment of the oxyd pair
5320
condition. But you must carefully check that the user can not rest the pearls in
5321
given <a href="#it_005fmeditation">it_meditation</a> or can create <a href="#it_005fmeditation">it_meditation</a> by <a href="#it_005fdynamite">it_dynamite</a>.
5322
Marking more <a href="#it_005fmeditation">it_meditation</a> as <code>essential</code> than existing
5323
<a href="#ac_005fpearl">ac_pearl</a>s can avoid shortcuts.
5325
<p>A level that is set up to allow the user to fulfill both conditions is called
5326
a hybrid level. Of course it is a difficult task to provide equivalent solutions
5327
for both approaches.
5329
<p>Independent of the condition type all actors marked as <code>essential</code> need to
5330
be alive at the moment the condition is fulfilled. Mainly in existing legacy
5331
levels but may in some very carefully designed future levels the author may
5332
allow the user to sacrify an actor to fulfill the condition by setting the
5333
global attribute <a href="#SurviveFinish">SurviveFinish</a> to <code>false</code>. In this case a mable
5334
may shatter while the condition is fulfilled. Of course the essential actor
5335
may not shatter in advance, because as soon as the shattering is over the
5336
essential actor will cause a level restart, if it can not be resurrected.
5339
<a name="Lua-API"></a>
5340
<table cellpadding="1" cellspacing="1" border="0">
5341
<tr><td valign="middle" align="left">[<a href="#Ending-Conditions" title="Previous section in reading order"> < </a>]</td>
5342
<td valign="middle" align="left">[<a href="#Basic-Lua-Examples" title="Next section in reading order"> > </a>]</td>
5343
<td valign="middle" align="left"> </td>
5344
<td valign="middle" align="left">[<a href="#Enigma-Paradigm" title="Beginning of this chapter or previous chapter"> << </a>]</td>
5345
<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up </a>]</td>
5346
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
5347
<td valign="middle" align="left"> </td>
5348
<td valign="middle" align="left"> </td>
5349
<td valign="middle" align="left"> </td>
5350
<td valign="middle" align="left"> </td>
5351
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
5352
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
5353
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
5354
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
5356
<a name="Lua-API-1"></a>
5357
<h1 class="chapter">5. Lua API</h1>
5359
<p>Knowing the basic principles of an Enigma level’s world you now just need
5360
the language glue to write your first level. Enigma levels are written in
5361
the language <a href="http://www.lua.org">Lua</a> as of version 5.1.4. This powerful
5362
language gives you the ability to write most complex, dynamical levels, while
5363
being nearly transparent on writing basic standard levels. Indeed there is no
5364
reason to dig into this language at the very beginning.
5366
<p>With the second Lua API version, as of Enigma 1.10, we designed an optimized
5367
way of describing levels in a very short and readable manner. Thus we would like
5368
to introduce you to this API by giving several examples from a basic level to most
5369
thrilling dynamic real Enigma levels. You should be able to start your first
5370
experiments just after reading the first example with its explanations.
5372
<p>For your convenience we do color the Lua code part. Predefined Lua variables and
5373
functions are colored in green. Enigma internal string constants as object kinds,
5374
attribute or message names are colored in blue. Level specific variable names
5375
and value constants are colored in magenta.
5377
<p>After the examples and a short overview the details of the language specific API
5378
part are given, as you can expect it for a reference manual. Please note
5379
that additional <a href="#Advanced-Features">Advanced Features</a> are described in a separate chapter.
5381
<table class="menu" border="0" cellspacing="0">
5382
<tr><td align="left" valign="top"><a href="#Basic-Lua-Examples">5.1 Basic Lua Examples</a></td><td> </td><td align="left" valign="top">
5384
<tr><td align="left" valign="top"><a href="#API-2-Overview">5.2 API 2 Overview</a></td><td> </td><td align="left" valign="top">
5386
<tr><td align="left" valign="top"><a href="#Advanced-Lua-Examples">5.3 Advanced Lua Examples</a></td><td> </td><td align="left" valign="top">
5388
<tr><td align="left" valign="top"><a href="#Introduction-to-Datatypes">5.4 Introduction to Datatypes</a></td><td> </td><td align="left" valign="top">
5390
<tr><td align="left" valign="top"><a href="#Position">5.5 Position</a></td><td> </td><td align="left" valign="top">
5392
<tr><td align="left" valign="top"><a href="#Object">5.6 Object</a></td><td> </td><td align="left" valign="top">
5394
<tr><td align="left" valign="top"><a href="#Group">5.7 Group</a></td><td> </td><td align="left" valign="top">
5396
<tr><td align="left" valign="top"><a href="#NamedObjects">5.8 NamedObjects</a></td><td> </td><td align="left" valign="top">
5398
<tr><td align="left" valign="top"><a href="#PositionList">5.9 PositionList</a></td><td> </td><td align="left" valign="top">
5400
<tr><td align="left" valign="top"><a href="#Positions-Repository">5.10 Positions Repository</a></td><td> </td><td align="left" valign="top">
5402
<tr><td align="left" valign="top"><a href="#Tile-and-Object-Declaration">5.11 Tile and Object Declaration</a></td><td> </td><td align="left" valign="top">
5404
<tr><td align="left" valign="top"><a href="#Tiles-Repository">5.12 Tiles Repository</a></td><td> </td><td align="left" valign="top">
5406
<tr><td align="left" valign="top"><a href="#World">5.13 World</a></td><td> </td><td align="left" valign="top">
5408
<tr><td align="left" valign="top"><a href="#Functions">5.14 Functions</a></td><td> </td><td align="left" valign="top">
5410
<tr><th colspan="3" align="left" valign="top"><pre class="menu-comment">
5411
</pre></th></tr></table>
5415
<a name="Basic-Lua-Examples"></a>
5416
<table cellpadding="1" cellspacing="1" border="0">
5417
<tr><td valign="middle" align="left">[<a href="#Lua-API" title="Previous section in reading order"> < </a>]</td>
5418
<td valign="middle" align="left">[<a href="#Basic-Example" title="Next section in reading order"> > </a>]</td>
5419
<td valign="middle" align="left"> </td>
5420
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
5421
<td valign="middle" align="left">[<a href="#Lua-API" title="Up section"> Up </a>]</td>
5422
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
5423
<td valign="middle" align="left"> </td>
5424
<td valign="middle" align="left"> </td>
5425
<td valign="middle" align="left"> </td>
5426
<td valign="middle" align="left"> </td>
5427
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
5428
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
5429
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
5430
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
5432
<a name="Basic-Lua-Examples-1"></a>
5433
<h2 class="section">5.1 Basic Lua Examples</h2>
5435
<p>Let us look at two basic onescreener levels, that make use of all basic
5436
techniques. While the first level is a little bit artificial, as it is designed
5437
for demo purposes only, the second one is a quite dynamic real level out of
5438
the Enigma levelpacks.
5440
<table class="menu" border="0" cellspacing="0">
5441
<tr><td align="left" valign="top"><a href="#Basic-Example">5.1.1 Basic Example</a></td><td> </td><td align="left" valign="top">
5443
<tr><td align="left" valign="top"><a href="#Colored-Turnstiles">5.1.2 Colored Turnstiles</a></td><td> </td><td align="left" valign="top"> Enigma Levelpack VIII, level #?
5448
<a name="Basic-Example"></a>
5449
<table cellpadding="1" cellspacing="1" border="0">
5450
<tr><td valign="middle" align="left">[<a href="#Basic-Lua-Examples" title="Previous section in reading order"> < </a>]</td>
5451
<td valign="middle" align="left">[<a href="#Colored-Turnstiles" title="Next section in reading order"> > </a>]</td>
5452
<td valign="middle" align="left"> </td>
5453
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
5454
<td valign="middle" align="left">[<a href="#Basic-Lua-Examples" title="Up section"> Up </a>]</td>
5455
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
5456
<td valign="middle" align="left"> </td>
5457
<td valign="middle" align="left"> </td>
5458
<td valign="middle" align="left"> </td>
5459
<td valign="middle" align="left"> </td>
5460
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
5461
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
5462
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
5463
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
5465
<a name="Basic-Example-1"></a>
5466
<h3 class="subsection">5.1.1 Basic Example</h3>
5468
<p>Let us view the source code. We did add a line count in the first two columns
5469
for reference purpose within this section. These line count numbers are not part
5470
of the source code itself!
5472
<table><tr><td> </td><td><pre class="example"> 1 <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
5473
2 <el:level xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://enigma-game.org/schema/level/1 level.xsd" xmlns:el="http://enigma-game.org/schema/level/1">
5474
3 <el:protected>
5475
4 <el:info el:type="level">
5476
5 <el:identity el:title="Basic Level" el:subtitle="" el:id="20080721ral513"/>
5477
6 <el:version el:score="1" el:release="1" el:revision="$Revision: 1170 $" el:status="experimental"/>
5478
7 <el:author el:name="Ronald Lamprecht" el:email="ral@users.berlios.de"/>
5479
8 <el:copyright>Copyright © 2008 Ronald Lamprecht</el:copyright>
5480
9 <el:license el:type="GPL v2.0 or above" el:open="true"/>
5481
10 <el:compatibility el:enigma="<var>1.10</var>"/>
5482
11 <el:modes el:easy="true" el:single="true" el:network="false"/>
5483
12 <el:score el:easy="-" el:difficult="-"/>
5485
14 <el:luamain><![CDATA[
5487
16 <i>wo</i>["<b>ConserveLevel</b>"] = <var>true</var>
5489
18 <i>ti</i>["<var> </var>"] = {"<b>fl_samba</b>"}
5490
19 <i>ti</i>["<var>.</var>"] = {"<b>fl_abyss</b>"}
5491
20 <i>ti</i>["<var>~</var>"] = {"<b>fl_water</b>"}
5492
21 <i>ti</i>["<var>#</var>"] = {"<b>st_granite</b>"}
5493
22 <i>ti</i>["<var>X</var>"] = {"<b>st_oxyd</b>"}
5495
24 <i>ti</i>["<var>L</var>"] = {"<b>st_laser</b>", <b>orientation</b>=<var>EAST</var>, <b>state</b>=<var>ON</var>}
5496
25 <i>ti</i>["<var>M</var>"] = {"<b>st_lightpassenger</b>", <b>interval</b>=<var>0.04</var>}
5498
27 <i>ti</i>["<var>P</var>"] = {"<b>st_polarswitch</b>", <b>name</b>="<var>polar</var>"}
5499
28 <i>ti</i>["<var>T</var>"] = {"<b>it_trigger</b>", <b>target</b>="<var>polar</var>"}
5501
30 <i>ti</i>["<var>^</var>"] = {"<b>st_boulder</b>", "<var>boulder</var>", <b>orientation</b>=<var>NORTH</var>}
5502
31 <i>ti</i>["<var>F</var>"] = {"<b>st_fourswitch</b>", <b>target</b>="<var>boulder</var>", <b>action</b>="<var>orientate</var>"}
5504
33 <i>ti</i>["<var>D</var>"] = {"<b>st_door_d</b>", "<var>door</var>", <b>faces</b>="<var>ew</var>"}
5505
34 <i>ti</i>["<var>B</var>"] = {"<b>it_blocker</b>", "<var>wall#</var>"}
5506
35 <i>ti</i>["<var>S</var>"] = {"<b>st_switch</b>", <b>target</b>={"<var>door</var>", "<var>wall#*</var>"}}
5508
37 <i>ti</i>["<var>v</var>"] = {"<b>it_vortex</b>", "<var>left</var>", <b>destination</b>="<var>right</var>"}
5509
38 <i>ti</i>["<var>V</var>"] = {"<b>it_vortex</b>", "<var>right</var>", <b>destination</b>="<var>left</var>"}
5511
40 <i>ti</i>["<var>O</var>"] = {"<b>st_turnstile</b>", <b>flavor</b>="<var>red</var>"}
5512
41 <i>ti</i>["<var>E</var>"] = {"<b>st_turnstilearm</b>", <b>orientation</b>=<var>EAST</var>}
5513
42 <i>ti</i>["<var>N</var>"] = <i>ti</i>["<var>.</var>"] .. {"<b>st_turnstilearm_n</b>"}
5515
44 <i>ti</i>["<var>+</var>"] = {"<b>fl_samba</b>", <b>checkerboard</b>=<var>0</var>} .. ti({"<b>fl_wood</b>", <b>checkerboard</b>=<var>1</var>})
5517
46 <i>ti</i>["<var>1</var>"] = {"#<b>ac_marble</b>"}
5519
48 if <i>wo</i>["<b>IsDifficult</b>"] then
5520
49 <i>ti</i>["<var>=</var>"] = <i>ti</i>["<var>~</var>"]
5522
51 <i>ti</i>["<var>=</var>"] = <i>ti</i>["<var>~</var>"] .. {"<b>it_strip_ew</b>"}
5525
54 w, h = <i>wo</i>(<i>ti</i>, "<var> </var>", {
5526
55 "<var>####################</var>",
5527
56 "<var># ....++++++~ #</var>",
5528
57 "<var>L PM ..N.++~~~~OE#</var>",
5529
58 "<var>####### T~++++++. #</var>",
5530
59 "<var># ^ ~++++++# #</var>",
5531
60 "<var># =++++++X X</var>",
5532
61 "<var># ~++++++# #</var>",
5533
62 "<var>#~~~~~~~~~~~~~+++X X</var>",
5534
63 "<var># ~ B ~+++###</var>",
5535
64 "<var>F ~ B ~+++++#</var>",
5536
65 "<var># 1 ~ B #+++++#</var>",
5537
66 "<var>S v~V B D+++++#</var>",
5538
67 "<var>####################</var>"
5541
70 <i>wo</i>:<b>shuffleOxyd</b>()
5543
72 ]]></el:luamain>
5545
74 <el:string el:key="title">
5546
75 <el:english el:translate="false"/>
5547
76 </el:string>
5549
78 </el:protected>
5550
79 </el:level>
5551
</pre></td></tr></table>
5553
<p>The resulting level looks like this in the game
5555
<img src="images/ralD006_1.png" alt="images/ralD006_1">
5557
<p>Let us now analyse the code line by line.
5559
<p>Lines 1 to 14 are the XML metadata of the level as described in
5560
<a href="#Level-Basics">Level Basics</a>. The only line worth mentioning is
5561
</p><table><tr><td> </td><td><pre class="example">10 <el:compatibility el:enigma="<var>1.10</var>"/>
5562
</pre></td></tr></table>
5564
<p>You need to declare the level to be compatible to Enigma 1.10 or higher for
5565
the new API 2 as described in this reference manual. A value less than 1.10
5566
indicates compatibility to a previous Enigma release that did use the old API 1,
5567
which should not be mixed up with the new API 2.
5569
<p>The Lua part starts with line 15:
5570
</p><table><tr><td> </td><td><pre class="example">16 <i>wo</i>["<b>ConserveLevel</b>"] = <var>true</var>
5571
</pre></td></tr></table>
5573
<p>Like most levels it starts with setting <a href="#Global-Attributes">Global Attributes</a>. The handle of
5574
our world is ‘<samp>wo</samp>’. This object reference is preset
5575
(see section <a href="#World-as-an-Object">World as an Object</a>). Concerning Lua it is an ‘<samp>userdata</samp>’,
5576
but most of its usage syntax is identical to that of Lua tables. Thus we access
5577
an attribute by providing the desired attribute name in square brackets. As we
5578
give a literal attribute name, we have to put it in double quotes ‘<samp>"</samp>’. In
5579
total this line requests the world to resurrect a killed actor as long as there
5580
are enough extra lifes to conserve the running level (see section <a href="#ConserveLevel">ConserveLevel</a>).
5581
In fact ‘<samp>true</samp>’ is the default value. So we could have left this line out.
5582
But remember it is a demo level.
5584
<p>The second part of a level are the tile definitions as explained in
5585
<a href="#World_0027s-Shape-and-Coordinates">World’s Shape and Coordinates</a>. Let us start with the most simple ones:
5586
</p><table><tr><td> </td><td><pre class="example">18 <i>ti</i>["<var> </var>"] = {"<b>fl_samba</b>"}
5587
19 <i>ti</i>["<var>.</var>"] = {"<b>fl_abyss</b>"}
5588
20 <i>ti</i>["<var>~</var>"] = {"<b>fl_water</b>"}
5589
21 <i>ti</i>["<var>#</var>"] = {"<b>st_granite</b>"}
5590
22 <i>ti</i>["<var>X</var>"] = {"<b>st_oxyd</b>"}
5591
</pre></td></tr></table>
5593
<p>Again we use a handle ‘<samp>ti</samp>’ which is a preset object reference for the
5594
tile definition repository. Like the world it is a Lua ‘<samp>userdata</samp>’. And
5595
we can access it like the world by giving the desired index in square brackets.
5596
These indices are free to your choice. They have to be of a common character length
5597
if they are referenced in the world map below. For a small level one character
5598
keys are sufficient. You can use any ASCII character that Lua is aware of. That
5599
means upper and lower case characters ‘<samp>A-Z,a-z</samp>’, the numbers and special
5600
characters besides backslash ‘<samp>\</samp>’ and double quote ‘<samp>"</samp>’.
5602
<p>The assigned object definition are given as Lua anonymous tables, the curly braces,
5603
containing in the most simple case just the desired <a href="#Object-Kind">Object Kind</a>. As it
5604
is again a literal string, it has to be quoted. Without any further specification
5605
the objects are taken in their default configuration as described in
5606
<a href="#Floor-Objects">Floor Objects</a> and following chapters.
5608
<table><tr><td> </td><td><pre class="example">24 <i>ti</i>["<var>L</var>"] = {"<b>st_laser</b>", <b>orientation</b>=<var>EAST</var>, <b>state</b>=<var>ON</var>}
5609
25 <i>ti</i>["<var>M</var>"] = {"<b>st_lightpassenger</b>", <b>interval</b>=<var>0.04</var>}
5610
</pre></td></tr></table>
5612
<p>These two lines define objects with custom configuration. The <a href="#st_005flaser">st_laser</a>
5613
should send its beam to the east and should start being switched on. The
5614
<a href="#st_005flightpassenger">st_lightpassenger</a> should move a little bit faster than usually. Both
5615
times we just have to add comma separated additional attributes. The attribute
5616
names are not quoted as they are followed by an equal ‘<samp>=</samp>’ sign.
5618
<table><tr><td> </td><td><pre class="example">27 <i>ti</i>["<var>P</var>"] = {"<b>st_polarswitch</b>", <b>name</b>="<var>polar</var>"}
5619
28 <i>ti</i>["<var>T</var>"] = {"<b>it_trigger</b>", <b>target</b>="<var>polar</var>"}
5620
</pre></td></tr></table>
5622
<p>An <a href="#st_005fpolarswitch">st_polarswitch</a> named for reference usage (see section <a href="#Object-Naming">Object Naming</a>).
5623
The <a href="#it_005ftrigger">it_trigger</a> sets up a <a href="#Target-_002d-Action">Target - Action</a>, the target being our
5624
polarswitch. The action attribute is omitted. It defaults to the message
5625
‘<samp>toggle</samp>’. Thus any actor or stone on top of the trigger makes the
5626
polarswitch transparent, but switches it back to opacity when leaving
5629
<table><tr><td> </td><td><pre class="example">30 <i>ti</i>["<var>^</var>"] = {"<b>st_boulder</b>", "<var>boulder</var>", <b>orientation</b>=<var>NORTH</var>}
5630
31 <i>ti</i>["<var>F</var>"] = {"<b>st_fourswitch</b>", <b>target</b>="<var>boulder</var>", <b>action</b>="<var>orientate</var>"}
5631
</pre></td></tr></table>
5633
<p>Another pair of objects that are coupled by <a href="#Target-_002d-Action">Target - Action</a>. The
5634
<a href="#st_005fboulder">st_boulder</a> starts trying to move to north. This time we name the object
5635
just by giving the name as the second comma separated string. We omitted the
5636
attribute identifier ‘<samp>name =</samp>’. This is a shortcut for this most common
5637
attribute which requires the name to be given as the second value directly
5638
after the objects kind.
5640
<p>The <a href="#st_005ffourswitch">st_fourswitch</a> references the boulder as its target. We need to give
5641
the action as well, as we want to make use of a special action that directly
5642
steers the boulder according to the fourswitch orientation.
5644
<table><tr><td> </td><td><pre class="example">33 <i>ti</i>["<var>D</var>"] = {"<b>st_door_d</b>", "<var>door</var>", <b>faces</b>="<var>ew</var>"}
5645
34 <i>ti</i>["<var>B</var>"] = {"<b>it_blocker</b>", "<var>wall#</var>"}
5646
35 <i>ti</i>["<var>S</var>"] = {"<b>st_switch</b>", <b>target</b>={"<var>door</var>", "<var>wall#*</var>"}}
5647
</pre></td></tr></table>
5649
<p>And another even more complex <a href="#Target-_002d-Action">Target - Action</a>. We want a single
5650
<a href="#st_005fswitch">st_switch</a> to toggle a <a href="#st_005fdoor">st_door</a> as well as set of <a href="#it_005fblocker">it_blocker</a>s
5651
at the same time. The gaming idea is that neither with switch on nor with switch
5652
off the marble can pass both obstacles. The gamer needs to steer the boulder
5653
through the blocker wall to pass these obstacles.
5655
<p>The setup of the door is simple. We just need to name it to be able to reference
5656
it later on. We want to use several blocker objects and we need to name each
5657
for reference purposes. We do this by appending a hash sign ‘<samp>#</samp>’ to its
5658
name as described in <a href="#Object-Naming">Object Naming</a>. Every blocker gets a unique name.
5659
The switch needs to list all these objects as its targets. This is done by
5660
an embedded anonymous table given by the curly braces and comma separated
5661
values. The first one is our door’s name, the second one is a wildcarded string
5662
that describes all our blocker objects. The asterisk stands for any suffix
5663
that may have been added behind the hash in the process of autonaming of our
5666
<table><tr><td> </td><td><pre class="example">37 <i>ti</i>["<var>v</var>"] = {"<b>it_vortex</b>", "<var>left</var>", <b>destination</b>="<var>right</var>"}
5667
38 <i>ti</i>["<var>V</var>"] = {"<b>it_vortex</b>", "<var>right</var>", <b>destination</b>="<var>left</var>"}
5668
</pre></td></tr></table>
5670
<p>We want to use two <a href="#it_005fvortex">it_vortex</a> that are connected to each other allowing
5671
the marble to warp into both directions. We set up both vortices with a unique
5672
name and add the attribute ‘<samp>destination</samp>’ referencing the other vortex’ name.
5674
<p>Note that it is no problem to reference the right vortex in line 37 while it
5675
is named later on in line 38. We are still just defining tiles and not creating
5678
<table><tr><td> </td><td><pre class="example">40 <i>ti</i>["<var>O</var>"] = {"<b>st_turnstile</b>", <b>flavor</b>="<var>red</var>"}
5679
41 <i>ti</i>["<var>E</var>"] = {"<b>st_turnstilearm</b>", <b>orientation</b>=<var>EAST</var>}
5680
42 <i>ti</i>["<var>N</var>"] = <i>ti</i>["<var>.</var>"] .. {"<b>st_turnstilearm_n</b>"}
5681
</pre></td></tr></table>
5683
<p>Another object group is an <a href="#st_005fturnstile">st_turnstile</a> cluster with one arm disconnected.
5684
The first two definitions are straight forward. But in line 42 we precede the
5685
arm’s definition by another tile reference. It is the abyss tile defined in
5686
line 19. By concatenation, the two dots <b>..</b>, of a tile and an object
5687
definition we can define a new tile that is composed of both objects. In this
5688
case we define a turnstile arm on top of an abyss floor.
5690
<p>You may be wondering why we did not define floors for the other stone and item
5691
tiles. We make use of the tile definition in line 18 that we will declare
5692
later as the default floor for our level. Thus any tile declaration that does
5693
not provide its own floor will set this default floor.
5695
<table><tr><td> </td><td><pre class="example">44 <i>ti</i>["<var>+</var>"] = {"<b>fl_samba</b>", <b>checkerboard</b>=<var>0</var>} .. ti({"<b>fl_wood</b>", <b>checkerboard</b>=<var>1</var>})
5696
</pre></td></tr></table>
5698
<p>Just for fun we want to provide a checkerboard floor on the right side of our
5699
level. This can be done by usage of the <a href="#checkerboard">checkerboard</a> attribute. Again
5700
we concatenate two object definitions for a single tile. Both are floors. That
5701
means for each grid position we try to set both floor types, but just one meets
5702
the checkerboard condition and will be set.
5704
<p>Please notice that we did convert one the floor object definitions to a tile
5705
definition by the function call ‘<samp>ti()</samp>’. This is necessary as Lua does not
5706
know how to concatenate two anonymous tables. One argument of the concatenation
5709
<table><tr><td> </td><td><pre class="example">46 <i>ti</i>["<var>1</var>"] = {"#<b>ac_marble</b>"}
5710
</pre></td></tr></table>
5712
<p>Finally we do need our marble. Unlike other objects it can be positioned
5713
anywhere within a grid. The most common position is the center of the grid.
5714
This is simply done by preceding the actor’s kind by a hash sign ‘<samp>#</samp>’.
5716
<table><tr><td> </td><td><pre class="example">48 if <i>wo</i>["<b>IsDifficult</b>"] then
5717
49 <i>ti</i>["<var>=</var>"] = <i>ti</i>["<var>~</var>"]
5719
51 <i>ti</i>["<var>=</var>"] = <i>ti</i>["<var>~</var>"] .. {"<b>it_strip_ew</b>"}
5721
</pre></td></tr></table>
5723
<p>We encourage every level author to provide an easy mode for the levels. This
5724
is an example how to define mode dependent tiles. Like in line 16 we access
5725
a world attribute. But this time it is a read access of <a href="#IsDifficult">IsDifficult</a>.
5726
In easy mode we want an <a href="#it_005fstrip">it_strip</a> on top of the water floor that allows the
5727
marble to pass and press the trigger. In difficult mode there should be
5728
no passage. Thus the special tile is identical to the water tile defined in
5731
<table><tr><td> </td><td><pre class="example">54 w, h = <i>wo</i>(<i>ti</i>, "<var> </var>", {
5732
55 "<var>####################</var>",
5733
56 "<var># ....++++++~ #</var>",
5734
57 "<var>L PM ..N.++~~~~OE#</var>",
5735
58 "<var>####### T~++++++. #</var>",
5736
59 "<var># ^ ~++++++# #</var>",
5737
60 "<var># =++++++X X</var>",
5738
61 "<var># ~++++++# #</var>",
5739
62 "<var>#~~~~~~~~~~~~~+++X X</var>",
5740
63 "<var># ~ B ~+++###</var>",
5741
64 "<var>F ~ B ~+++++#</var>",
5742
65 "<var># 1 ~ B #+++++#</var>",
5743
66 "<var>S v~V B D+++++#</var>",
5744
67 "<var>####################</var>"
5746
</pre></td></tr></table>
5748
<p>After all tiles have been defined we can create our world simply by a map that
5749
uses our tile keys. The first argument is our handle ‘<samp>ti</samp>’, that defines
5750
how the keys should be resolved. The second argument is the key of our default
5751
floor. The third argument is the map as a table of strings, one for every line.
5753
<p>The world initialization returns the width and height of our world which are
5754
calculated by the map’s size.
5756
<table><tr><td> </td><td><pre class="example">70 <i>wo</i>:<b>shuffleOxyd</b>()
5757
</pre></td></tr></table>
5759
<p>After the world is created and all objects are set, we can do some final
5760
postprocessing before the level starts to run. The most common task is the
5761
shuffling of the oxyds, which is just a method call of <a href="#shuffleOxyd">shuffleOxyd</a> to
5762
our mighty world object.
5765
<a name="Colored-Turnstiles"></a>
5766
<table cellpadding="1" cellspacing="1" border="0">
5767
<tr><td valign="middle" align="left">[<a href="#Basic-Example" title="Previous section in reading order"> < </a>]</td>
5768
<td valign="middle" align="left">[<a href="#API-2-Overview" title="Next section in reading order"> > </a>]</td>
5769
<td valign="middle" align="left"> </td>
5770
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
5771
<td valign="middle" align="left">[<a href="#Basic-Lua-Examples" title="Up section"> Up </a>]</td>
5772
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
5773
<td valign="middle" align="left"> </td>
5774
<td valign="middle" align="left"> </td>
5775
<td valign="middle" align="left"> </td>
5776
<td valign="middle" align="left"> </td>
5777
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
5778
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
5779
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
5780
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
5782
<a name="Colored-Turnstiles-1"></a>
5783
<h3 class="subsection">5.1.2 Colored Turnstiles</h3>
5785
<p>As this level is part of the Enigma levelpacks we recommend that you play
5786
the level first to get familiar with the used objects and their behaviour.
5788
<p>Now let us look at the essential Lua source code part of the level to understand
5789
how such an idea can be realized with the new API
5791
<table><tr><td> </td><td><pre class="example"><i>ti</i>["<var> </var>"] = {"<b>fl_sahara</b>"}
5792
<i>ti</i>["<var>#</var>"] = {"<b>st_purplegray</b>"}
5793
<i>ti</i>["<var>@</var>"] = {"#<b>ac_marble_black</b>", "<var>marble_black</var>"}
5795
<i>ti</i>["<var>N</var>"] = {"<b>st_turnstilearm_n</b>"}
5796
<i>ti</i>["<var>S</var>"] = {"<b>st_turnstilearm_s</b>"}
5797
<i>ti</i>["<var>E</var>"] = {"<b>st_turnstilearm_e</b>"}
5798
<i>ti</i>["<var>W</var>"] = {"<b>st_turnstilearm_w</b>"}
5799
<i>ti</i>["<var>R</var>"] = {"<b>st_turnstile</b>", <b>action</b> = {"<var>open</var>", "<var>close</var>"}, <b>target</b> = {"<var>red</var>#*", "<var>green</var>#*"}}
5800
<i>ti</i>["<var>G</var>"] = {"<b>st_turnstile</b>", <b>action</b> = {"<var>close</var>", "<var>open</var>"}, <b>target</b> = {"<var>red</var>#*", "<var>green</var>#*"},
5801
<b>flavor</b> = "<var>green</var>"}
5802
<i>ti</i>["<var>r</var>"] = {"<b>it_blocker</b>", "<var>red</var>#"} .. <i>ti</i>({"<b>fl_red</b>"})
5803
<i>ti</i>["<var>g</var>"] = {"<b>it_blocker</b>", "<var>green</var>#"} .. <i>ti</i>({"<b>fl_lawn</b>"})
5805
<i>ti</i>["<var>O</var>"] = {"<b>st_oxyd</b>", <b>flavor</b> = "<var>d</var>", <b>oxydcolor</b> = <var>OXYD_GREEN</var>}
5806
<i>ti</i>["<var>o</var>"] = {"<b>st_oxyd</b>", <b>flavor</b> = "<var>d</var>", <b>oxydcolor</b> = <var>OXYD_RED</var>}
5808
<var>w</var>, <var>h</var> = <i>wo</i>(<i>ti</i>, "<var> </var>", {
5809
-- 01234567890123456789
5810
"<var>#O#####O############</var>",
5811
"<var># r N g N rO##O#O#</var>",
5812
"<var>#WRE#WGE# R ####g#r#</var>",
5813
"<var># r N r S r N #</var>",
5814
"<var>#g#g#WG #g##r# REr##</var>",
5815
"<var># # N S r g S gO</var>",
5816
"<var>#@g RE#g#gWGE###g###</var>",
5817
"<var># # S g r N ro</var>",
5818
"<var>#r#r#WGE#r##g#WGEg##</var>",
5819
"<var># N r S g N r #</var>",
5820
"<var>#WGE# RE# RE####r#g#</var>",
5821
"<var># g S r S go##o#o#</var>",
5822
"<var>#o#####o############</var>"
5825
<i>wo</i>:<b>shuffleOxyd</b>()
5826
</pre></td></tr></table>
5828
<p>There are just four tile definitions that do all the dynamic actions. Let us
5829
look first at the blocker item definitions:
5831
<table><tr><td> </td><td><pre class="example"><i>ti</i>["<var>r</var>"] = {"<b>it_blocker</b>", "<var>red</var>#"} .. <i>ti</i>({"<b>fl-red</b>"})
5832
<i>ti</i>["<var>g</var>"] = {"<b>it_blocker</b>", "<var>green</var>#"} .. <i>ti</i>({"<b>fl-leaves</b>"})
5833
</pre></td></tr></table>
5834
<p>All blockers on red floors are autonamed with a name being composed of the
5835
prefix ‘<samp>red#</samp>’ and a unique random number being added by the engine as
5836
explained in <a href="#Object-Naming">Object Naming</a>. This allows us to address all these blockers
5839
<table><tr><td> </td><td><pre class="example"><i>ti</i>["<var>R</var>"] = {"<b>st_turnstile</b>", <b>action</b> = {"<var>open</var>", "<var>close</var>"}, <b>target</b> = {"<var>red</var>#*", "<var>green</var>#*"}}
5840
<i>ti</i>["<var>G</var>"] = {"<b>st_turnstile</b>", <b>action</b> = {"<var>close</var>", "<var>open</var>"}, <b>target</b> = {"<var>red</var>#*", "<var>green</var>#*"},
5841
<b>flavor</b> = "<var>green</var>"}
5842
</pre></td></tr></table>
5843
<p>Whenever the marble hits and turns an <a href="#st_005fturnstile">st_turnstile</a> it performs its actions
5844
on the targets. Here the author makes clever usage of multitargets and
5845
multiactions as described in <a href="#Target-_002d-Action">Target - Action</a>. On every turn of a red
5846
turnstile all objects named ‘<samp>red#*</samp>’, that are all our blockers on a red
5847
floor, will be sent a message ‘<samp>open</samp>’, whereas all blocks on a green floor,
5848
the second target group, receives the second action message ‘<samp>close</samp>’. It is
5849
essential to choose the ‘<samp>open</samp>’, ‘<samp>close</samp>’ messages instead of
5850
‘<samp>toggle</samp>’, as more than one red turnstile may be turned in sequence, but
5851
just the first red turn should "toggle" all blockers. The next toggling should
5852
occur on the first green turn following thereafter.
5854
<p>Hope you got the basic idea of the new API. You may well start with you first
5855
level experiments. But you should return and read the following chapters with
5856
overview and advanced examples to write even more fancy levels.
5860
<a name="API-2-Overview"></a>
5861
<table cellpadding="1" cellspacing="1" border="0">
5862
<tr><td valign="middle" align="left">[<a href="#Colored-Turnstiles" title="Previous section in reading order"> < </a>]</td>
5863
<td valign="middle" align="left">[<a href="#Types-Overview" title="Next section in reading order"> > </a>]</td>
5864
<td valign="middle" align="left"> </td>
5865
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
5866
<td valign="middle" align="left">[<a href="#Lua-API" title="Up section"> Up </a>]</td>
5867
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
5868
<td valign="middle" align="left"> </td>
5869
<td valign="middle" align="left"> </td>
5870
<td valign="middle" align="left"> </td>
5871
<td valign="middle" align="left"> </td>
5872
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
5873
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
5874
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
5875
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
5877
<a name="API-2-Overview-1"></a>
5878
<h2 class="section">5.2 API 2 Overview</h2>
5880
<p>Having analysed a first level it is time get an overview of the API 2
5881
capabilities. Let us take a task driven approach by listing the different
5882
possibilities and use cases by example.
5884
<table class="menu" border="0" cellspacing="0">
5885
<tr><td align="left" valign="top"><a href="#Types-Overview">5.2.1 Types Overview</a></td><td> </td><td align="left" valign="top">
5887
<tr><td align="left" valign="top"><a href="#Position-Tasks">5.2.2 Position Tasks</a></td><td> </td><td align="left" valign="top">
5889
<tr><td align="left" valign="top"><a href="#Attribute-Tasks">5.2.3 Attribute Tasks</a></td><td> </td><td align="left" valign="top">
5891
<tr><td align="left" valign="top"><a href="#Object-Tasks">5.2.4 Object Tasks</a></td><td> </td><td align="left" valign="top">
5893
<tr><td align="left" valign="top"><a href="#Group-Tasks">5.2.5 Group Tasks</a></td><td> </td><td align="left" valign="top">
5895
<tr><td align="left" valign="top"><a href="#Tiles-and-World-Tasks">5.2.6 Tiles and World Tasks</a></td><td> </td><td align="left" valign="top">
5897
<tr><td align="left" valign="top"><a href="#Named-Positions-Tasks">5.2.7 Named Positions Tasks</a></td><td> </td><td align="left" valign="top">
5903
<a name="Types-Overview"></a>
5904
<table cellpadding="1" cellspacing="1" border="0">
5905
<tr><td valign="middle" align="left">[<a href="#API-2-Overview" title="Previous section in reading order"> < </a>]</td>
5906
<td valign="middle" align="left">[<a href="#Position-Tasks" title="Next section in reading order"> > </a>]</td>
5907
<td valign="middle" align="left"> </td>
5908
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
5909
<td valign="middle" align="left">[<a href="#API-2-Overview" title="Up section"> Up </a>]</td>
5910
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
5911
<td valign="middle" align="left"> </td>
5912
<td valign="middle" align="left"> </td>
5913
<td valign="middle" align="left"> </td>
5914
<td valign="middle" align="left"> </td>
5915
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
5916
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
5917
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
5918
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
5920
<a name="Types-Overview-1"></a>
5921
<h3 class="subsection">5.2.1 Types Overview</h3>
5923
<p>But first we need to introduce you to the special Enigma value types besides
5924
the standard Lua types ‘<samp>nil</samp>’, ‘<samp>boolean</samp>’, ‘<samp>string</samp>’,
5925
‘<samp>function</samp>’ and ‘<samp>table</samp>’:
5927
<dl compact="compact">
5928
<dt> <b>Types:</b></dt>
5929
<dd><dl compact="compact">
5930
<dt> <b>position:</b> See section <a href="#Position">Position</a></dt>
5931
<dd><p>A position within the world that can be described by an x and y coordinate.
5933
<dt> <b>positions:</b> <i>preset variable:</i> <code><b>po</b></code>; See section <a href="#Positions-Repository">Positions Repository</a></dt>
5934
<dd><p>The singleton type of the repository of all named positions.
5936
<dt> <b>object:</b> See section <a href="#Object">Object</a></dt>
5937
<dd><p>An Enigma object like a stone, item, floor, other. Any object is a position, too.
5939
<dt> <b>group:</b> See section <a href="#Group">Group</a></dt>
5940
<dd><p>A list of objects.
5942
<dt> <b>namedobjects:</b> <i>preset variable:</i> <code><b>no</b></code>; See section <a href="#NamedObjects">NamedObjects</a></dt>
5943
<dd><p>The singleton type of the repository of all named objects.
5945
<dt> <b>default:</b> <i>preset variable:</i> <code><b>DEFAULT</b></code>; See section <a href="#Object-Attributes">Object Attributes</a></dt>
5946
<dd><p>The singleton type of default values that can be used instead of Lua’s ‘<samp>nil</samp>’
5947
in anonymous table tile definitions.
5949
<dt> <b>tile:</b> See section <a href="#Tile-and-Object-Declaration">Tile and Object Declaration</a></dt>
5950
<dd><p>A description of one or several objects for a common grid position (floor, item,
5953
<dt> <b>tiles:</b> <i>preset variable:</i> <code><b>ti</b></code>; See section <a href="#Tiles-Repository">Tiles Repository</a></dt>
5954
<dd><p>The singleton type of the repository of all tile instances.
5956
<dt> <b>world:</b> <i>preset variable:</i> <code><b>wo</b></code>; See section <a href="#World">World</a></dt>
5957
<dd><p>The singleton type of the world that contains all objects.
5959
<dt> <b>position list:</b> See section <a href="#Named-Positions">Named Positions</a></dt>
5960
<dd><p>A list of positions.
5966
<p>Please note the four handles ‘<samp>po</samp>’, ‘<samp>no</samp>’, ‘<samp>ti</samp>’ and ‘<samp>wo</samp>’. You
5967
have noticed two of them in the previous section <a href="#Basic-Lua-Examples">Basic Lua Examples</a>. These
5968
are four variables, that are preset prior the level code gets executed.
5970
<p>API 2 uses mainly two character names for frequently used variables and
5971
functions to shorten the level code and to make it better readable. Authors
5972
should try to use either single characters or names that are three characters or
5973
longer for private variable names.
5975
<p>For the rest of this section let us assume that ‘<samp>obj</samp>’ is an object
5976
reference of a stone, item or floor, which means that is of type ‘<samp>object</samp>’.
5977
And let ‘<samp>pos</samp>’ be a valid variable of type ‘<samp>position</samp>’.
5980
<a name="Position-Tasks"></a>
5981
<table cellpadding="1" cellspacing="1" border="0">
5982
<tr><td valign="middle" align="left">[<a href="#Types-Overview" title="Previous section in reading order"> < </a>]</td>
5983
<td valign="middle" align="left">[<a href="#Attribute-Tasks" title="Next section in reading order"> > </a>]</td>
5984
<td valign="middle" align="left"> </td>
5985
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
5986
<td valign="middle" align="left">[<a href="#API-2-Overview" title="Up section"> Up </a>]</td>
5987
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
5988
<td valign="middle" align="left"> </td>
5989
<td valign="middle" align="left"> </td>
5990
<td valign="middle" align="left"> </td>
5991
<td valign="middle" align="left"> </td>
5992
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
5993
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
5994
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
5995
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
5997
<a name="Position-Tasks-1"></a>
5998
<h3 class="subsection">5.2.2 Position Tasks</h3>
6000
<p>For reference details see section <a href="#Position">Position</a>.
6002
<dl compact="compact">
6003
<dt> <b>Creating Positions:</b></dt>
6004
<dd><table><tr><td> </td><td><pre class="example"><var>pos</var> = <i>po</i>(<var>7</var>, <var>3</var>) -- using function "po()" to generate a position object
6005
<var>pos</var> = <i>po</i>({<var>7</var>, <var>3</var>}) -- using a table position constant as argument
6006
<var>pos</var> = <var>obj</var> -- every object is a valid position
6007
<var>pos</var> = <i>po</i>(<var>12.3</var>, <var>3.7</var>) -- a position within a grid (for an actor)
6008
</pre></td></tr></table>
6009
<p>Absolute positions are created by the function ‘<samp>po()</samp>’. But the most common
6010
way should be the reinterpretation of an object as a position. This lets you
6011
set other objects relatively to given ones.
6014
<dt> <b>Position Constants:</b></dt>
6015
<dd><table><tr><td> </td><td><pre class="example">{<var>7</var>,<var>3</var>} -- a valid position for all arguments and operations (see <a href="#Caveats">Caveats</a>)
6016
</pre></td></tr></table>
6017
<p>Anonymous tables with just two number values can be used in many cases directly as
6018
a position constant. In case of errors, e.g. when operators are not well defined
6019
like addition of two constants, which results in an attempt of adding two Lua
6020
tables, use the function ‘<samp>po()</samp>’ to convert the constant.
6023
<dt> <b>Coordinate Access:</b></dt>
6024
<dd><table><tr><td> </td><td><pre class="example"><var>x</var>, <var>y</var> = <var>pos</var>.<b>x</b>, <var>pos</var>.<b>y</b>
6025
<var>x</var>, <var>y</var> = <var>pos</var>["<b>x</b>"], pos["<b>y</b>"]
6026
<var>x</var>, <var>y</var> = <var>pos</var>:<b>xy</b>()
6027
<var>x</var>, <var>y</var> = <var>obj</var>.<b>x</b>, <var>obj</var>.<b>y</b>
6028
<var>x</var>, <var>y</var> = <var>obj</var>:<b>xy</b>()
6029
</pre></td></tr></table>
6030
<p>The x and y coordinate of a position or object can be read accessed like any
6031
object attribute. A position or object method call by ‘<samp>xy()</samp>’ returns
6032
both coordinate values at once. You can not set a position value by coordinate
6033
write access. Objects need to be set to a new world position. New positions
6034
can be calculated by position arithmetic.
6037
<dt> <b>Position Calculation:</b></dt>
6038
<dd><table><tr><td> </td><td><pre class="example"><var>pos</var> = <var>obj</var> + {<var>2</var>,<var>7</var>}
6039
<var>dpos</var> = <var>obj1</var> - <var>obj2</var>
6040
<var>dpos2</var> = <var>2</var> * <var>dpos</var>
6041
<var>dpos3</var> = <var>dpos</var> / <var>2</var>
6042
</pre></td></tr></table>
6043
<p>Positions can be added or subtracted to get distance vectors. You can multiply
6044
and divide them with any number.
6047
<dt> <b>Center positions for set actors</b></dt>
6048
<dd><table><tr><td> </td><td><pre class="example"><var>pos_centered1</var> = <var>pos</var> + {<var>0.5</var>, <var>0.5</var>}
6049
<var>pos_centered2</var> = #<var>pos</var>
6050
<var>pos_centered3</var> = #<var>obj</var>
6051
</pre></td></tr></table>
6052
<p>Especially for positioning of actors you sometimes need the position of the
6053
center of a grid. Of course you can get it by addition of a constant position.
6054
But the ‘<samp>#</samp>’ operator applied on a position or an actor does the same in
6058
<dt> <b>Round a position to a grid</b></dt>
6059
<dd><table><tr><td> </td><td><pre class="example"><var>grid_pos</var> = <var>pos</var>:<b>grid</b>()
6060
<var>grid_pos</var> = ((<var>pos1</var> - <var>pos2</var>)/<var>2</var>):<b>grid</b>()
6061
</pre></td></tr></table>
6062
<p>A result of a position calculation needs sometimes to be rounded to integer grid
6063
coordinates. This is done by the ‘<samp>grid()</samp>’ method.
6066
<dt> <b>Position comparison</b></dt>
6067
<dd><table><tr><td> </td><td><pre class="example"><var>pos_centered1</var> == <var>pos_centered2</var>
6068
<var>pos_centered1</var> ~= <var>pos_centered2</var> -- Lua's inequality operator
6069
</pre></td></tr></table>
6070
<p>Position can be easily compared to equality.
6073
<dt> <b>Position existence</b></dt>
6074
<dd><table><tr><td> </td><td><pre class="example"><var>pos</var>:exists()
6075
</pre></td></tr></table>
6076
<p>‘<samp>true</samp>’ if a position is a valid position of the world. All positions
6077
outside of the world return ‘<samp>false</samp>’.
6082
<a name="Attribute-Tasks"></a>
6083
<table cellpadding="1" cellspacing="1" border="0">
6084
<tr><td valign="middle" align="left">[<a href="#Position-Tasks" title="Previous section in reading order"> < </a>]</td>
6085
<td valign="middle" align="left">[<a href="#Object-Tasks" title="Next section in reading order"> > </a>]</td>
6086
<td valign="middle" align="left"> </td>
6087
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
6088
<td valign="middle" align="left">[<a href="#API-2-Overview" title="Up section"> Up </a>]</td>
6089
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
6090
<td valign="middle" align="left"> </td>
6091
<td valign="middle" align="left"> </td>
6092
<td valign="middle" align="left"> </td>
6093
<td valign="middle" align="left"> </td>
6094
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
6095
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
6096
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
6097
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
6099
<a name="Attribute-Tasks-1"></a>
6100
<h3 class="subsection">5.2.3 Attribute Tasks</h3>
6102
<p>For reference details see section <a href="#Object">Object</a>.
6104
<dl compact="compact">
6105
<dt> <b>Single Attribute Setting:</b></dt>
6106
<dd><table><tr><td> </td><td><pre class="example"><var>obj</var>["<b>destination</b>"] = <i>po</i>(<var>7</var>,<var>3</var>)
6107
<i>wo</i>["<b>Brittleness</b>"] = <var>7</var>
6108
</pre></td></tr></table>
6109
<p>Object attributes as well as global world attributes can be set like Lua table
6110
values. They can take values of special Enigma types like position, object or
6114
<dt> <b>Multiple Attribute Setting:</b></dt>
6115
<dd><table><tr><td> </td><td><pre class="example"><var>obj</var>:<b>set</b>({<b>target</b>=<var>mydoor</var>, <b>action</b>="<b>open</b>"})
6116
</pre></td></tr></table>
6117
<p>You can set multiple attributes on any object at once with the objects ‘<samp>set()</samp>’
6118
method. The argument is an anonymous Lua table with the attribute names as keys
6119
and assigned values of your choice.
6122
<dt> <b>Requesting Attributes:</b></dt>
6123
<dd><table><tr><td> </td><td><pre class="example"><var>value</var> = <var>obj</var>["<b>attr_name</b>"]
6124
<var>value</var> = <i>wo</i>["<b>Brittleness</b>"]
6125
if <i>wo</i>["<b>IsDifficult</b>"] then ... end
6126
</pre></td></tr></table>
6127
<p>Attributes of objects and the world can be read like Lua table key values.
6130
<dt> <b>Reset Attributes:</b></dt>
6131
<dd><table><tr><td> </td><td><pre class="example"><var>obj</var>["<b>length</b>"] = nil -- the default length, e.g. ‘<samp>1</samp>’
6132
<var>obj</var>["<b>color</b>"] = nil -- delete color attribute - no color
6133
<var>obj</var>["<b>length</b>"] = <i>DEFAULT</i> -- the default length, e.g. ‘<samp>1</samp>’
6134
</pre></td></tr></table>
6135
<p>Any object attribute can be reset to its default value, which is the attribute’s
6136
"delete" operation, by assigning it the Lua ‘<samp>nil</samp>’ or the Enigma
6137
‘<samp>DEFAULT</samp>’ value.
6143
<a name="Object-Tasks"></a>
6144
<table cellpadding="1" cellspacing="1" border="0">
6145
<tr><td valign="middle" align="left">[<a href="#Attribute-Tasks" title="Previous section in reading order"> < </a>]</td>
6146
<td valign="middle" align="left">[<a href="#Group-Tasks" title="Next section in reading order"> > </a>]</td>
6147
<td valign="middle" align="left"> </td>
6148
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
6149
<td valign="middle" align="left">[<a href="#API-2-Overview" title="Up section"> Up </a>]</td>
6150
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
6151
<td valign="middle" align="left"> </td>
6152
<td valign="middle" align="left"> </td>
6153
<td valign="middle" align="left"> </td>
6154
<td valign="middle" align="left"> </td>
6155
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
6156
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
6157
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
6158
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
6160
<a name="Object-Tasks-1"></a>
6161
<h3 class="subsection">5.2.4 Object Tasks</h3>
6163
<p>For reference details see section <a href="#Object">Object</a>.
6165
<dl compact="compact">
6166
<dt> <b>Creating Objects:</b></dt>
6167
<dd><table><tr><td> </td><td><pre class="example"><i>wo</i>[<var>pos</var>] = {"<b>st_chess</b>", <b>color</b>=<var>WHITE</var>, <b>name</b>="<var>Atrax</var>"} -- on grid pos
6168
<i>wo</i>[#<var>pos</var>] = {"<b>ac_bug</b>"} -- actor centered on grid pos
6169
<i>wo</i>[<var>pos</var>] = {"#<b>ac_bug</b>"} -- actor centered on grid pos
6170
<i>wo</i>[<var>pos</var>] = {"<b>ac_bug</b>", <var>0.3</var>, <var>0.7</var>} -- actor with offsets to pos
6171
<i>wo</i>[<var>my_floor</var>] = {"<b>it_magicwand</b>"} -- set a wand on top of a given floor object
6172
<i>wo</i>[<var>pos</var>] = <i>ti</i>["<var>x</var>"] -- tile based object definition
6173
</pre></td></tr></table>
6174
<p>Besides map based object creation, that you saw in the previous basic examples,
6175
you can create new objects on any world position directly. The world takes a
6176
position, that may well be an object, as key argument. The new object is
6177
described either by an anonymous Lua table, containing the kind string as first
6178
value and additional attributes as key value pairs appended, or by a tile object.
6181
<dt> <b>Object Naming:</b></dt>
6182
<dd><table><tr><td> </td><td><pre class="example"><i>no</i>["<var>Atrax</var>"] = <var>obj</var>
6183
<i>wo</i>[<var>pos</var>] = {"<b>st_chess</b>", <b>name</b>="<var>Atrax</var>"}
6184
<i>wo</i>[<var>pos</var>] = {"<b>st_chess</b>", "<var>Atrax</var>", <b>color</b>=<var>WHITE</var>}
6185
</pre></td></tr></table>
6186
<p>As explained in <a href="#Object-Naming">Object Naming</a>, the names are the only longtime valid
6187
object references. You can explicitly name an object by assigning it at the
6188
named object repository ‘<samp>no</samp>’ to the name as the key. But most times you
6189
just supply the objects name as an object attribute. If you supply the name
6190
attribute as the <b>second</b> value in the anonymous table you can omit the
6191
key ‘<samp>name =</samp>’ part as a common abbreviation.
6194
<dt> <b>Object Autonaming:</b></dt>
6195
<dd><table><tr><td> </td><td><pre class="example"><i>wo</i>[<var>pos</var>] = {"<b>st_chess</b>", <b>name</b>="<var>Atrax</var>#"}
6196
</pre></td></tr></table>
6197
<p>As explained in <a href="#Object-Naming">Object Naming</a> you can append a hash sign ‘<samp>#</samp>’ to a
6198
name and use the resulting string for arbitrary number of similar objects. This
6199
is especially useful for building groups.
6202
<dt> <b>Requesting Objects:</b></dt>
6203
<dd><table><tr><td> </td><td><pre class="example"><var>obj</var> = <i>no</i>["<var>Atrax</var>"] -- named object retrieval from repository
6204
<var>obj</var> = <i>it</i>(<var>pos</var>)
6205
<var>obj</var> = <i>it</i>(<var>x</var>,<var>y</var>)
6206
<var>obj</var> = <i>st</i>(<var>pos</var>)
6207
<var>obj</var> = <i>wo</i>:<b>it</b>(<var>pos</var>)
6208
<var>my_item</var> = <i>it</i>(<var>my_floor</var>) -- get the item that is on top of the given floor
6209
</pre></td></tr></table>
6210
<p>The most common way is naming objects and the requesting the ‘<samp>no</samp>’
6211
repository for the object reference. If you know the position of the desired
6212
object you can use one of the functions or world methods ‘<samp>fl</samp>’, ‘<samp>it</samp>’,
6213
‘<samp>st</samp>’ that take a position, an object as position, or just the two
6214
coordinates as arguments. Especially requesting one type of objects that is
6215
positioned at the same grid as another object, the stone on top of a floor, etc.
6219
<dt> <b>Killing Objects:</b></dt>
6220
<dd><table><tr><td> </td><td><pre class="example"><i>wo</i>[<var>pos</var>] = {"<b>it_nil</b>"}
6221
<var>obj</var>:<b>kill</b>()
6222
</pre></td></tr></table>
6223
<p>You remove an object by setting another replacement object at the same
6224
position in the same layer. If you do not want to set a new object you can use
6225
the placebo objects ‘<samp>fl_nil</samp>’, ‘<samp>it_nil</samp>’, ‘<samp>st_nil</samp>’. Another way is
6226
to call the ‘<samp>kill()</samp>’ method of an object or send it a ‘<samp>kill</samp>’ message.
6227
You can only remove objects that are set on the grid. Neither actors nor owned
6228
objects like items in a players inventory can be killed - they will simply
6232
<dt> <b>Comparing Objects</b></dt>
6233
<dd><table><tr><td> </td><td><pre class="example"><var>obj1</var> == <var>obj2</var>
6234
<var>obj1</var> ~= <var>obj2</var>
6235
</pre></td></tr></table>
6236
<p>Objects can be directly compared on equality or inequality. It is an identity
6237
comparison that acknowledges that you have two references of the same object.
6240
<dt> <b>Existence of an object</b></dt>
6241
<dd><table><tr><td> </td><td><pre class="example"><var>obj</var>:<b>exists</b>()
6242
-<var>obj</var> -- unary minus operator on object
6243
if -<var>obj</var> then ...
6244
</pre></td></tr></table>
6245
<p>Object references may get invalid due to objects being killed. In most cases
6246
this creates no problem as requests to invalid objects will simply be ignored.
6247
But if the level logic depends on the existence of an object you can call the
6248
‘<samp>exists()</samp>’ method or simply precede the reference by the unary minus
6249
‘<samp>-</samp>’ operator. Both ways return a simple bool value stating if the object
6250
reference is still valid.
6253
<dt> <b>Messages:</b></dt>
6254
<dd><table><tr><td> </td><td><pre class="example"><var>my_boulder</var>:<b>message</b>("<b>orientate</b>", <var>WEST</var>)
6255
<var>my_boulder</var>:<b>orientate</b>(<var>EAST</var>)
6256
<var>my_door</var>:<b>open</b>()
6257
</pre></td></tr></table>
6258
<p><a href="#Messages">Messages</a> are a main feature of Enigma. You can send them directly to any
6259
object by the ‘<samp>message()</samp>’ method or by using any message directly as a
6263
<dt> <b>Object Classification:</b></dt>
6264
<dd><table><tr><td> </td><td><pre class="example"><var>obj</var>:<b>is</b>("<b>st_chess</b>")
6265
<var>obj</var>:<b>is</b>("<b>st</b>")
6266
<var>obj</var>:<b>is</b>("<b>st_chess_black</b>")
6267
</pre></td></tr></table>
6268
<p>You create objects by giving an <a href="#Object-Kind">Object Kind</a>. Later on you can check a
6269
given object for conformity to a given class or kind. Even though you can not
6270
create abstract kind objects like ‘<samp>st</samp>’, you can check this way if an object
6271
is a stone. Checking for special subkinds may even evaluate the current state
6272
or other attributes of an object to report its current classification.
6278
<a name="Group-Tasks"></a>
6279
<table cellpadding="1" cellspacing="1" border="0">
6280
<tr><td valign="middle" align="left">[<a href="#Object-Tasks" title="Previous section in reading order"> < </a>]</td>
6281
<td valign="middle" align="left">[<a href="#Tiles-and-World-Tasks" title="Next section in reading order"> > </a>]</td>
6282
<td valign="middle" align="left"> </td>
6283
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
6284
<td valign="middle" align="left">[<a href="#API-2-Overview" title="Up section"> Up </a>]</td>
6285
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
6286
<td valign="middle" align="left"> </td>
6287
<td valign="middle" align="left"> </td>
6288
<td valign="middle" align="left"> </td>
6289
<td valign="middle" align="left"> </td>
6290
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
6291
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
6292
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
6293
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
6295
<a name="Group-Tasks-1"></a>
6296
<h3 class="subsection">5.2.5 Group Tasks</h3>
6298
<p>For reference details see section <a href="#Group">Group</a>.
6300
<dl compact="compact">
6301
<dt> <b>Creating Groups:</b></dt>
6303
<table><tr><td> </td><td><pre class="example"><var>group</var> = <i>no</i>["<b>Atrax</b>#*"] -- a group of all matching objects
6304
-- wildcards "*","?" allowed
6305
<var>group</var> = <i>grp</i>(<var>obj1</var>, <var>obj2</var>, <var>obj3</var>)
6306
<var>group</var> = <i>grp</i>({<var>obj1</var>, <var>obj2</var>, <var>obj3</var>}) -- a group of objects set up in a table
6307
</pre></td></tr></table>
6309
<p>Requesting objects from the named object repository will result in a group of
6310
objects if you make proper usage of wildcards. Appending an asterisk ‘<samp>*</samp>’
6311
to the autonaming hash will retrieve all objects that have been set with this
6312
name suffix. But you can create a group by the ‘<samp>grp</samp>’ function, too. Simply
6313
add the desired object reference as arguments, either single or as a table.
6316
<dt> <b>Group Usage:</b></dt>
6317
<dd><table><tr><td> </td><td><pre class="example"><var>floor_group</var>["<b>friction</b>"] = <var>3.2</var> -- set attribute on all floors in the group
6318
<var>door_group</var>:<b>message</b>("<b>open</b>")
6319
<var>door_group</var>:<b>open</b>()
6320
<var>stone_group</var>:<b>kill</b>()
6321
<i>wo</i>[<var>floor_group</var>] = {"<b>it_coin_m</b>"} -- add some money on all floor positions
6323
<i>wo</i>[<var>pos</var>] = {"<b>st_switch</b>", <b>target</b>=<var>door_group</var>, <b>action</b>="<b>open</b>"}
6324
<i>wo</i>[<var>pos</var>] = {"<b>st_switch</b>", <b>target</b>="<var>door</var>#*", <b>action</b>="<b>close</b>"}
6325
</pre></td></tr></table>
6326
<p>Many object operations can be applied to groups in the same manner. The
6327
operations will be applied to all members of the group. You set attributes,
6328
send messages or call any method.
6330
<p>The world object takes a group as key, too. You can set objects of a given
6331
definition to many positions at once.
6333
<p>Another usage of groups is the application as an attribute value. E.g. you can
6334
define multiple targets by supplying a group.
6337
<dt> <b>Group Operations:</b></dt>
6338
<dd><table><tr><td> </td><td><pre class="example"><var>doors_lasers</var> = <var>doorgrp</var> + <var>lasergrp</var> -- join of two groups
6339
<var>lasergrp</var> = <var>doors_lasers</var> - <var>doorgrp</var> -- difference of two groups
6340
<var>common_doors</var> = <var>doorgrp1</var> * <var>doorgrp2</var> -- intersection of two groups
6341
</pre></td></tr></table>
6342
<p>Groups offer some standard operations known from handling with sets.
6345
<dt> <b>Group Members:</b></dt>
6346
<dd><table><tr><td> </td><td><pre class="example"><var>count</var> = #<var>mygroup</var> -- number of objects in the group
6347
<var>obj</var> = <var>mygroup</var>[<var>5</var>] -- 5th object of the group
6348
<var>obj</var> = <var>mygroup</var>[<var>-1</var>] -- last object of the group
6349
for <var>i</var> = <var>1</var>, #<var>mygroup</var> do <var>obj</var> = <var>mygroup</var>[<var>i</var>] ... end
6350
for <var>obj</var> in <var>mygroup</var> do ... end
6351
</pre></td></tr></table>
6352
<p>You can access the members of a group by numbered indices. The size of a group
6353
is reported by the standard Lua hash ‘<samp>#</samp>’ operator. If you need to iterate
6354
over the objects of a group you can write easily Lua for loops. You can either
6355
iterate with a counter or directly iterate the content objects.
6358
<dt> <b>Shuffled Group:</b></dt>
6359
<dd><table><tr><td> </td><td><pre class="example"><var>shuffled_group</var> = <var>sorted_group</var>:<b>shuffle</b>()
6360
<var>shuffled_group</var> = <i>no</i>["<b>Atrax</b>#*"]:<b>shuffle</b>()
6361
</pre></td></tr></table>
6362
<p>Every group returns a shuffled group with the same members when receiving the
6363
message <code>"shuffle"</code>.
6366
<dt> <b>Sorted Group:</b></dt>
6367
<dd><table><tr><td> </td><td><pre class="example"><var>sorted_group</var> = <var>group</var>:<b>sort</b>("<b>linear</b>", po(<var>2</var>, <var>1</var>))
6368
<var>sorted_group</var> = <var>group</var>:<b>sort</b>("<b>linear</b>")
6369
<var>sorted_group</var> = <var>group</var>:<b>sort</b>("<b>circular</b>")
6370
<var>sorted_group</var> = <var>group</var>:<b>sort</b>()
6371
</pre></td></tr></table>
6372
<p>Sort group objects in linear order according to given direction vector, or
6373
direction determined by the first two objects. Or order objects circular around
6374
their center. If no argument is given order objects lexically.
6377
<dt> <b>Subset Group:</b></dt>
6378
<dd><table><tr><td> </td><td><pre class="example"><var>sub_group</var> = <var>group</var>:<b>sub</b>(<var>2</var>) -- first two objects
6379
<var>sub_group</var> = <var>group</var>:<b>sub</b>(<var>-2</var>) -- last two objects
6380
<var>sub_group</var> = <var>group</var>:<b>sub</b>(<var>2</var>, <var>4</var>) -- objects from 2 to 4
6381
<var>sub_group</var> = <var>group</var>:<b>sub</b>(<var>2</var>, <var>-2</var>) -- two objects starting with 2
6382
</pre></td></tr></table>
6383
<p>Build subgroup with given indices and numbers.
6386
<dt> <b>Nearest Object:</b></dt>
6387
<dd><table><tr><td> </td><td><pre class="example"><var>object</var> = <var>group</var>:<b>nearest</b>(<var>reference</var>)
6388
</pre></td></tr></table>
6389
<p>Search object in group that is nearest to the given reference object.
6394
<a name="Tiles-and-World-Tasks"></a>
6395
<table cellpadding="1" cellspacing="1" border="0">
6396
<tr><td valign="middle" align="left">[<a href="#Group-Tasks" title="Previous section in reading order"> < </a>]</td>
6397
<td valign="middle" align="left">[<a href="#Named-Positions-Tasks" title="Next section in reading order"> > </a>]</td>
6398
<td valign="middle" align="left"> </td>
6399
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
6400
<td valign="middle" align="left">[<a href="#API-2-Overview" title="Up section"> Up </a>]</td>
6401
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
6402
<td valign="middle" align="left"> </td>
6403
<td valign="middle" align="left"> </td>
6404
<td valign="middle" align="left"> </td>
6405
<td valign="middle" align="left"> </td>
6406
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
6407
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
6408
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
6409
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
6411
<a name="Tiles-and-World-Tasks-1"></a>
6412
<h3 class="subsection">5.2.6 Tiles and World Tasks</h3>
6414
<p>For reference details see section <a href="#Tile-and-Object-Declaration">Tile and Object Declaration</a>, <a href="#Tiles-Repository">Tiles Repository</a>
6415
and <a href="#World">World</a>.
6417
<dl compact="compact">
6418
<dt> <b>Tiles:</b></dt>
6419
<dd><table><tr><td> </td><td><pre class="example"><i>ti</i>["<var>_</var>"] = {"<b>fl_sahara</b>"}
6420
<i>ti</i>["<var>__</var>"] = {"<b>fl_sahara</b>"}
6421
<i>ti</i>["<var>..</var>"] = {"<b>fl_sand</b>"}
6422
<i>ti</i>["<var>##</var>"] = {"<b>st_blocker</b>"}
6423
<i>ti</i>["<var>switch_template</var>"] = {"<b>st_switch</b>"}
6424
<i>ti</i>["<var>..</var>"] = {"<b>fl_abyss</b>"} -- redefinition causes error to avoid common mistakes
6425
<i>ti</i>["<var>.w</var>"] = <i>ti</i>["<var>..</var>"] .. {"<b>it_magicwand</b>"}
6426
<i>ti</i>["<var> w</var>"] = {"<b>fl_abyss</b>"} .. <i>ti</i>({"<b>it_magicwand</b>"})
6427
</pre></td></tr></table>
6428
<p>The tiles repository ‘<samp>ti</samp>’ is like a table, but specialized on storage of
6429
tile definitions. You can use any string as key. You can store the same
6430
definition twice at different keys. But you are not allowed to redefine an
6431
already set key. This is pure protection of common error situations. A
6432
definition stored in the repository can be used in other definitions that
6433
follow. Referencing a tiles repository entry at a given key like ‘<samp>ti[".."]</samp>’
6434
results in a tile value. Such tile values can be concatenated by the ‘<samp>..</samp>’
6435
operator with other tile values and anonymous tables containing object
6436
definitions. The last example is a concatenation of two prior not declared
6437
object definitions. You can not concatenate two anonymous tables. Lua forbids
6438
that. By converting any of the two tables by the ‘<samp>ti()</samp>’ to a tile value the
6439
concatenation gets valid.
6442
<dt> <b>World Initialization</b></dt>
6443
<dd><table><tr><td> </td><td><pre class="example"> <var>width</var>, <var>height</var> = <i>wo</i>(<i>ti</i>, "<var>__</var>", { -- second arg: default tile key that
6444
"<var>##__......</var>", -- defines the base, too - this example
6445
"<var>##..__.w__</var>", -- is 2 chars per tile/grid
6446
"<var>##.. w__..</var>"
6448
</pre></td></tr></table>
6449
<p>The world is initialized by the ‘<samp>wo()</samp>’ call that is explained in details
6450
at <a href="#World-Creation">World Creation</a>. In the simple form you supply
6451
the ‘<samp>ti</samp>’ handle as the first argument. The second argument is the key of
6452
the default tile definition that defines the default floor to be set if a tile
6453
does not contain another floor object. At the same time this key defines by its
6454
length the standard key length as used in the following map, too. The third
6455
argument is the map given as an anonymous table of strings. The worlds size is
6456
given by the maximum line length and the number of lines. These values are
6457
returned by the call.
6463
<a name="Named-Positions-Tasks"></a>
6464
<table cellpadding="1" cellspacing="1" border="0">
6465
<tr><td valign="middle" align="left">[<a href="#Tiles-and-World-Tasks" title="Previous section in reading order"> < </a>]</td>
6466
<td valign="middle" align="left">[<a href="#Advanced-Lua-Examples" title="Next section in reading order"> > </a>]</td>
6467
<td valign="middle" align="left"> </td>
6468
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
6469
<td valign="middle" align="left">[<a href="#API-2-Overview" title="Up section"> Up </a>]</td>
6470
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
6471
<td valign="middle" align="left"> </td>
6472
<td valign="middle" align="left"> </td>
6473
<td valign="middle" align="left"> </td>
6474
<td valign="middle" align="left"> </td>
6475
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
6476
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
6477
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
6478
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
6480
<a name="Named-Positions-Tasks-1"></a>
6481
<h3 class="subsection">5.2.7 Named Positions Tasks</h3>
6483
<p>For reference details see section <a href="#PositionList">PositionList</a>.
6485
<dl compact="compact">
6486
<dt> <b>Named Position Usage:</b></dt>
6487
<dd><table><tr><td> </td><td><pre class="example"><var>obj</var>["<b>name</b>"] = "<var>anchor1</var>"
6488
<var>obj</var>:<b>kill</b>()
6489
<var>pos</var> = <i>po</i>["<var>anchor1</var>"]
6490
<i>po</i>["<var>anchor2</var>"] = <var>pos</var>
6491
</pre></td></tr></table>
6492
<p>The position of any named object can be directly retrieved. The position is
6493
still accessible under the name, when the object gets killed. You can
6494
additionally name own positions. Note that the position of an existing object
6495
precedes a position stored under the same name.
6498
<dt> <b>Creating Position Lists:</b></dt>
6499
<dd><table><tr><td> </td><td><pre class="example"><var>polist</var> = <i>po</i>["<var>deepwater</var>#*"]
6500
<var>polist</var> = <i>po</i>(<var>grp</var>)
6501
</pre></td></tr></table>
6502
<p>Requesting positions will result in a list of positions if you make proper usage
6503
of wildcards. A given object group can be converted into a position list, too.
6506
<dt> <b>Position List Usage:</b></dt>
6507
<dd><table><tr><td> </td><td><pre class="example"><i>wo</i>[<var>polist</var>] = <i>ti</i>["<var>x</var>"]
6508
<var>grp</var> = <i>fl</i>(<var>polist</var>)
6509
</pre></td></tr></table>
6510
<p>You can use a list of positions to set tiles or to retrieve a group of floors,
6514
<dt> <b>Position List Operations:</b></dt>
6515
<dd><table><tr><td> </td><td><pre class="example"><i>wo</i>[<var>polist</var> .. <i>po</i>["<var>beach</var>#*"]] = {"<b>it_banana</b>"}
6516
</pre></td></tr></table>
6517
<p>Two position lists can be appended. Single positions can be appended to a given
6521
<dt> <b>Position List Members:</b></dt>
6522
<dd><table><tr><td> </td><td><pre class="example">for <var>i</var> = 1, #<var>polist</var> do
6523
<i>wo</i>[<var>polist</var>[<var>i</var>]] = {"<b>it_cherry</b>"}
6525
</pre></td></tr></table>
6526
<p>Single positions within the list can be accessed by index. The whole list can
6527
be traversed by a simple for loop. The hash length operator reports the number
6528
of contained positions.
6535
<a name="Advanced-Lua-Examples"></a>
6536
<table cellpadding="1" cellspacing="1" border="0">
6537
<tr><td valign="middle" align="left">[<a href="#Named-Positions-Tasks" title="Previous section in reading order"> < </a>]</td>
6538
<td valign="middle" align="left">[<a href="#Color-Maze" title="Next section in reading order"> > </a>]</td>
6539
<td valign="middle" align="left"> </td>
6540
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
6541
<td valign="middle" align="left">[<a href="#Lua-API" title="Up section"> Up </a>]</td>
6542
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
6543
<td valign="middle" align="left"> </td>
6544
<td valign="middle" align="left"> </td>
6545
<td valign="middle" align="left"> </td>
6546
<td valign="middle" align="left"> </td>
6547
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
6548
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
6549
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
6550
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
6552
<a name="Advanced-Lua-Examples-1"></a>
6553
<h2 class="section">5.3 Advanced Lua Examples</h2>
6555
<p>Now it is time to reveal the real power of the new API. Let us look again at
6556
two real levels. Investigate the levels first by playing and then join
6557
in the line by line commentary of the source code to understand how to
6558
implement your own level ideas.
6560
<table class="menu" border="0" cellspacing="0">
6561
<tr><td align="left" valign="top"><a href="#Color-Maze">5.3.1 Color Maze</a></td><td> </td><td align="left" valign="top"> Enigma levelpack VIII, level #19
6563
<tr><td align="left" valign="top"><a href="#Weirdly-Wired">5.3.2 Weirdly Wired</a></td><td> </td><td align="left" valign="top"> Enigma levelpack VIII, level #22
6569
<a name="Color-Maze"></a>
6570
<table cellpadding="1" cellspacing="1" border="0">
6571
<tr><td valign="middle" align="left">[<a href="#Advanced-Lua-Examples" title="Previous section in reading order"> < </a>]</td>
6572
<td valign="middle" align="left">[<a href="#Weirdly-Wired" title="Next section in reading order"> > </a>]</td>
6573
<td valign="middle" align="left"> </td>
6574
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
6575
<td valign="middle" align="left">[<a href="#Advanced-Lua-Examples" title="Up section"> Up </a>]</td>
6576
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
6577
<td valign="middle" align="left"> </td>
6578
<td valign="middle" align="left"> </td>
6579
<td valign="middle" align="left"> </td>
6580
<td valign="middle" align="left"> </td>
6581
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
6582
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
6583
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
6584
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
6586
<a name="Color-Maze-1"></a>
6587
<h3 class="subsection">5.3.1 Color Maze</h3>
6589
<p>Let us view the Lua source code part. We did add a line count in the first two
6590
columns for reference purpose within this section. These line count numbers are
6591
not part of the source code itself!
6593
<table><tr><td> </td><td><pre class="example">01 <i>wo</i>["<b>ConserveLevel</b>"] = <var>false</var>
6594
02 <i>wo</i>["<b>FollowGrid</b>"] = <var>false</var>
6595
03 <i>wo</i>["<b>FollowMethod</b>"] = <var>FOLLOW_SCROLL</var>
6597
05 <i>ti</i>["<var> </var>"] = {"<b>fl_fake_abyss</b>"} .. <i>ti</i>({"<b>st_lightglass</b>"})
6599
07 <i>ti</i>["<var>!</var>"] = {"<b>fl_blueslab</b>", "<var>blue#</var>", <var>_color</var>="<var>blue</var>"}
6600
08 <i>ti</i>["<var>@</var>"] = {"<b>fl_pinkbumps</b>", "<var>orange#</var>", <var>_color</var>="<var>orange</var>"}
6601
09 <i>ti</i>["<var>#</var>"] = {"<b>fl_redslab</b>", "<var>red#</var>", <var>_color</var>="<var>red</var>"}
6602
10 <i>ti</i>["<var>$</var>"] = {"<b>fl_lawn_b</b>", "<var>green#</var>", <var>_color</var>="<var>green</var>"}
6604
12 <i>ti</i>["<var>b</var>"] = <i>ti</i>["<var>!</var>"] .. {"<b>st_door</b>", <b>flavor</b>="<var>d</var>", <b>faces</b>="<var>ns</var>", <b>state</b>=<var>OPEN</var>}
6605
13 <i>ti</i>["<var>B</var>"] = <i>ti</i>["<var>!</var>"] .. {"<b>st_door</b>", <b>flavor</b>="<var>d</var>", <b>faces</b>="<var>ew</var>", <b>state</b>=<var>OPEN</var>}
6606
14 <i>ti</i>["<var>o</var>"] = <i>ti</i>["<var>@</var>"] .. {"<b>st_door</b>", <b>flavor</b>="<var>d</var>", <b>faces</b>="<var>ns</var>", <b>state</b>=<var>OPEN</var>}
6607
15 <i>ti</i>["<var>O</var>"] = <i>ti</i>["<var>@</var>"] .. {"<b>st_door</b>", <b>flavor</b>="<var>d</var>", <b>faces</b>="<var>ew</var>", <b>state</b>=<var>OPEN</var>}
6608
16 <i>ti</i>["<var>r</var>"] = <i>ti</i>["<var>#</var>"] .. {"<b>st_door</b>", <b>flavor</b>="<var>d</var>", <b>faces</b>="<var>ns</var>", <b>state</b>=<var>OPEN</var>}
6609
17 <i>ti</i>["<var>R</var>"] = <i>ti</i>["<var>#</var>"] .. {"<b>st_door</b>", <b>flavor</b>="<var>d</var>", <b>faces</b>="<var>ew</var>", <b>state</b>=<var>OPEN</var>}
6610
18 <i>ti</i>["<var>g</var>"] = <i>ti</i>["<var>$</var>"] .. {"<b>st_door</b>", <b>flavor</b>="<var>d</var>", <b>faces</b>="<var>ns</var>", <b>state</b>=<var>OPEN</var>}
6611
19 <i>ti</i>["<var>G</var>"] = <i>ti</i>["<var>$</var>"] .. {"<b>st_door</b>", <b>flavor</b>="<var>d</var>", <b>faces</b>="<var>ew</var>", <b>state</b>=<var>OPEN</var>}
6613
21 <i>ti</i>["<var>d</var>"] = {"<b>it_document</b>", <b>text</b>="<var>text1</var>"}
6614
22 <i>ti</i>["<var>5</var>"] = <i>ti</i>["<var>b</var>"] .. <i>ti</i>["<var>d</var>"]
6615
23 <i>ti</i>["<var>6</var>"] = <i>ti</i>["<var>O</var>"] .. <i>ti</i>["<var>d</var>"]
6616
24 <i>ti</i>["<var>7</var>"] = <i>ti</i>["<var>r</var>"] .. <i>ti</i>["<var>d</var>"]
6617
25 <i>ti</i>["<var>8</var>"] = <i>ti</i>["<var>G</var>"] .. <i>ti</i>["<var>d</var>"]
6619
27 <i>ti</i>["<var>x</var>"] = {"<b>it_sensor</b>", <b>invisible</b>=<var>true</var>, <b>target</b>="<var>gates</var>"}
6620
28 <i>ti</i>["<var>*</var>"] = <i>ti</i>["<var>x</var>"] .. {"#<b>ac_marble_black</b>", "<var>me</var>"}
6622
30 <i>ti</i>["<var>?</var>"] = {"<b>st_oxyd_a</b>"}
6624
32 <i>wo</i>(<i>ti</i>, "<var> </var>", {
6627
35 "<var> </var>",
6628
36 "<var> xO@OxR#RxO@OxB!BxR#RxB!Bx </var>", --01
6629
37 "<var> b r g g b g r </var>",
6630
38 "<var> ! # $ $ ! $ # </var>",
6631
39 "<var> b r g g b g r </var>",
6632
40 "<var> xR#RxB!BxO@OxG$GxO@OxO@Ox </var>", --05
6633
41 "<var> g g r g g b b </var>",
6634
42 "<var> $ $ # $ $ ! ! </var>",
6635
43 "<var> g g r g g b b </var>",
6636
44 "<var> xR#RxO@OxG$GxR#RxG$GxR#Rx </var>",
6637
45 "<var> g b b o b r </var>", --10
6638
46 "<var> $ ! ! @ ! # </var>",
6639
47 "<var> g b 5 o ? b r </var>", --
6640
48 "<var> xO@OxO@6*8$Gx xG$GxR#Rx </var>",
6641
49 "<var> r b 7 b ? o o </var>",
6642
50 "<var> # ! # ! @ @ </var>", --15
6643
51 "<var> r b r b o o </var>",
6644
52 "<var> xG$GxB!BxR#RxO@OxR#RxG$Gx </var>",
6645
53 "<var> g o o g g o b </var>",
6646
54 "<var> $ @ @ $ $ @ ! </var>",
6647
55 "<var> g o o g g o b </var>", --20
6648
56 "<var> xB!BxO@OxR#RxR#RxO@OxB!Bx </var>",
6649
57 "<var> o r g g b b g </var>",
6650
58 "<var> @ # $ $ ! ! $ </var>",
6651
59 "<var> o r g g b b g </var>", --
6652
60 "<var> xR#RxB!BxB!BxR#RxO@OxR#Rx </var>", --25
6653
61 "<var> </var>"} --
6658
66 <var>last</var> = <b>it</b>(<i>no</i>["<var>me</var>"]) -- the last visited sensor
6659
67 <var>move</var> = <var>0</var> -- the count of link moves
6660
68 <var>sequence</var> = {} -- the sequence of the 4 colors that the user did choose
6662
70 function <var>gates</var>(<var>value</var>, <var>sender</var>)
6663
71 if <var>last</var> ~= <var>sender</var> then
6664
72 local <var>middle</var> = <var>last</var> + (<var>sender</var> - <var>last</var>)/<var>2</var>
6665
73 local <var>color</var> = <b>fl</b>(<var>middle</var>)["<var>_color</var>"]
6666
74 if <var>color</var> == <var>nil</var> then return end -- someone cheated, avoid throwing an exception
6667
75 <b>st</b>(<i>no</i>[<var>color</var>.."<var>#*</var>"]):<b>close</b>()
6668
76 <var>sequence</var>[<var>move</var>%<var>4</var>] = <var>color</var>
6669
77 if <var>move</var> >= <var>3</var> then
6670
78 <b>st</b>(<i>no</i>[<var>sequence</var>[(<var>move</var>+<var>1</var>)%<var>4</var>].."<var>#*</var>"]):<b>open</b>()
6672
80 <var>move</var> = <var>move</var> + <var>1</var>
6673
81 <var>last</var> = <var>sender</var>
6676
</pre></td></tr></table>
6678
<p>Let us concentrate on new aspects not discussed in the previous
6679
<a href="#Basic-Lua-Examples">Basic Lua Examples</a>.
6681
<table><tr><td> </td><td><pre class="example">01 <i>wo</i>["<b>ConserveLevel</b>"] = <var>false</var>
6682
02 <i>wo</i>["<b>FollowGrid</b>"] = <var>false</var>
6683
03 <i>wo</i>["<b>FollowMethod</b>"] = <var>FOLLOW_SCROLL</var>
6684
</pre></td></tr></table>
6685
<p>This level must forbid the user to resurrect a marble at the start position.
6686
At the same time the user should see the area around the marble as complete as
6687
possible. Thus the scroll mode needs to be set, too. All this is done by
6688
setting special <a href="#Global-Attributes">Global Attributes</a>.
6690
<table><tr><td> </td><td><pre class="example">05 <i>ti</i>["<var> </var>"] = {"<b>fl_fake_abyss</b>"} .. <i>ti</i>({"<b>st_lightglass</b>"})
6691
32 <i>wo</i>(<i>ti</i>, "<var> </var>", {
6692
</pre></td></tr></table>
6693
<p>The inaccessible areas are filled with a transparent glass on top of a black
6694
floor as defined in line 5. The world initialization uses this tile definition
6695
as the default tile. This is o.k. as it contains a floor definition. Additional
6696
objects like the glass stone will never be set on default usage.
6698
<table><tr><td> </td><td><pre class="example">07 <i>ti</i>["<var>!</var>"] = {"<b>fl_blueslab</b>", "<var>blue#</var>", <var>_color</var>="<var>blue</var>"}
6699
08 <i>ti</i>["<var>@</var>"] = {"<b>fl_pinkbumps</b>", "<var>orange#</var>", <var>_color</var>="<var>orange</var>"}
6700
09 <i>ti</i>["<var>#</var>"] = {"<b>fl_redslab</b>", "<var>red#</var>", <var>_color</var>="<var>red</var>"}
6701
10 <i>ti</i>["<var>$</var>"] = {"<b>fl_lawn_b</b>", "<var>green#</var>", <var>_color</var>="<var>green</var>"}
6702
</pre></td></tr></table>
6703
<p>Every floor object is autonamed for later group access purposes. Additionally
6704
every floor object sets a user attribute prefixed in its name by an underscore
6705
‘<samp>_</samp>’. This attribute stores a string that we need later on in the callback
6708
<table><tr><td> </td><td><pre class="example">12 <i>ti</i>["<var>b</var>"] = <i>ti</i>["<var>!</var>"] .. {"<b>st_door</b>", <b>flavor</b>="<var>d</var>", <b>faces</b>="<var>ns</var>", <b>state</b>=<var>OPEN</var>}
6709
13 <i>ti</i>["<var>B</var>"] = <i>ti</i>["<var>!</var>"] .. {"<b>st_door</b>", <b>flavor</b>="<var>d</var>", <b>faces</b>="<var>ew</var>", <b>state</b>=<var>OPEN</var>}
6710
</pre></td></tr></table>
6711
<p>The doors are set without being named, as we will target them by their position.
6713
<table><tr><td> </td><td><pre class="example">27 <i>ti</i>["<var>x</var>"] = {"<b>it_sensor</b>", <b>invisible</b>=<var>true</var>, <b>target</b>="<var>gates</var>"}
6714
</pre></td></tr></table>
6715
<p>The actors moves are detected by invisible <a href="#it_005fsensor">it_sensor</a>s that are positioned
6716
on any intersection. The target is the <a href="#Callback-Function">Callback Function</a> ‘<samp>gates</samp>’.
6717
The action can be omitted as the function name is a unique target.
6719
<table><tr><td> </td><td><pre class="example">66 <var>last</var> = <b>it</b>(<i>no</i>["<var>me</var>"]) -- the last visited sensor
6720
</pre></td></tr></table>
6721
<p>A Lua variable that stores the last sensor visited by the marble. This is
6722
initially the sensor beneath the start position of the marble. We do get the
6723
marble by name, but do store the sensor item beneath it, that is an unnamed
6726
<table><tr><td> </td><td><pre class="example">67 <var>move</var> = <var>0</var> -- the count of link moves
6727
68 <var>sequence</var> = {} -- the sequence of the 4 colors that the user did choose
6728
</pre></td></tr></table>
6729
<p>These are the essential variables for our algorithm. The user is free in
6730
selecting the sequence of the colored floors. We do initialize the sequence
6731
by an anonymous table that will be filled with the color names. An additional
6732
move counter will give us the current index into this table.
6734
<table><tr><td> </td><td><pre class="example">70 function <var>gates</var>(<var>value</var>, <var>sender</var>)
6735
71 if <var>last</var> ~= <var>sender</var> then
6736
</pre></td></tr></table>
6737
<p>The callback function provides the sender, the <a href="#it_005fsensor">it_sensor</a>, that caused
6738
the action. It is the current sensor. As the marble can return to the last
6739
sensor, we have to check that it is a new sensor before taking any actions.
6740
A simple object comparison suffices.
6742
<table><tr><td> </td><td><pre class="example">72 local <var>middle</var> = <var>last</var> + (<var>sender</var> - <var>last</var>)/<var>2</var>
6743
73 local <var>color</var> = <b>fl</b>(<var>middle</var>)["<var>_color</var>"]
6744
</pre></td></tr></table>
6745
<p>We need to know the color of the floor strip that the marble did pass. We do
6746
calculate the position of the middle of this floor strip by position calculation.
6747
We simply take the middle position between the last and the current intersection.
6748
Once we have the middle position we can get the floor object and retrieve the
6749
private user attribute with the color description.
6751
<table><tr><td> </td><td><pre class="example">74 if <var>color</var> == <var>nil</var> then return end -- someone cheated, avoid throwing an exception
6752
</pre></td></tr></table>
6753
<p>In regular play we are guaranteed to get a color value. But just in case a
6754
gamer cheats he may have moved irregular without visiting neighboring sensors.
6755
Just avoid errors. The gamer can not score anyway.
6757
<table><tr><td> </td><td><pre class="example">75 <b>st</b>(<i>no</i>[<var>color</var>.."<var>#*</var>"]):<b>close</b>()
6758
</pre></td></tr></table>
6759
<p>Knowing the color we want to close all doors on same colored floor strips. We
6760
did autoname the floors by matching name prefixes. Thus we can retrieve all
6761
floors of a given color by concatenating the color string with the suffix
6762
‘<samp>#*</samp>’ and requesting the named object repository. As we are interested in
6763
the doors we do request the stone above every floor. We provide a group of
6764
floors and get a group of stones. Not every floor has a door on top. That does
6765
not matter as only existing objects are added to the resulting stone group.
6766
Knowing the stones we just send them all a ‘<samp>close</samp>’ message.
6768
<table><tr><td> </td><td><pre class="example">76 <var>sequence</var>[<var>move</var>%<var>4</var>] = <var>color</var>
6769
</pre></td></tr></table>
6770
<p>We need to remember the sequence of colors. We just store the color name in
6771
the table at the index given by the move count modulo 4. Yes we could limit
6772
this statement to the first four moves. But who cares? The modulo operation
6773
is simpler than a conditional expression.
6775
<table><tr><td> </td><td><pre class="example">77 if <var>move</var> >= <var>3</var> then
6776
78 <b>st</b>(<i>no</i>[<var>sequence</var>[(<var>move</var>+<var>1</var>)%<var>4</var>].."<var>#*</var>"]):<b>open</b>()
6778
</pre></td></tr></table>
6779
<p>On the first 3 moves we just do close doors and remember the color sequence.
6780
But starting with the 4th move we need to open the next color in sequence.
6781
We do retrieve the color string of the next color from the sequence table by
6782
a simple modulo calculation. Having the color name we do the same trick as in
6783
line 75. But this time we do send the ‘<samp>open</samp>’ messages to all affected doors.
6785
<table><tr><td> </td><td><pre class="example">80 <var>move</var> = <var>move</var> + <var>1</var>
6786
81 <var>last</var> = <var>sender</var>
6787
</pre></td></tr></table>
6788
<p>Finally we just have to increase the move count and to remember the current
6789
sender as the last visited sensor.
6791
<p>That is all to code a quite complex dynamic level idea like "Color Maze".
6794
<a name="Weirdly-Wired"></a>
6795
<table cellpadding="1" cellspacing="1" border="0">
6796
<tr><td valign="middle" align="left">[<a href="#Color-Maze" title="Previous section in reading order"> < </a>]</td>
6797
<td valign="middle" align="left">[<a href="#Introduction-to-Datatypes" title="Next section in reading order"> > </a>]</td>
6798
<td valign="middle" align="left"> </td>
6799
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
6800
<td valign="middle" align="left">[<a href="#Advanced-Lua-Examples" title="Up section"> Up </a>]</td>
6801
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
6802
<td valign="middle" align="left"> </td>
6803
<td valign="middle" align="left"> </td>
6804
<td valign="middle" align="left"> </td>
6805
<td valign="middle" align="left"> </td>
6806
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
6807
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
6808
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
6809
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
6811
<a name="Weirdly-Wired-1"></a>
6812
<h3 class="subsection">5.3.2 Weirdly Wired</h3>
6813
<p>You should have restarted this level several times to notice the design changes
6814
of the floor pattern and the border panel stones besides the dynamic wiring of
6817
<p>Let us view the Lua source code part. We did add a line count in the first two
6818
columns for reference purpose within this section. These line count number are
6819
not part of the source code itself!
6821
<table><tr><td> </td><td><pre class="example">01 <el:compatibility el:enigma="1.10">
6822
02 <el:dependency el:path="lib/libmath" el:id="lib/libmath" el:release="1" el:preload="true"/>
6823
03 </el:compatibility>
6825
04 <i>ti</i>["<var> </var>"] = {"<b>fl_sahara</b>", <b>friction</b> = <var>3.5</var>, <b>adhesion</b> = <var>4.0</var>}
6826
05 <i>ti</i>["<var>a</var>"] = {"<b>fl_ivory</b>", <b>friction</b> = <var>3.5</var>, <b>adhesion</b> = <var>4.0</var>}
6827
06 <i>ti</i>["<var>b</var>"] = {"<b>fl_bright</b>", <b>friction</b> = <var>3.5</var>, <b>adhesion</b> = <var>4.0</var>}
6828
07 <i>ti</i>["<var>c</var>"] = {"<b>fl_platinum</b>", <b>friction</b> = <var>3.5</var>, <b>adhesion</b> = <var>4.0</var>}
6829
08 <i>ti</i>["<var>_</var>"] = {"<b>fl_water</b>"}
6830
09 <i>ti</i>["<var>@</var>"] = {"#<b>ac_marble_black</b>"}
6831
10 <i>ti</i>["<var>w</var>"] = {"<b>st_flat_movable</b>", "<var>wood</var>#"}
6832
11 <i>ti</i>["<var>t</var>"] = {"<b>it_trigger</b>", "<var>trigger</var>#"}
6833
12 <i>ti</i>["<var>d</var>"] = {"<b>st_blocker</b>", "<var>door</var>#"}
6834
13 <i>ti</i>["<var>o</var>"] = {"<b>st_oxyd</b>", <b>oxydcolor</b> = <var>OXYD_YELLOW</var>, <b>flavor</b> = "<var>a</var>"}
6835
14 <i>ti</i>["<var>O</var>"] = {"<b>st_oxyd</b>", <b>oxydcolor</b> = <var>OXYD_WHITE</var>, <b>flavor</b> = "<var>a</var>"}
6836
15 <i>ti</i>["<var>1</var>"] = {"<b>st_panel</b>", <b>cluster</b> = <var>1</var>}
6837
16 <i>ti</i>["<var>2</var>"] = {"<b>st_panel</b>", <b>cluster</b> = <var>2</var>}
6838
17 <i>ti</i>["<var>S</var>"] = {"<b>st_switch</b>", <b>target</b> = "<var>easy_mode_call</var>"}
6840
19 <var>floors</var> = {<i>ti</i>["<var> </var>"], <i>ti</i>["<var>a</var>"], <i>ti</i>["<var>b</var>"], <i>ti</i>["<var>c</var>"]}
6841
20 <var>polynom</var> = <i>lib</i>.<i>math</i>.<i>random_vector</i>(<var>10</var>, <var>4</var>)
6843
22 function <var>myresolver</var>(<var>key</var>, <var>x</var>, <var>y</var>)
6844
23 if <var>key</var> == "<var> </var>" then
6845
24 return <var>floors</var>[<i>lib</i>.<i>math</i>.<i>cubic_polynomial</i>(<var>polynom</var>, <var>x</var>, <var>y</var>) % (#<var>floors</var>) + <var>1</var>]
6846
25 elseif (<var>key</var> == "<var>#</var>")
6847
26 or ((<var>key</var> == "<var>_</var>") and (<i>random</i>(<var>4</var>) == <var>1</var>))
6848
27 or ((<var>key</var> == "<var>S</var>") and <i>wo</i>["<b>IsDifficult</b>"]) then
6849
28 return <i>ti</i>[""..<i>random</i>(<var>2</var>)]
6851
30 return <i>ti</i>[<var>key</var>]
6855
34 <var>w</var>, <var>h</var> = <i>wo</i>(<var>myresolver</var>, "<var> </var>", {
6856
35 -- 01234567890123456789
6857
36 "<var>####################___________________</var>",
6858
37 "<var># #_____###o###_______</var>",
6859
38 "<var># w w t t #_____#d d#_______</var>",
6860
39 "<var># w w t t #___### ### ###_____</var>",
6861
40 "<var># w t #___#d d#_#d d#_____</var>",
6862
41 "<var># ##### ###_### ###___</var>",
6863
42 "<var>S w w t @ t d#___#_#d d#___</var>",
6864
43 "<var># #######_####### #___</var>",
6865
44 "<var># w t #_______O d# # o___</var>",
6866
45 "<var># w w t t #_______### ### #___</var>",
6867
46 "<var># w w t t #_________#d d#___</var>",
6868
47 "<var># #_________###O###___</var>",
6869
48 "<var>####################___________________</var>"
6872
51 <var>door_p</var> = <i>lib</i>.<i>math</i>.<i>permutation</i>(<var>12</var>)
6873
52 <var>wire_p</var> = <i>lib</i>.<i>math</i>.<i>permutation</i>(<var>12</var>)
6874
53 <var>woods</var> = <i>no</i>["<var>wood</var>#*"]
6875
54 <var>triggers</var> = <i>no</i>["<var>trigger</var>#*"]
6876
55 <var>doors</var> = <i>no</i>["<var>door</var>#*"]
6878
57 for <var>j</var> = <var>1</var>, <var>12</var> do
6879
58 <var>triggers</var>[<var>j</var>].<b>target</b> = <var>doors</var>[<var>door_p</var>[<var>j</var>]]
6882
61 for <var>j</var> = <var>1</var>, <var>9</var> do
6883
62 <i>wo</i>:<b>add</b>({"<b>ot_wire</b>",
6884
63 <b>anchor1</b> = <var>woods</var>[<var>wire_p</var>[<var>j</var> + <var>3</var>]],
6885
64 <b>anchor2</b> = <var>woods</var>[<var>wire_p</var>[<var>j</var>%<var>3</var> + <var>1</var>]]})
6886
65 <i>wo</i>:<b>add</b>({"<b>ot_wire</b>", <b>name</b> = "<var>obsolete_wire</var>#",
6887
66 <b>anchor1</b> = <var>woods</var>[<var>wire_p</var>[<var>j</var> + <var>3</var>]],
6888
67 <b>anchor2</b> = <var>woods</var>[<var>wire_p</var>[<var>j</var>%<var>9</var> + <var>4</var>]]})
6891
70 function <var>easy_mode_call</var>(<var>is_on</var>, <var>sender</var>)
6892
71 if <var>is_on</var> then
6893
72 <i>no</i>["<var>obsolete_wire</var>#*"]:<b>kill</b>()
6895
74 for <var>j</var> = <var>1</var>, <var>9</var> do
6896
75 <i>wo</i>:<b>add</b>({"<b>ot_wire</b>", <b>name</b> = "<var>obsolete_wire</var>#",
6897
76 <b>anchor1</b> = <var>woods</var>[<var>wire_p</var>[<var>j</var> + <var>3</var>]],
6898
77 <b>anchor2</b> = <var>woods</var>[<var>wire_p</var>[<var>j</var>%<var>9</var> + <var>4</var>]]})
6902
</pre></td></tr></table>
6903
<p>How is this versatility in design and action achieved as the last lines 69 to
6904
79 obviously deal just with the easy mode diffs? Let us analyse the lines
6905
that do the real work.
6907
<table><tr><td> </td><td><pre class="example">01 <el:compatibility el:enigma="1.10">
6908
02 <el:dependency el:path="lib/libmath" el:id="lib/libmath" el:release="1" el:preload="true"/>
6909
03 </el:compatibility>
6910
</pre></td></tr></table>
6911
<p>We make use of some functions of the <a href="#libmath">libmath</a> library. Thus we need to
6912
preload it, besides declaration of compatibility to Enigma 1.10.
6914
<table><tr><td> </td><td><pre class="example">04 <i>ti</i>["<var> </var>"] = {"<b>fl_sahara</b>", <b>friction</b> = <var>3.5</var>, <b>adhesion</b> = <var>4.0</var>}
6915
05 <i>ti</i>["<var>a</var>"] = {"<b>fl_ivory</b>", <b>friction</b> = <var>3.5</var>, <b>adhesion</b> = <var>4.0</var>}
6916
06 <i>ti</i>["<var>b</var>"] = {"<b>fl_bright</b>", <b>friction</b> = <var>3.5</var>, <b>adhesion</b> = <var>4.0</var>}
6917
07 <i>ti</i>["<var>c</var>"] = {"<b>fl_platinum</b>", <b>friction</b> = <var>3.5</var>, <b>adhesion</b> = <var>4.0</var>}
6918
</pre></td></tr></table>
6919
<p>Four floor types that the dynamic floor is composed of. They all are unified
6920
in the ‘<samp>friction</samp>’ and ‘<samp>adhesion</samp>’ to provide smooth movement on the
6923
<table><tr><td> </td><td><pre class="example">10 <i>ti</i>["<var>w</var>"] = {"<b>st_flat_movable</b>", "<var>wood</var>#"}
6924
11 <i>ti</i>["<var>t</var>"] = {"<b>it_trigger</b>", "<var>trigger</var>#"}
6925
12 <i>ti</i>["<var>d</var>"] = {"<b>st_blocker</b>", "<var>door</var>#"}
6926
</pre></td></tr></table>
6927
<p>The movable stone that will be wired, the target triggers and the doors to be
6928
opened. All are autonamed for group retrieval from the named object repository.
6930
<table><tr><td> </td><td><pre class="example">13 <i>ti</i>["<var>o</var>"] = {"<b>st_oxyd</b>", <b>oxydcolor</b> = <var>OXYD_YELLOW</var>, <b>flavor</b> = "<var>a</var>"}
6931
14 <i>ti</i>["<var>O</var>"] = {"<b>st_oxyd</b>", <b>oxydcolor</b> = <var>OXYD_WHITE</var>, <b>flavor</b> = "<var>a</var>"}
6932
</pre></td></tr></table>
6933
<p>A minor design aspect: selecting two unique colors for the <a href="#st_005foxyd">st_oxyd</a>s.
6935
<table><tr><td> </td><td><pre class="example">15 <i>ti</i>["<var>1</var>"] = {"<b>st_panel</b>", <b>cluster</b> = <var>1</var>}
6936
16 <i>ti</i>["<var>2</var>"] = {"<b>st_panel</b>", <b>cluster</b> = <var>2</var>}
6937
</pre></td></tr></table>
6938
<p>The base of the prominent all time different looking <a href="#st_005fpanel">st_panel</a> border
6939
design. Two tiles with panel stones assigned to two different clusters. The
6940
engine will automatically join all neighboring stones of the same cluster to
6941
big unified blocks. Now we just need to assign these tiles to the different
6944
<table><tr><td> </td><td><pre class="example">17 <i>ti</i>["<var>S</var>"] = {"<b>st_switch</b>", <b>target</b> = "<var>easy_mode_call</var>"}
6945
</pre></td></tr></table>
6946
<p>The left border switch that will just be used in easy mode. It is blocked in
6947
line 27 to not appear in the regular mode. The target is the callback function
6950
<table><tr><td> </td><td><pre class="example">19 <var>floors</var> = {<i>ti</i>["<var> </var>"], <i>ti</i>["<var>a</var>"], <i>ti</i>["<var>b</var>"], <i>ti</i>["<var>c</var>"]}
6951
20 <var>polynom</var> = <i>lib</i>.<i>math</i>.<i>random_vector</i>(<var>10</var>, <var>4</var>)
6952
</pre></td></tr></table>
6953
<p>Preparations for the floor design. The four floor tiles are stored in a table
6954
for number based index access. Ten random numbers in the range 1 to 4 are
6955
stored in a table, which we will use as polynom coefficients later on.
6957
<table><tr><td> </td><td><pre class="example">22 function <var>myresolver</var>(<var>key</var>, <var>x</var>, <var>y</var>)
6958
34 <var>w</var>, <var>h</var> = <i>wo</i>(<var>myresolver</var>, "<var> </var>", {
6959
</pre></td></tr></table>
6960
<p>Up to now we did look up the keys used in the map from our tiles repository
6961
‘<samp>ti</samp>’ that was the first argument of the world initialization call. But
6962
now we use a <a href="#Custom-Resolver">Custom Resolver</a>.
6963
The function starting in line 22 is called on every tile to be resolved. It has
6964
the task of delivering the appropriate tile.
6966
<table><tr><td> </td><td><pre class="example">23 if <var>key</var> == "<var> </var>" then
6967
24 return <var>floors</var>[<i>lib</i>.<i>math</i>.<i>cubic_polynomial</i>(<var>polynom</var>, <var>x</var>, <var>y</var>) % (#<var>floors</var>) + <var>1</var>]
6968
</pre></td></tr></table>
6969
<p>These two lines generate the always changing floor design. For every map key
6970
‘<samp> </samp>’ we calculate the cubic polynomial that is randomized due to the
6971
coefficients. The resulting number is limited to the number of our four floors.
6972
This number is taken as the index into our ‘<samp>floors</samp>’ table and the resulting
6973
tile definition is returned.
6975
<table><tr><td> </td><td><pre class="example">25 elseif (<var>key</var> == "<var>#</var>")
6976
26 or ((<var>key</var> == "<var>_</var>") and (<i>random</i>(<var>4</var>) == <var>1</var>))
6977
27 or ((<var>key</var> == "<var>S</var>") and <i>wo</i>["<b>IsDifficult</b>"]) then
6978
28 return <i>ti</i>[""..<i>random</i>(<var>2</var>)]
6979
</pre></td></tr></table>
6980
<p>And now we cluster the border panels. First we need to decide where to put
6981
panels at all. The positions marked ‘<samp>#</samp>’ in the map are for sure.
6982
Additionally we choose randomly every 4th ‘<samp>_</samp>’ position to be a panel
6983
instead of being a water floor. Finally we replace just in difficult mode
6984
the switch marked as ‘<samp>S</samp>’ by a panel stone. Now we need to assign to this
6985
grid position one of the two panel cluster tiles. We simply generate a random
6986
number out of 1 and 2. But we do need a string as the tiles key. We force Lua
6987
to convert the number to string by concatenating an empty string ‘<samp>""</samp>’ with
6988
the random number. Choosing the right panel variants to build up closed clusters
6989
is done by the engine.
6991
<table><tr><td> </td><td><pre class="example">29 else
6992
30 return <i>ti</i>[<var>key</var>]
6993
</pre></td></tr></table>
6994
<p>Finally for all other keys that need no special treatment we just take the
6995
tile definition as stored in the tiles repository.
6997
<table><tr><td> </td><td><pre class="example">34 <var>w</var>, <var>h</var> = <i>wo</i>(<var>myresolver</var>, "<var> </var>", {
6998
35 -- 01234567890123456789
6999
36 "<var>####################___________________</var>",
7000
37 "<var># #_____###o###_______</var>",
7001
38 "<var># w w t t #_____#d d#_______</var>",
7002
39 "<var># w w t t #___### ### ###_____</var>",
7004
</pre></td></tr></table>
7005
<p>The map uses the keys as interpreted by the custom resolver. Thus all mandatory
7006
panel stones are marked by ‘<samp>#</samp>’ and all may be water by ‘<samp>_</samp>’. All spaces
7007
‘<samp> </samp>’ do not stand for the sahara floor definition in the tiles repository,
7008
but are floor positions for our design floor set up in the custom resolver.
7009
Note that even the ‘<samp>w</samp>’ marked tiles will set a design floor, as the
7010
default floor is ‘<samp> </samp>’, too.
7012
<table><tr><td> </td><td><pre class="example">51 <var>door_p</var> = <i>lib</i>.<i>math</i>.<i>permutation</i>(<var>12</var>)
7013
52 <var>wire_p</var> = <i>lib</i>.<i>math</i>.<i>permutation</i>(<var>12</var>)
7014
</pre></td></tr></table>
7015
<p>Now let us shuffle the trigger/door assignment and the wire distribution. We
7016
do this by permuting 12 index numbers to be used for door and wire access.
7018
<table><tr><td> </td><td><pre class="example">53 <var>woods</var> = <i>no</i>["<var>wood</var>#*"]
7019
54 <var>triggers</var> = <i>no</i>["<var>trigger</var>#*"]
7020
55 <var>doors</var> = <i>no</i>["<var>door</var>#*"]
7021
</pre></td></tr></table>
7022
<p>Get the groups of movable stones, triggers and doors. It is essential to do this
7023
once and to store the resulting groups as we want to index the group members.
7024
Repeated access to the named object repository does not guarantee a stable
7025
sorting of the result groups. Thus we operate on the stable once retrieved
7028
<table><tr><td> </td><td><pre class="example">57 for <var>j</var> = <var>1</var>, <var>12</var> do
7029
58 <var>triggers</var>[<var>j</var>].<b>target</b> = <var>doors</var>[<var>door_p</var>[<var>j</var>]]
7031
</pre></td></tr></table>
7032
<p>A random assignment of the triggers to the doors. Every triggers gets a random
7033
indexed member of the door group as target. Note the alternative attribute
7034
member access on the trigger. Instead of embracing the attributes name in
7035
square brackets and quoting the string constant as ‘<samp>["target"]</samp>’ the
7036
author did prefer to write ‘<samp>.target</samp>’. That is a legal Lua alternative
7037
statement as long as the attribute’s name is a legal Lua name (see <a href="#Caveats">Caveats</a>).
7039
<table><tr><td> </td><td><pre class="example">61 for <var>j</var> = <var>1</var>, <var>9</var> do
7040
62 <i>wo</i>:<b>add</b>({"<b>ot_wire</b>",
7041
63 <b>anchor1</b> = <var>woods</var>[<var>wire_p</var>[<var>j</var> + <var>3</var>]],
7042
64 <b>anchor2</b> = <var>woods</var>[<var>wire_p</var>[<var>j</var>%<var>3</var> + <var>1</var>]]})
7043
</pre></td></tr></table>
7044
<p>Finally we need to add the <a href="#ot_005fwire">ot_wire</a> between our movable stones. This can
7045
not be done within the map. We need to use the <a href="#World">World</a> method
7046
‘<samp>wo:add()</samp>’, which takes the two connected stones as two anchor attributes.
7047
We select the first 3 stones of our wood group as stones to be connected with
7048
3 other stones of the indices 4 to 12. Thus we take in every loop as the first
7049
anchor one of the stones 4 to 12 and connect it to one of the first 3 stones by
7050
a simple modulo operation. The first three stones now have three wires and are
7051
finished. The last 9 stones have just one wire.
7053
<table><tr><td> </td><td><pre class="example">65 <i>wo</i>:<b>add</b>({"<b>ot_wire</b>", <b>name</b> = "<var>obsolete_wire</var>#",
7054
66 <b>anchor1</b> = <var>woods</var>[<var>wire_p</var>[<var>j</var> + <var>3</var>]],
7055
67 <b>anchor2</b> = <var>woods</var>[<var>wire_p</var>[<var>j</var>%<var>9</var> + <var>4</var>]]})
7057
</pre></td></tr></table>
7058
<p>Now we wire these remaining 9 stones in sequence, in a closed circle. That gives
7059
each stone 2 additional wires. We do this by connecting each of the stones 4 to
7060
11 with its successor and finally connecting stone 12 to stone 4, what is done
7061
by the modulo operation. This completes the level for the regular mode.
7062
As preparation for the easy mode we do autoname these additional wires.
7064
<table><tr><td> </td><td><pre class="example">71 function <var>easy_mode_call</var>(<var>is_on</var>, <var>sender</var>)
7065
72 if <var>is_on</var> then
7066
73 <i>no</i>["<var>obsolete_wire</var>#*"]:<b>kill</b>()
7067
</pre></td></tr></table>
7068
<p>Just for the easy mode we added a switch to remove and recreate the additional
7069
wires. As we named these obsolete wires we can simply kill all of them in a
7070
single call by applying the ‘<samp>kill()</samp>’ method to the group of these wires.
7072
<table><tr><td> </td><td><pre class="example">73 else
7073
74 for <var>j</var> = <var>1</var>, <var>9</var> do
7074
75 <i>wo</i>:<b>add</b>({"<b>ot_wire</b>", <b>name</b> = "<var>obsolete_wire</var>#",
7075
76 <b>anchor1</b> = <var>woods</var>[<var>wire_p</var>[<var>j</var> + <var>3</var>]],
7076
77 <b>anchor2</b> = <var>woods</var>[<var>wire_p</var>[<var>j</var>%<var>9</var> + <var>4</var>]]})
7079
</pre></td></tr></table>
7080
<p>When the user switches off again, the wires should be recreated. That is done
7081
by the same code as lines 65 to 68. Note that is essential that we stored and
7082
kept the used wire permutation in the variable ‘<samp>wire_p</samp>’.
7086
<a name="Introduction-to-Datatypes"></a>
7087
<table cellpadding="1" cellspacing="1" border="0">
7088
<tr><td valign="middle" align="left">[<a href="#Weirdly-Wired" title="Previous section in reading order"> < </a>]</td>
7089
<td valign="middle" align="left">[<a href="#Syntax-and-Conventions" title="Next section in reading order"> > </a>]</td>
7090
<td valign="middle" align="left"> </td>
7091
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
7092
<td valign="middle" align="left">[<a href="#Lua-API" title="Up section"> Up </a>]</td>
7093
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
7094
<td valign="middle" align="left"> </td>
7095
<td valign="middle" align="left"> </td>
7096
<td valign="middle" align="left"> </td>
7097
<td valign="middle" align="left"> </td>
7098
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
7099
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
7100
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
7101
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
7103
<a name="Introduction-to-Datatypes-1"></a>
7104
<h2 class="section">5.4 Introduction to Datatypes</h2>
7106
<p>Before describing the datatypes in detail let us look at the used common
7107
concepts and conventions.
7109
<table class="menu" border="0" cellspacing="0">
7110
<tr><td align="left" valign="top"><a href="#Syntax-and-Conventions">5.4.1 Syntax and Conventions</a></td><td> </td><td align="left" valign="top"> Abbreviations in syntax descriptions
7112
<tr><td align="left" valign="top"><a href="#Value-and-Reference">5.4.2 Value and Reference</a></td><td> </td><td align="left" valign="top"> Basic differences of datatypes
7114
<tr><td align="left" valign="top"><a href="#Polymorphism-and-Overloading">5.4.3 Polymorphism and Overloading</a></td><td> </td><td align="left" valign="top"> Methods of Object Orientation
7116
<tr><td align="left" valign="top"><a href="#Pseudo-Datatypes">5.4.4 Pseudo Datatypes</a></td><td> </td><td align="left" valign="top"> Reinterpretation of datatypes
7122
<a name="Syntax-and-Conventions"></a>
7123
<table cellpadding="1" cellspacing="1" border="0">
7124
<tr><td valign="middle" align="left">[<a href="#Introduction-to-Datatypes" title="Previous section in reading order"> < </a>]</td>
7125
<td valign="middle" align="left">[<a href="#Value-and-Reference" title="Next section in reading order"> > </a>]</td>
7126
<td valign="middle" align="left"> </td>
7127
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
7128
<td valign="middle" align="left">[<a href="#Introduction-to-Datatypes" title="Up section"> Up </a>]</td>
7129
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
7130
<td valign="middle" align="left"> </td>
7131
<td valign="middle" align="left"> </td>
7132
<td valign="middle" align="left"> </td>
7133
<td valign="middle" align="left"> </td>
7134
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
7135
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
7136
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
7137
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
7139
<a name="Syntax-and-Conventions-1"></a>
7140
<h3 class="subsection">5.4.1 Syntax and Conventions</h3>
7142
<p>In the following subchapters we will describe the datatypes, their operators
7143
and methods, and global functions in detail. We need some syntax and
7144
conventions for an efficient description.
7146
<p>The following short names, and those derived by appending a number, do always
7147
represent a value of the corresponding type:
7149
<li> pos - <a href="#Position">Position</a>
7150
</li><li> obj - <a href="#Object">Object</a>
7151
</li><li> polist - <a href="#PositionList">PositionList</a>
7152
</li><li> group - <a href="#Group">Group</a>
7153
</li><li> cpos - constant position, a table with two numbers like {2, 3}
7156
<p>On syntax descriptions of datatype operators or methods we need to list allowed
7157
argument types. Often several types are possible and you are allowed to choose
7158
any of a list. In these cases we enlist the types enclosed by ‘<samp><</samp>’ and
7159
‘<samp>></samp>’ and separated by ‘<samp>|</samp>’. These characters are not part of the
7160
operator or method itself and should thus not be typed into the level code. Note
7161
that we keep square braces ‘<samp>[</samp>’, ‘<samp>]</samp>’ and curly braces ‘<samp>{</samp>’,
7162
‘<samp>}</samp>’ as literal Lua symbols. When these braces appear in the syntax you
7163
need to type them in the code. E.g. the following syntax rule:
7165
<table><tr><td> </td><td><pre class="example">result = <var>pos</var> + <<var>pos</var> | <var>obj</var> | <var>cpos</var> | <var>polist</var>>
7166
</pre></td></tr></table>
7168
<p>allows you to write any of the following lines in your level
7170
<table><tr><td> </td><td><pre class="example"><var>result</var> = <var>pos</var> + <var>pos</var>
7171
<var>result</var> = <var>pos</var> + <var>obj</var>
7172
<var>result</var> = <var>pos</var> + <var>cpos</var>
7173
<var>result</var> = <var>pos</var> + <var>polist</var>
7174
</pre></td></tr></table>
7176
<p>But a syntax rule like
7178
<table><tr><td> </td><td><pre class="example">x = pos["x"]
7179
</pre></td></tr></table>
7181
<p>requires the Lua square brackets to be coded literally. Of course you are
7182
still free to name your position variable and the resulting value variable
7187
<a name="Value-and-Reference"></a>
7188
<table cellpadding="1" cellspacing="1" border="0">
7189
<tr><td valign="middle" align="left">[<a href="#Syntax-and-Conventions" title="Previous section in reading order"> < </a>]</td>
7190
<td valign="middle" align="left">[<a href="#Polymorphism-and-Overloading" title="Next section in reading order"> > </a>]</td>
7191
<td valign="middle" align="left"> </td>
7192
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
7193
<td valign="middle" align="left">[<a href="#Introduction-to-Datatypes" title="Up section"> Up </a>]</td>
7194
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
7195
<td valign="middle" align="left"> </td>
7196
<td valign="middle" align="left"> </td>
7197
<td valign="middle" align="left"> </td>
7198
<td valign="middle" align="left"> </td>
7199
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
7200
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
7201
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
7202
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
7204
<a name="Value-and-Reference-1"></a>
7205
<h3 class="subsection">5.4.2 Value and Reference</h3>
7207
<p>Another most important aspect of Lua data types is the difference between
7208
values and references. Values are numbers, booleans like ‘<samp>true</samp>’ and
7209
‘<samp>false</samp>’, strings and ‘<samp>nil</samp>’. The only reference data type is the Lua
7212
<p>Values are always constant. They can never be modified. You assign a value to
7213
a variable. On calculations you may assign another value to the same variable.
7214
But the original value does never get modified. That should be obvious if you
7215
think of values like ‘<samp>true</samp>’ or numbers like ‘<samp>7</samp>’. But it is even true
7216
for strings like <code>"hello"</code>. When you append two strings you get a new
7217
string. But the components themselves do not change. All "string modifying"
7218
methods do return a new string with the resulting value. Thus a variable
7219
containing the value of the original string still contains the unmodified value.
7221
<p>Tables are of a totally opposite nature. They represent data containers. In Lua
7222
you are just handling references to these containers. When you add or change
7223
a value within the container the table reference remains unmodified but the table
7224
contents changes. Thus two variable containing both references to the same
7225
table will afterwards both reference the same modified table.
7227
<p>We will denote for every new data type the character of being a value or a
7228
reference. If you are unfamiliar to the resulting effects you may want to read
7229
the appendix about <a href="#Caveats">Caveats</a>.
7233
<a name="Polymorphism-and-Overloading"></a>
7234
<table cellpadding="1" cellspacing="1" border="0">
7235
<tr><td valign="middle" align="left">[<a href="#Value-and-Reference" title="Previous section in reading order"> < </a>]</td>
7236
<td valign="middle" align="left">[<a href="#Pseudo-Datatypes" title="Next section in reading order"> > </a>]</td>
7237
<td valign="middle" align="left"> </td>
7238
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
7239
<td valign="middle" align="left">[<a href="#Introduction-to-Datatypes" title="Up section"> Up </a>]</td>
7240
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
7241
<td valign="middle" align="left"> </td>
7242
<td valign="middle" align="left"> </td>
7243
<td valign="middle" align="left"> </td>
7244
<td valign="middle" align="left"> </td>
7245
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
7246
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
7247
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
7248
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
7250
<a name="Polymorphism-and-Overloading-1"></a>
7251
<h3 class="subsection">5.4.3 Polymorphism and Overloading</h3>
7253
<a name="index-polymorphism"></a>
7254
<p>You may have noticed that in many operations you can use an <a href="#Object">Object</a> as
7255
a <a href="#Position">Position</a>. This is due to the fact that objects support most of the
7256
position features as well. Objects are no positions, but they do speak the
7257
same language. This feature is called ‘<samp>polymorphism</samp>’ and helps you to
7258
simplify your code significantly. In the following subchapters you should
7259
carefully look at the syntax to understand which types of arguments do fit in
7262
<a name="index-overloading"></a>
7263
<p>The number of usable operators is limited by Lua. Thus an addition of two data
7264
by the ‘<samp>+</samp>’ operator causes different actions depending on the involved data
7265
themselves. An addition of two positions results in a vectorial addition. But
7266
the addition of two groups results in a join of the groups. This reuse of a
7267
single operator is called ‘<samp>overloading</samp>’.
7269
<p>Overloading combined with polymorphism can cause situations that are ambiguous
7270
by design. E.g. we decided to allow the addition of a position with an object
7271
resulting in the vectorial addition of the object’s position to the first one.
7272
At the same time we want to be able to join an object with an existing group
7273
by usage of the ‘<samp>+</samp>’ operator. But what should be the result of an addition
7274
of two objects? The vectorial addition of their positions, or the join of both
7275
objects in a new group? Either makes sense and would be useful. In this case
7276
we decided for the first possibility as the minus operation as the vectorial
7277
difference between two objects is a very important feature. Anyway you can
7278
always force the operation of your choice to be applied by transforming one
7279
object either into a position or a group. Please read carefully the given
7280
syntax rules for a clear understanding of the results.
7284
<a name="Pseudo-Datatypes"></a>
7285
<table cellpadding="1" cellspacing="1" border="0">
7286
<tr><td valign="middle" align="left">[<a href="#Polymorphism-and-Overloading" title="Previous section in reading order"> < </a>]</td>
7287
<td valign="middle" align="left">[<a href="#Position" title="Next section in reading order"> > </a>]</td>
7288
<td valign="middle" align="left"> </td>
7289
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
7290
<td valign="middle" align="left">[<a href="#Introduction-to-Datatypes" title="Up section"> Up </a>]</td>
7291
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
7292
<td valign="middle" align="left"> </td>
7293
<td valign="middle" align="left"> </td>
7294
<td valign="middle" align="left"> </td>
7295
<td valign="middle" align="left"> </td>
7296
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
7297
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
7298
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
7299
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
7301
<a name="Pseudo-Datatypes-1"></a>
7302
<h3 class="subsection">5.4.4 Pseudo Datatypes</h3>
7304
<p>Even though we introduce just the ten additional fundamental datatypes as
7305
described in the following subchapters, the API does additionally differ
7306
the same datatype according to its usage. E.g. a standard Lua number is used to
7307
describe the <a href="#state">state</a> of an object. Just in rare occurrences the state will
7308
reflect a real number like the state of <a href="#ot_005fcounter">ot_counter</a>. For most objects
7309
the state will just be one of a given set of allowed values, which happen to
7310
be described by numbers by the API. Thus we speak of a pseudo datatype
7311
in the case of <a href="#state">state</a> values.
7313
<p>The API provides <a href="#Common-Constants">Common Constants</a> for all pseudo datatypes, all written in
7314
upper case letters only. You should use exclusively these constants and never
7315
their equivalent basic number or other type values. The usage of the constants
7316
makes the level code readable and upward compatible if we ever should have the
7317
need of changing the assigned values or transforming the pseudo datatype to
7320
<p>There is one abstract datatype that needs to be mentioned, as it uses two
7321
different pseudo datatypes at the same time. This special case is the datatype
7322
used to describe the ‘<samp>direction</samp>’ or ‘<samp>orientation</samp>’. Both are
7323
essentially the same. But we speak of ‘<samp>orientation</samp>’ if we are just
7324
interested in enlisting the main directions by number values for the purpose of
7325
identification. The constant values are given as <a href="#orientations">orientations</a>.
7327
<p>Sometimes you need values for calculation of position offsets. In this case we
7328
speak of a ‘<samp>direction</samp>’ and use <a href="#Position">Position</a> values as offset vectors.
7329
The most common values are given as constants as listed in subchapter
7330
<a href="#direction-offsets">direction offsets</a>. Note that our ‘<samp>direction</samp>’ values have no need of
7331
being normalized to the length of 1.
7333
<p>A given ‘<samp>orientation</samp>’ can be transformed into a ‘<samp>direction</samp>’ value by
7334
the conversion table <a href="#ORI2DIR">ORI2DIR</a>.
7338
<a name="Position"></a>
7339
<table cellpadding="1" cellspacing="1" border="0">
7340
<tr><td valign="middle" align="left">[<a href="#Pseudo-Datatypes" title="Previous section in reading order"> < </a>]</td>
7341
<td valign="middle" align="left">[<a href="#Position-Addition-and-Subtraction" title="Next section in reading order"> > </a>]</td>
7342
<td valign="middle" align="left"> </td>
7343
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
7344
<td valign="middle" align="left">[<a href="#Lua-API" title="Up section"> Up </a>]</td>
7345
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
7346
<td valign="middle" align="left"> </td>
7347
<td valign="middle" align="left"> </td>
7348
<td valign="middle" align="left"> </td>
7349
<td valign="middle" align="left"> </td>
7350
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
7351
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
7352
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
7353
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
7355
<a name="Position-1"></a>
7356
<h2 class="section">5.5 Position</h2>
7358
<p>A position is a Lua userdata type introduced by Enigma to handle world positions
7359
as introduced in <a href="#World_0027s-Shape-and-Coordinates">World’s Shape and Coordinates</a>. A position is a value
7360
and thus constant. Once a position is created it can not be modified anymore.
7361
But you can calculate with positions by usage of operators. When you add two
7362
position values you receive the resulting position as a new value.
7364
<p>In contrast to <a href="#Object">Object</a>s positions have an unlimited lifetime and will never
7365
cease to exist. Thus you can store position values in global variables and
7366
keep them as long as you need. The values are constant and will not change even
7367
if the objects from which they have been derived have meanwhile moved to another
7368
grid or even been killed.
7370
<p>Position values are not limited to valid world coordinates. Both coordinates
7371
can take every positive or negative number and zero, too. Thus you can calculate
7372
with positions and use them to express offsets between two other positions.
7374
<p>Positions are created by the <a href="#Positions-Repository">Positions Repository</a> singleton handle,
7375
that allows you to convert coordinates, objects, position constants into
7376
positions. The handle allows you to retrieve existing named positions, too.
7377
Furtheron positions are implicitly created as return values of many operations.
7379
<p>For task driven samples see section <a href="#Position-Tasks">Position Tasks</a>.
7381
<p>Let us look at the supported operators:
7383
<table class="menu" border="0" cellspacing="0">
7384
<tr><td align="left" valign="top"><a href="#Position-Addition-and-Subtraction">5.5.1 Position Addition and Subtraction</a></td><td> </td><td align="left" valign="top"> Operators ‘<samp>+</samp>’ and ‘<samp>-</samp>’
7386
<tr><td align="left" valign="top"><a href="#Position-Multiplication-and-Division">5.5.2 Position Multiplication and Division</a></td><td> </td><td align="left" valign="top"> Operators ‘<samp>*</samp>’ and ‘<samp>/</samp>’
7388
<tr><td align="left" valign="top"><a href="#Position-Sign">5.5.3 Position Sign</a></td><td> </td><td align="left" valign="top"> Unary Operator ‘<samp>-</samp>’
7390
<tr><td align="left" valign="top"><a href="#Position-Center">5.5.4 Position Center</a></td><td> </td><td align="left" valign="top"> Operator ‘<samp>#</samp>’
7392
<tr><td align="left" valign="top"><a href="#Position-Comparison">5.5.5 Position Comparison</a></td><td> </td><td align="left" valign="top"> Equality ‘<samp>==</samp>’ and Inequality ‘<samp>~=</samp>’
7394
<tr><td align="left" valign="top"><a href="#Position-Concatenation">5.5.6 Position Concatenation</a></td><td> </td><td align="left" valign="top"> Operator ‘<samp>..</samp>’
7396
<tr><td align="left" valign="top"><a href="#Position-Coordinate-Access">5.5.7 Position Coordinate Access</a></td><td> </td><td align="left" valign="top"> Index Operators
7398
<tr><td align="left" valign="top"><a href="#Position-Grid-Rounding">5.5.8 Position Grid Rounding</a></td><td> </td><td align="left" valign="top"> Method ‘<samp>grid()</samp>’
7400
<tr><td align="left" valign="top"><a href="#Position-Existence">5.5.9 Position Existence</a></td><td> </td><td align="left" valign="top"> Method ‘<samp>exists()</samp>’
7406
<a name="Position-Addition-and-Subtraction"></a>
7407
<table cellpadding="1" cellspacing="1" border="0">
7408
<tr><td valign="middle" align="left">[<a href="#Position" title="Previous section in reading order"> < </a>]</td>
7409
<td valign="middle" align="left">[<a href="#Position-Multiplication-and-Division" title="Next section in reading order"> > </a>]</td>
7410
<td valign="middle" align="left"> </td>
7411
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
7412
<td valign="middle" align="left">[<a href="#Position" title="Up section"> Up </a>]</td>
7413
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
7414
<td valign="middle" align="left"> </td>
7415
<td valign="middle" align="left"> </td>
7416
<td valign="middle" align="left"> </td>
7417
<td valign="middle" align="left"> </td>
7418
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
7419
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
7420
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
7421
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
7423
<a name="Position-Addition-and-Subtraction-1"></a>
7424
<h3 class="subsection">5.5.1 Position Addition and Subtraction</h3>
7426
<dl compact="compact">
7427
<dt> <b>Syntax:</b></dt>
7428
<dd><p>result = <i>pos</i> <<b>+</b>|<b>-</b>> <<i>pos</i> | <i>obj</i> | <i>cpos</i> | <i>polist</i>>
7430
<p>result = <<i>pos</i> | <i>obj</i> | <i>cpos</i> | <i>polist</i>> <<b>+</b>|<b>-</b>> <i>pos</i>
7433
<dt> <b>Details:</b></dt>
7434
<dd><p>When a position is added to, or subtracted from another position or data
7435
convertible to a position the result is the position value representing the
7436
vectorial addition or difference of both arguments.
7438
<p>If a position is added to, or subtracted from a position list a new list is created
7439
with the positions representing the sum or difference of the position with every
7440
member of the supplied position list.
7443
<dt> <b>Syntax Samples:</b></dt>
7444
<dd><table><tr><td> </td><td><pre class="example"><var>newpos</var> = <i>po</i>(<var>3</var>, <var>4</var>) + {<var>1</var>, <var>2</var>} -- = po(4, 6)
7445
<var>newpos</var> = <var>myobject</var> - <i>po</i>(<var>1</var>, <var>5</var>)
7446
<var>newpolist</var> = <i>po</i>(<var>2</var>, <var>3</var>) + <var>NEIGHBORS_4</var> -- po(1, 3) .. po(2, 4) .. po(3, 3) .. po(2, 2)
7447
<var>newpolist</var> = <i>po</i>["<var>myfloor</var>#*"] - <i>po</i>(<var>3</var>, <var>0</var>)
7448
</pre></td></tr></table>
7454
<a name="Position-Multiplication-and-Division"></a>
7455
<table cellpadding="1" cellspacing="1" border="0">
7456
<tr><td valign="middle" align="left">[<a href="#Position-Addition-and-Subtraction" title="Previous section in reading order"> < </a>]</td>
7457
<td valign="middle" align="left">[<a href="#Position-Sign" title="Next section in reading order"> > </a>]</td>
7458
<td valign="middle" align="left"> </td>
7459
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
7460
<td valign="middle" align="left">[<a href="#Position" title="Up section"> Up </a>]</td>
7461
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
7462
<td valign="middle" align="left"> </td>
7463
<td valign="middle" align="left"> </td>
7464
<td valign="middle" align="left"> </td>
7465
<td valign="middle" align="left"> </td>
7466
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
7467
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
7468
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
7469
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
7471
<a name="Position-Multiplication-and-Division-1"></a>
7472
<h3 class="subsection">5.5.2 Position Multiplication and Division</h3>
7474
<dl compact="compact">
7475
<dt> <b>Syntax:</b></dt>
7476
<dd><p>result = <i>pos</i> <<b>*</b>|<b>/</b>> <i>number</i>
7478
<p>result = <i>number</i> <b>*</b> <i>pos</i>
7481
<dt> <b>Details:</b></dt>
7482
<dd><p>A scalar multiplication or division of a position vector. A position value
7483
with both coordinate values multiplicated or divided by the given number
7487
<dt> <b>Syntax Samples:</b></dt>
7488
<dd><table><tr><td> </td><td><pre class="example"><var>newpos</var> = <var>3</var> * <i>po</i>(<var>3</var>, <var>4</var>) -- = po(9, 12)
7489
<var>newpos</var> = <i>po</i>(<var>2</var>, <var>3</var>) / <var>2</var> -- = po(1, 1.5)
7490
</pre></td></tr></table>
7496
<a name="Position-Sign"></a>
7497
<table cellpadding="1" cellspacing="1" border="0">
7498
<tr><td valign="middle" align="left">[<a href="#Position-Multiplication-and-Division" title="Previous section in reading order"> < </a>]</td>
7499
<td valign="middle" align="left">[<a href="#Position-Center" title="Next section in reading order"> > </a>]</td>
7500
<td valign="middle" align="left"> </td>
7501
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
7502
<td valign="middle" align="left">[<a href="#Position" title="Up section"> Up </a>]</td>
7503
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
7504
<td valign="middle" align="left"> </td>
7505
<td valign="middle" align="left"> </td>
7506
<td valign="middle" align="left"> </td>
7507
<td valign="middle" align="left"> </td>
7508
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
7509
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
7510
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
7511
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
7513
<a name="Position-Sign-1"></a>
7514
<h3 class="subsection">5.5.3 Position Sign</h3>
7516
<dl compact="compact">
7517
<dt> <b>Syntax:</b></dt>
7518
<dd><p>result = -<i>pos</i>
7521
<dt> <b>Details:</b></dt>
7522
<dd><p>An unary scalar multiplication of a position vector with ‘<samp>-1</samp>’. A new
7523
position value with both coordinate values multiplicated by ‘<samp>-1</samp>’ is returned.
7526
<dt> <b>Syntax Samples:</b></dt>
7527
<dd><table><tr><td> </td><td><pre class="example"><var>newpos</var> = -<i>po</i>(<var>3</var>, <var>4</var>) -- = po(-3, -4)
7528
</pre></td></tr></table>
7534
<a name="Position-Center"></a>
7535
<table cellpadding="1" cellspacing="1" border="0">
7536
<tr><td valign="middle" align="left">[<a href="#Position-Sign" title="Previous section in reading order"> < </a>]</td>
7537
<td valign="middle" align="left">[<a href="#Position-Comparison" title="Next section in reading order"> > </a>]</td>
7538
<td valign="middle" align="left"> </td>
7539
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
7540
<td valign="middle" align="left">[<a href="#Position" title="Up section"> Up </a>]</td>
7541
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
7542
<td valign="middle" align="left"> </td>
7543
<td valign="middle" align="left"> </td>
7544
<td valign="middle" align="left"> </td>
7545
<td valign="middle" align="left"> </td>
7546
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
7547
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
7548
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
7549
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
7551
<a name="Position-Center-1"></a>
7552
<h3 class="subsection">5.5.4 Position Center</h3>
7554
<dl compact="compact">
7555
<dt> <b>Syntax:</b></dt>
7556
<dd><p>result = #<i>pos</i>
7559
<dt> <b>Details:</b></dt>
7560
<dd><p>A rounding of a position vector to the center of the grid. A new position value
7561
with coordinates of the center of the containing grid position is returned.
7564
<dt> <b>Syntax Samples:</b></dt>
7565
<dd><table><tr><td> </td><td><pre class="example"><var>newpos</var> = #<i>po</i>(<var>3</var>, <var>4</var>) -- = po(3.5, 4.5)
7566
</pre></td></tr></table>
7572
<a name="Position-Comparison"></a>
7573
<table cellpadding="1" cellspacing="1" border="0">
7574
<tr><td valign="middle" align="left">[<a href="#Position-Center" title="Previous section in reading order"> < </a>]</td>
7575
<td valign="middle" align="left">[<a href="#Position-Concatenation" title="Next section in reading order"> > </a>]</td>
7576
<td valign="middle" align="left"> </td>
7577
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
7578
<td valign="middle" align="left">[<a href="#Position" title="Up section"> Up </a>]</td>
7579
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
7580
<td valign="middle" align="left"> </td>
7581
<td valign="middle" align="left"> </td>
7582
<td valign="middle" align="left"> </td>
7583
<td valign="middle" align="left"> </td>
7584
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
7585
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
7586
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
7587
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
7589
<a name="Position-Comparison-1"></a>
7590
<h3 class="subsection">5.5.5 Position Comparison</h3>
7592
<p>Equality and Inequality.
7594
<dl compact="compact">
7595
<dt> <b>Syntax:</b></dt>
7596
<dd><p>result = <i>pos1</i> <==|~=> <i>pos2</i>
7599
<dt> <b>Details:</b></dt>
7600
<dd><p>A comparison of two position values. Two position values are equal if both
7601
coordinates are equal. Otherwise they are unequal. If you want to know whether
7602
two positions point to the same grid, you may want to round both position prior
7603
comparison. You can round either to the center or to the grid by usage of
7604
the position operator ‘<samp>#</samp>’ or the method ‘<samp>grid()</samp>’.
7607
<dt> <b>Syntax Samples:</b></dt>
7608
<dd><table><tr><td> </td><td><pre class="example"><var>bool</var> = <i>po</i>(<var>3</var>, <var>4</var>) == <i>po</i>({<var>3</var>, <var>4</var>}) -- = true
7609
<var>bool</var> = <i>po</i>(<var>3</var>, <var>4</var>) == <i>po</i>(<var>4</var>, <var>3</var>) -- = false
7610
<var>bool</var> = <i>po</i>(<var>3</var>, <var>4</var>) ~= <i>po</i>(<var>4</var>, <var>3</var>) -- = true
7611
</pre></td></tr></table>
7617
<a name="Position-Concatenation"></a>
7618
<table cellpadding="1" cellspacing="1" border="0">
7619
<tr><td valign="middle" align="left">[<a href="#Position-Comparison" title="Previous section in reading order"> < </a>]</td>
7620
<td valign="middle" align="left">[<a href="#Position-Coordinate-Access" title="Next section in reading order"> > </a>]</td>
7621
<td valign="middle" align="left"> </td>
7622
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
7623
<td valign="middle" align="left">[<a href="#Position" title="Up section"> Up </a>]</td>
7624
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
7625
<td valign="middle" align="left"> </td>
7626
<td valign="middle" align="left"> </td>
7627
<td valign="middle" align="left"> </td>
7628
<td valign="middle" align="left"> </td>
7629
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
7630
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
7631
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
7632
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
7634
<a name="Position-Concatenation-1"></a>
7635
<h3 class="subsection">5.5.6 Position Concatenation</h3>
7637
<dl compact="compact">
7638
<dt> <b>Syntax:</b></dt>
7639
<dd><p>result = <i>pos1</i> .. <<i>pos2</i> | <i>polist</i>>
7641
<p>result = <<i>pos1</i> | <i>polist</i>> .. <i>pos2</i>
7644
<dt> <b>Details:</b></dt>
7645
<dd><p>Concatenates two positions or a position with an existing <a href="#PositionList">PositionList</a> to a
7646
new PositionList containing all positions in the given order. Note that this
7647
operation is associative, that means it does not matter if you use braces in
7648
multiple concatenations or not.
7651
<dt> <b>Syntax Samples:</b></dt>
7652
<dd><table><tr><td> </td><td><pre class="example"><var>newpolist</var> = <i>po</i>(<var>3</var>, <var>4</var>) .. <i>po</i>(<var>4</var>, <var>4</var>)
7653
</pre></td></tr></table>
7659
<a name="Position-Coordinate-Access"></a>
7660
<table cellpadding="1" cellspacing="1" border="0">
7661
<tr><td valign="middle" align="left">[<a href="#Position-Concatenation" title="Previous section in reading order"> < </a>]</td>
7662
<td valign="middle" align="left">[<a href="#Position-Grid-Rounding" title="Next section in reading order"> > </a>]</td>
7663
<td valign="middle" align="left"> </td>
7664
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
7665
<td valign="middle" align="left">[<a href="#Position" title="Up section"> Up </a>]</td>
7666
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
7667
<td valign="middle" align="left"> </td>
7668
<td valign="middle" align="left"> </td>
7669
<td valign="middle" align="left"> </td>
7670
<td valign="middle" align="left"> </td>
7671
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
7672
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
7673
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
7674
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
7676
<a name="Position-Coordinate-Access-1"></a>
7677
<h3 class="subsection">5.5.7 Position Coordinate Access</h3>
7679
<dl compact="compact">
7680
<dt> <b>Syntax:</b></dt>
7681
<dd><p>result = <i>pos</i>["x"]
7683
<p>result = <i>pos</i>["y"]
7685
<p>result1, result2 = <i>pos</i>:xy()
7688
<dt> <b>Details:</b></dt>
7689
<dd><p>The single coordinates of a position can be read anytime. You can retrieve
7690
single coordinates by Lua square bracket index access. Of course you can use
7691
the Lua alternative dot index access syntax, too (see examples). If you want
7692
to evaluate both coordinates, you can make use of the method ‘<samp>xy()</samp>’, that
7693
returns both numbers at once in a Lua multiple assignment.
7696
<dt> <b>Syntax Samples:</b></dt>
7697
<dd><table><tr><td> </td><td><pre class="example"><var>number</var> = <i>po</i>(<var>3</var>, <var>4</var>)["<b>x</b>"] -- = 3
7698
<var>number</var> = <i>po</i>(<var>3</var>, <var>4</var>).<b>x</b> -- = 3
7699
<var>number</var> = <i>po</i>(<var>3</var>, <var>4</var>)["<b>y</b>"] -- = 4
7700
<var>number</var> = <i>po</i>(<var>3</var>, <var>4</var>).<b>y</b> -- = 4
7701
<var>number1</var>, <var>number2</var> = <i>po</i>(<var>3</var>, <var>4</var>):<b>xy</b>() -- = 3, 4
7702
</pre></td></tr></table>
7708
<a name="Position-Grid-Rounding"></a>
7709
<table cellpadding="1" cellspacing="1" border="0">
7710
<tr><td valign="middle" align="left">[<a href="#Position-Coordinate-Access" title="Previous section in reading order"> < </a>]</td>
7711
<td valign="middle" align="left">[<a href="#Position-Existence" title="Next section in reading order"> > </a>]</td>
7712
<td valign="middle" align="left"> </td>
7713
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
7714
<td valign="middle" align="left">[<a href="#Position" title="Up section"> Up </a>]</td>
7715
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
7716
<td valign="middle" align="left"> </td>
7717
<td valign="middle" align="left"> </td>
7718
<td valign="middle" align="left"> </td>
7719
<td valign="middle" align="left"> </td>
7720
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
7721
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
7722
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
7723
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
7725
<a name="Position-Grid-Rounding-1"></a>
7726
<h3 class="subsection">5.5.8 Position Grid Rounding</h3>
7728
<dl compact="compact">
7729
<dt> <b>Syntax:</b></dt>
7730
<dd><p>result = <i>pos</i>:grid()
7733
<dt> <b>Details:</b></dt>
7734
<dd><p>Returns a new position value that points to the upper left corner of the grid
7735
that contains the position itself.
7738
<dt> <b>Syntax Samples:</b></dt>
7739
<dd><table><tr><td> </td><td><pre class="example"><var>newpos</var> = <i>po</i>(<var>3.2</var>, <var>4.7</var>):<b>grid</b>() -- = 3, 4
7740
<var>newpos</var> = <i>po</i>(<var>-2.4</var>, <var>-5.0</var>):<b>grid</b>() -- = -3, -5
7741
</pre></td></tr></table>
7747
<a name="Position-Existence"></a>
7748
<table cellpadding="1" cellspacing="1" border="0">
7749
<tr><td valign="middle" align="left">[<a href="#Position-Grid-Rounding" title="Previous section in reading order"> < </a>]</td>
7750
<td valign="middle" align="left">[<a href="#Object" title="Next section in reading order"> > </a>]</td>
7751
<td valign="middle" align="left"> </td>
7752
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
7753
<td valign="middle" align="left">[<a href="#Position" title="Up section"> Up </a>]</td>
7754
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
7755
<td valign="middle" align="left"> </td>
7756
<td valign="middle" align="left"> </td>
7757
<td valign="middle" align="left"> </td>
7758
<td valign="middle" align="left"> </td>
7759
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
7760
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
7761
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
7762
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
7764
<a name="Position-Existence-1"></a>
7765
<h3 class="subsection">5.5.9 Position Existence</h3>
7767
<dl compact="compact">
7768
<dt> <b>Syntax:</b></dt>
7769
<dd><p>result = <i>pos</i>:exists()
7772
<dt> <b>Details:</b></dt>
7773
<dd><p>Checks if the position is part of the world and returns ‘<samp>true</samp>’ if it is
7774
contained. Otherwise ‘<samp>false</samp>’ is returned.
7776
<p>Note that the <a href="#Object">Object</a>s ‘<samp>exists</samp>’ method reports the existence of the
7777
object. Evaluation of ‘<samp>po(obj):exists()</samp>’ may result in ‘<samp>false</samp>’ for
7778
existing objects. E.g. this result occurs for <a href="#Item-Objects">Item Objects</a> currently
7779
being part of a player’s inventory. The item exists, but is not part of the
7780
world. But items contained in a bag placed in the world will report the same
7781
position as the bag.
7784
<dt> <b>Syntax Samples:</b></dt>
7785
<dd><table><tr><td> </td><td><pre class="example"><var>boolean</var> = <i>po</i>(<var>3.2</var>, <var>4.7</var>):<b>exists</b>()
7786
</pre></td></tr></table>
7793
<a name="Object"></a>
7794
<table cellpadding="1" cellspacing="1" border="0">
7795
<tr><td valign="middle" align="left">[<a href="#Position-Existence" title="Previous section in reading order"> < </a>]</td>
7796
<td valign="middle" align="left">[<a href="#Object-Attribute-Access" title="Next section in reading order"> > </a>]</td>
7797
<td valign="middle" align="left"> </td>
7798
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
7799
<td valign="middle" align="left">[<a href="#Lua-API" title="Up section"> Up </a>]</td>
7800
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
7801
<td valign="middle" align="left"> </td>
7802
<td valign="middle" align="left"> </td>
7803
<td valign="middle" align="left"> </td>
7804
<td valign="middle" align="left"> </td>
7805
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
7806
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
7807
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
7808
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
7810
<a name="Object-1"></a>
7811
<h2 class="section">5.6 Object</h2>
7813
<p>This datatype handles all world participating objects as described in
7814
<a href="#Object-Layers">Object Layers</a>. When you request an object you get a reference to this
7815
object and not the object itself. You can modify the object, but the object
7816
can be modified by user actions, too. Deleting your reference by assigning
7817
another value to your variable does not delete the object itself.
7819
<p>On the other hand an object can cease to exist due to user actions while you
7820
still have a reference assigned to a Lua variable. Of course this reference
7821
gets invalid when the referenced object is deleted. But such an invalid
7822
reference, which we call a ‘<samp>NULL</samp>’ reference, is no longer fatal with the
7823
new API. Any write accesses on such references are simply ignored. Thus you can
7824
send messages to object references independently of their validity. Just on
7825
read accesses you may want to prior check the existence of an object as you
7826
would get ‘<samp>nil</samp>’ values on access of ‘<samp>NULL</samp>’ references.
7828
<p>Objects take attributes that you access by Lua index methods. Additional to
7829
the object specific attributes you are free to store your own custom
7830
attributes on any object. Custom attributes are any indices starting with an
7831
underscore ‘<samp>_</samp>’ as prefix to their name.
7833
<p>The real world objects are created by assigning a tile declaration to
7834
a <a href="#World">World</a> position. You retrieve a corresponding object reference either
7835
by the <a href="#NamedObjects">NamedObjects</a> repository, by <a href="#Functions">Functions</a> or other methods that
7836
return single object references.
7838
<p>Objects provide most methods of a <a href="#Position">Position</a> and can in most cases be
7839
directly used as a position without explicit conversion. Just special methods
7840
like existence differ on both datatypes. Of course all objects placed in the
7841
world are limited to positions within the world. But be aware that portable
7842
<a href="#Item-Objects">Item Objects</a> can well be part of a player’s inventory and thus report a
7843
position outside of the world. Actors will always report positions rounded to
7844
the containing grid. This feature is legacy. As Lua code is anyway inappropriate
7845
to handle actor movements we maintained this rounding feature.
7847
<p>Objects support standard set operators of <a href="#Group">Group</a>s, too, as long as one
7848
operand is a group and the other an object.
7850
<p>For task driven samples see section <a href="#Object-Tasks">Object Tasks</a> and <a href="#Attribute-Tasks">Attribute Tasks</a>.
7852
<table class="menu" border="0" cellspacing="0">
7853
<tr><td align="left" valign="top"><a href="#Object-Attribute-Access">5.6.1 Object Attribute Access</a></td><td> </td><td align="left" valign="top"> Index Operators ‘<samp>[]</samp>’
7855
<tr><td align="left" valign="top"><a href="#Object-Messaging">5.6.2 Object Messaging</a></td><td> </td><td align="left" valign="top"> Method Operator ‘<samp>:</samp>’
7857
<tr><td align="left" valign="top"><a href="#Object-Comparison">5.6.3 Object Comparison</a></td><td> </td><td align="left" valign="top"> Equality ‘<samp>==</samp>’ and Inequality ‘<samp>~=</samp>’
7859
<tr><td align="left" valign="top"><a href="#Object-Existence">5.6.4 Object Existence</a></td><td> </td><td align="left" valign="top"> Method ‘<samp>exists()</samp>’
7861
<tr><td align="left" valign="top"><a href="#Object-Kill">5.6.5 Object Kill</a></td><td> </td><td align="left" valign="top"> Method ‘<samp>kill()</samp>’
7863
<tr><td align="left" valign="top"><a href="#Object-Kind-Check">5.6.6 Object Kind Check</a></td><td> </td><td align="left" valign="top"> Method ‘<samp>kind()</samp>’ and ‘<samp>is()</samp>’
7865
<tr><td align="left" valign="top"><a href="#Object-Coordinate-Access">5.6.7 Object Coordinate Access</a></td><td> </td><td align="left" valign="top"> Index Operators ‘<samp>["x"]</samp>’, ‘<samp>["y"]</samp>’
7867
<tr><td align="left" valign="top"><a href="#Object-Addition-and-Subtraction">5.6.8 Object Addition and Subtraction</a></td><td> </td><td align="left" valign="top"> Operators ‘<samp>+</samp>’, ‘<samp>-</samp>’
7869
<tr><td align="left" valign="top"><a href="#Object-Center">5.6.9 Object Center</a></td><td> </td><td align="left" valign="top"> Operator ‘<samp>#</samp>’
7871
<tr><td align="left" valign="top"><a href="#Object-Join">5.6.10 Object Join</a></td><td> </td><td align="left" valign="top"> Operator ‘<samp>+</samp>’
7873
<tr><td align="left" valign="top"><a href="#Object-Intersection">5.6.11 Object Intersection</a></td><td> </td><td align="left" valign="top"> Operator ‘<samp>*</samp>’
7875
<tr><td align="left" valign="top"><a href="#Object-Difference">5.6.12 Object Difference</a></td><td> </td><td align="left" valign="top"> Operator ‘<samp>-</samp>’
7877
<tr><td align="left" valign="top"><a href="#Object-Sound">5.6.13 Object Sound</a></td><td> </td><td align="left" valign="top"> Method ‘<samp>sound()</samp>’
7882
<a name="Object-Attribute-Access"></a>
7883
<table cellpadding="1" cellspacing="1" border="0">
7884
<tr><td valign="middle" align="left">[<a href="#Object" title="Previous section in reading order"> < </a>]</td>
7885
<td valign="middle" align="left">[<a href="#Object-Messaging" title="Next section in reading order"> > </a>]</td>
7886
<td valign="middle" align="left"> </td>
7887
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
7888
<td valign="middle" align="left">[<a href="#Object" title="Up section"> Up </a>]</td>
7889
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
7890
<td valign="middle" align="left"> </td>
7891
<td valign="middle" align="left"> </td>
7892
<td valign="middle" align="left"> </td>
7893
<td valign="middle" align="left"> </td>
7894
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
7895
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
7896
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
7897
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
7899
<a name="Object-Attribute-Access-1"></a>
7900
<h3 class="subsection">5.6.1 Object Attribute Access</h3>
7902
<dl compact="compact">
7903
<dt> <b>Syntax:</b></dt>
7904
<dd><p>result = <i>obj</i>["attributename"]
7906
<p><i>obj</i>["attributename"] = value
7908
<p><i>obj</i>:set({attributename1=value1, attributename2=value2,...})
7911
<dt> <b>Details:</b></dt>
7912
<dd><p>Read or write object attributes as described in the following chapters or
7913
custom attributes. The ‘<samp>set</samp>’ method allows you to set multiple attributes
7914
at once. Attribute writes are ignored if the object reference is invalid.
7915
Attribute reads require a valid object reference. Otherwise they return
7916
‘<samp>nil</samp>’.
7919
<dt> <b>Syntax Samples:</b></dt>
7920
<dd><table><tr><td> </td><td><pre class="example"><var>value</var> = <var>obj</var>["<b>color</b>"]
7921
<var>value</var> = <var>obj</var>.<b>color</b>
7922
<var>obj</var>["<b>color</b>"] = <var>BLACK</var>
7923
<var>obj</var>.<b>color</b> = <var>BLACK</var>
7924
<var>obj</var>:<b>set</b>({<b>target</b>=<var>mydoor</var>, <b>action</b>="<b>open</b>"})
7925
</pre></td></tr></table>
7930
<a name="Object-Messaging"></a>
7931
<table cellpadding="1" cellspacing="1" border="0">
7932
<tr><td valign="middle" align="left">[<a href="#Object-Attribute-Access" title="Previous section in reading order"> < </a>]</td>
7933
<td valign="middle" align="left">[<a href="#Object-Comparison" title="Next section in reading order"> > </a>]</td>
7934
<td valign="middle" align="left"> </td>
7935
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
7936
<td valign="middle" align="left">[<a href="#Object" title="Up section"> Up </a>]</td>
7937
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
7938
<td valign="middle" align="left"> </td>
7939
<td valign="middle" align="left"> </td>
7940
<td valign="middle" align="left"> </td>
7941
<td valign="middle" align="left"> </td>
7942
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
7943
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
7944
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
7945
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
7947
<a name="Object-Messaging-1"></a>
7948
<h3 class="subsection">5.6.2 Object Messaging</h3>
7950
<dl compact="compact">
7951
<dt> <b>Syntax:</b></dt>
7952
<dd><p>result = <i>obj</i>:message("msg", value)
7954
<p>result = <i>obj</i>:msg(value)
7957
<dt> <b>Details:</b></dt>
7958
<dd><p>Send a message with a given value or ‘<samp>nil</samp>’ to the object. Every message
7959
can be sent directly as a method with the given message name. When the object
7960
reference is invalid the message is simply ignored.
7963
<dt> <b>Syntax Samples:</b></dt>
7964
<dd><table><tr><td> </td><td><pre class="example"><var>value</var> = <var>obj</var>:<b>message</b>("<b>open</b>")
7965
<var>value</var> = <var>obj</var>:<b>open</b>()
7966
<var>value</var> = <var>obj</var>:<b>message</b>("<b>signal</b>", <var>1</var>)
7967
<var>value</var> = <var>obj</var>:<b>signal</b>(<var>1</var>)
7968
</pre></td></tr></table>
7973
<a name="Object-Comparison"></a>
7974
<table cellpadding="1" cellspacing="1" border="0">
7975
<tr><td valign="middle" align="left">[<a href="#Object-Messaging" title="Previous section in reading order"> < </a>]</td>
7976
<td valign="middle" align="left">[<a href="#Object-Existence" title="Next section in reading order"> > </a>]</td>
7977
<td valign="middle" align="left"> </td>
7978
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
7979
<td valign="middle" align="left">[<a href="#Object" title="Up section"> Up </a>]</td>
7980
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
7981
<td valign="middle" align="left"> </td>
7982
<td valign="middle" align="left"> </td>
7983
<td valign="middle" align="left"> </td>
7984
<td valign="middle" align="left"> </td>
7985
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
7986
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
7987
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
7988
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
7990
<a name="Object-Comparison-1"></a>
7991
<h3 class="subsection">5.6.3 Object Comparison</h3>
7993
<dl compact="compact">
7994
<dt> <b>Syntax:</b></dt>
7995
<dd><p>result = <i>obj1</i> <==|~=> <i>obj2</i>
7998
<dt> <b>Details:</b></dt>
7999
<dd><p>A comparison of two object values. Two object values are equal if both
8000
reference the same, still existing world object. Otherwise they are unequal.
8003
<dt> <b>Syntax Samples:</b></dt>
8004
<dd><table><tr><td> </td><td><pre class="example"><var>bool</var> = <var>obj1</var> == <var>obj1</var> -- = true
8005
<var>bool</var> = <var>obj1</var> == <var>obj2</var> -- = false, if two different objects
8006
<var>bool</var> = <var>obj1</var> ~= <var>obj2</var> -- = true, if two different objects
8007
</pre></td></tr></table>
8012
<a name="Object-Existence"></a>
8013
<table cellpadding="1" cellspacing="1" border="0">
8014
<tr><td valign="middle" align="left">[<a href="#Object-Comparison" title="Previous section in reading order"> < </a>]</td>
8015
<td valign="middle" align="left">[<a href="#Object-Kill" title="Next section in reading order"> > </a>]</td>
8016
<td valign="middle" align="left"> </td>
8017
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
8018
<td valign="middle" align="left">[<a href="#Object" title="Up section"> Up </a>]</td>
8019
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
8020
<td valign="middle" align="left"> </td>
8021
<td valign="middle" align="left"> </td>
8022
<td valign="middle" align="left"> </td>
8023
<td valign="middle" align="left"> </td>
8024
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
8025
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
8026
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
8027
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
8029
<a name="Object-Existence-1"></a>
8030
<h3 class="subsection">5.6.4 Object Existence</h3>
8032
<dl compact="compact">
8033
<dt> <b>Syntax:</b></dt>
8034
<dd><p>result = -<i>obj</i>
8036
<p>result = <i>obj</i>:exists()
8039
<dt> <b>Details:</b></dt>
8040
<dd><p>Checks whether an object reference is still valid. Returns true if the object
8041
still exists, otherwise false is returned for ‘<samp>NULL</samp>’ object references.
8044
<dt> <b>Syntax Samples:</b></dt>
8045
<dd><table><tr><td> </td><td><pre class="example"><var>bool</var> = -<var>obj</var>
8046
<var>bool</var> = <var>obj</var>:<b>exists</b>()
8047
</pre></td></tr></table>
8052
<a name="Object-Kill"></a>
8053
<table cellpadding="1" cellspacing="1" border="0">
8054
<tr><td valign="middle" align="left">[<a href="#Object-Existence" title="Previous section in reading order"> < </a>]</td>
8055
<td valign="middle" align="left">[<a href="#Object-Kind-Check" title="Next section in reading order"> > </a>]</td>
8056
<td valign="middle" align="left"> </td>
8057
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
8058
<td valign="middle" align="left">[<a href="#Object" title="Up section"> Up </a>]</td>
8059
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
8060
<td valign="middle" align="left"> </td>
8061
<td valign="middle" align="left"> </td>
8062
<td valign="middle" align="left"> </td>
8063
<td valign="middle" align="left"> </td>
8064
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
8065
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
8066
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
8067
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
8069
<a name="Object-Kill-1"></a>
8070
<h3 class="subsection">5.6.5 Object Kill</h3>
8072
<dl compact="compact">
8073
<dt> <b>Syntax:</b></dt>
8074
<dd><p><i>obj</i>:kill()
8077
<dt> <b>Details:</b></dt>
8078
<dd><p>Kills the object at once. Note that you should never kill a sender object
8079
within a callback action. If you have need of killing the sender then add
8080
the attribute <a href="#safeaction">safeaction</a> as explained in <a href="#Target-_002d-Action">Target - Action</a>.
8083
<dt> <b>Syntax Samples:</b></dt>
8084
<dd><table><tr><td> </td><td><pre class="example"><var>obj</var>:<b>kill</b>()
8085
</pre></td></tr></table>
8090
<a name="Object-Kind-Check"></a>
8091
<table cellpadding="1" cellspacing="1" border="0">
8092
<tr><td valign="middle" align="left">[<a href="#Object-Kill" title="Previous section in reading order"> < </a>]</td>
8093
<td valign="middle" align="left">[<a href="#Object-Coordinate-Access" title="Next section in reading order"> > </a>]</td>
8094
<td valign="middle" align="left"> </td>
8095
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
8096
<td valign="middle" align="left">[<a href="#Object" title="Up section"> Up </a>]</td>
8097
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
8098
<td valign="middle" align="left"> </td>
8099
<td valign="middle" align="left"> </td>
8100
<td valign="middle" align="left"> </td>
8101
<td valign="middle" align="left"> </td>
8102
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
8103
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
8104
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
8105
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
8107
<a name="Object-Kind-Check-1"></a>
8108
<h3 class="subsection">5.6.6 Object Kind Check</h3>
8110
<dl compact="compact">
8111
<dt> <b>Syntax:</b></dt>
8112
<dd><p>result = <i>obj</i>:is("kind")
8114
<p>result = <i>obj</i>:kind()
8117
<dt> <b>Details:</b></dt>
8118
<dd><p>These methods allow you to check or retrieve the <a href="#Object-Kind">Object Kind</a>.
8121
<dt> <b>Syntax Samples:</b></dt>
8122
<dd><table><tr><td> </td><td><pre class="example"><var>bool</var> = <var>obj</var>:<b>is</b>("<b>st_chess</b>")
8123
<var>string</var> = <var>obj</var>:<b>kind</b>()
8124
</pre></td></tr></table>
8129
<a name="Object-Coordinate-Access"></a>
8130
<table cellpadding="1" cellspacing="1" border="0">
8131
<tr><td valign="middle" align="left">[<a href="#Object-Kind-Check" title="Previous section in reading order"> < </a>]</td>
8132
<td valign="middle" align="left">[<a href="#Object-Addition-and-Subtraction" title="Next section in reading order"> > </a>]</td>
8133
<td valign="middle" align="left"> </td>
8134
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
8135
<td valign="middle" align="left">[<a href="#Object" title="Up section"> Up </a>]</td>
8136
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
8137
<td valign="middle" align="left"> </td>
8138
<td valign="middle" align="left"> </td>
8139
<td valign="middle" align="left"> </td>
8140
<td valign="middle" align="left"> </td>
8141
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
8142
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
8143
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
8144
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
8146
<a name="Object-Coordinate-Access-1"></a>
8147
<h3 class="subsection">5.6.7 Object Coordinate Access</h3>
8149
<dl compact="compact">
8150
<dt> <b>Syntax:</b></dt>
8151
<dd><p>result = <i>obj</i>["x"]
8153
<p>result = <i>obj</i>["y"]
8155
<p>result1, result2 = <i>obj</i>:xy()
8158
<dt> <b>Details:</b></dt>
8159
<dd><p>The single position coordinates of an object can be read anytime. You can
8160
retrieve single coordinates by Lua square bracket index access. Of course you
8161
can use the Lua alternative dot index access syntax, too (see examples). If you
8162
want to evaluate both coordinates, you can make use of the method ‘<samp>xy()</samp>’,
8163
that returns both numbers at once in a Lua multiple assignment. Anyway the
8164
coordinates of an object are read only. You can not reposition an object by
8165
changing its coordinates.
8168
<dt> <b>Syntax Samples:</b></dt>
8169
<dd><table><tr><td> </td><td><pre class="example"><var>number</var> = <var>obj</var>["<b>x</b>"]
8170
<var>number</var> = <var>obj</var>.<b>x</b>
8171
<var>number</var> = <var>obj</var>["<b>y</b>"]
8172
<var>number</var> = <var>obj</var>.<b>y</b>
8173
<var>number1</var>, <var>number2</var> = <var>obj</var>:<b>xy</b>()
8174
</pre></td></tr></table>
8179
<a name="Object-Addition-and-Subtraction"></a>
8180
<table cellpadding="1" cellspacing="1" border="0">
8181
<tr><td valign="middle" align="left">[<a href="#Object-Coordinate-Access" title="Previous section in reading order"> < </a>]</td>
8182
<td valign="middle" align="left">[<a href="#Object-Center" title="Next section in reading order"> > </a>]</td>
8183
<td valign="middle" align="left"> </td>
8184
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
8185
<td valign="middle" align="left">[<a href="#Object" title="Up section"> Up </a>]</td>
8186
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
8187
<td valign="middle" align="left"> </td>
8188
<td valign="middle" align="left"> </td>
8189
<td valign="middle" align="left"> </td>
8190
<td valign="middle" align="left"> </td>
8191
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
8192
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
8193
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
8194
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
8196
<a name="Object-Addition-and-Subtraction-1"></a>
8197
<h3 class="subsection">5.6.8 Object Addition and Subtraction</h3>
8199
<dl compact="compact">
8200
<dt> <b>Syntax:</b></dt>
8201
<dd><p>result = <i>obj</i> <<b>+</b>|<b>-</b>> <<i>pos</i> | <i>obj</i> | <i>cpos</i> | <i>polist</i>>
8203
<p>result = <<i>pos</i> | <i>obj</i> | <i>cpos</i> | <i>polist</i>> <<b>+</b>|<b>-</b>> <i>obj</i>
8206
<dt> <b>Details:</b></dt>
8207
<dd><p>When an object is added to or subtracted from another position or data
8208
convertible to a position the result is the position value representing the
8209
vectorial addition or difference of both positions.
8211
<p>If an object is added to or subtracted from a position list a new list is created
8212
with the positions representing the sum or difference of the position with every
8213
member of the supplied position list.
8216
<dt> <b>Syntax Samples:</b></dt>
8217
<dd><table><tr><td> </td><td><pre class="example"><var>newpos</var> = <var>obj</var> + {<var>1</var>, <var>2</var>}
8218
<var>newpos</var> = <var>myobject</var> - <var>obj</var>
8219
<var>newpolist</var> = <var>obj</var> + <var>NEIGHBORS_4</var>
8220
<var>newpolist</var> = <i>po</i>["<var>myfloor</var>#*"] - <var>obj</var>
8221
</pre></td></tr></table>
8226
<a name="Object-Center"></a>
8227
<table cellpadding="1" cellspacing="1" border="0">
8228
<tr><td valign="middle" align="left">[<a href="#Object-Addition-and-Subtraction" title="Previous section in reading order"> < </a>]</td>
8229
<td valign="middle" align="left">[<a href="#Object-Join" title="Next section in reading order"> > </a>]</td>
8230
<td valign="middle" align="left"> </td>
8231
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
8232
<td valign="middle" align="left">[<a href="#Object" title="Up section"> Up </a>]</td>
8233
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
8234
<td valign="middle" align="left"> </td>
8235
<td valign="middle" align="left"> </td>
8236
<td valign="middle" align="left"> </td>
8237
<td valign="middle" align="left"> </td>
8238
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
8239
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
8240
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
8241
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
8243
<a name="Object-Center-1"></a>
8244
<h3 class="subsection">5.6.9 Object Center</h3>
8246
<dl compact="compact">
8247
<dt> <b>Syntax:</b></dt>
8248
<dd><p>result = #<i>obj</i>
8251
<dt> <b>Details:</b></dt>
8252
<dd><p>A rounding of an objects position vector to the center of the grid. A new
8253
position value with coordinates of the center of the containing grid position
8257
<dt> <b>Syntax Samples:</b></dt>
8258
<dd><table><tr><td> </td><td><pre class="example"><var>newpos</var> = #<var>obj</var> -- e.g. po(3.5, 4.5)
8259
</pre></td></tr></table>
8264
<a name="Object-Join"></a>
8265
<table cellpadding="1" cellspacing="1" border="0">
8266
<tr><td valign="middle" align="left">[<a href="#Object-Center" title="Previous section in reading order"> < </a>]</td>
8267
<td valign="middle" align="left">[<a href="#Object-Intersection" title="Next section in reading order"> > </a>]</td>
8268
<td valign="middle" align="left"> </td>
8269
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
8270
<td valign="middle" align="left">[<a href="#Object" title="Up section"> Up </a>]</td>
8271
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
8272
<td valign="middle" align="left"> </td>
8273
<td valign="middle" align="left"> </td>
8274
<td valign="middle" align="left"> </td>
8275
<td valign="middle" align="left"> </td>
8276
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
8277
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
8278
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
8279
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
8281
<a name="Object-Join-1"></a>
8282
<h3 class="subsection">5.6.10 Object Join</h3>
8284
<dl compact="compact">
8285
<dt> <b>Syntax:</b></dt>
8286
<dd><p>result = <i>obj</i> + <i>group</i>
8288
<p>result = <i>group</i> + <i>obj</i>
8291
<dt> <b>Details:</b></dt>
8292
<dd><p>A new set containing the objects of the group plus the single object is returned.
8293
The object sequence is maintained. If the object is already member of the group
8294
the new group will contain just one object reference, namely the first one in
8298
<dt> <b>Syntax Samples:</b></dt>
8299
<dd><table><tr><td> </td><td><pre class="example"><var>newgroup</var> = <var>obj1</var> + <i>grp</i>(<var>obj2</var>, <var>obj3</var>, <var>obj1</var>) -- = grp(obj1, obj2, obj3)
8300
<var>newgroup</var> = <i>grp</i>(<var>obj2</var>, <var>obj3</var>) + <var>obj1</var> -- = grp(obj2, obj3, obj1)
8301
</pre></td></tr></table>
8306
<a name="Object-Intersection"></a>
8307
<table cellpadding="1" cellspacing="1" border="0">
8308
<tr><td valign="middle" align="left">[<a href="#Object-Join" title="Previous section in reading order"> < </a>]</td>
8309
<td valign="middle" align="left">[<a href="#Object-Difference" title="Next section in reading order"> > </a>]</td>
8310
<td valign="middle" align="left"> </td>
8311
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
8312
<td valign="middle" align="left">[<a href="#Object" title="Up section"> Up </a>]</td>
8313
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
8314
<td valign="middle" align="left"> </td>
8315
<td valign="middle" align="left"> </td>
8316
<td valign="middle" align="left"> </td>
8317
<td valign="middle" align="left"> </td>
8318
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
8319
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
8320
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
8321
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
8323
<a name="Object-Intersection-1"></a>
8324
<h3 class="subsection">5.6.11 Object Intersection</h3>
8326
<dl compact="compact">
8327
<dt> <b>Syntax:</b></dt>
8328
<dd><p>result = <i>obj</i> * <i>group</i>
8330
<p>result = <i>group</i> * <i>obj</i>
8333
<dt> <b>Details:</b></dt>
8334
<dd><p>A new set containing just the object itself, in case it is part of the group,
8335
too, or an empty group returned.
8338
<dt> <b>Syntax Samples:</b></dt>
8339
<dd><table><tr><td> </td><td><pre class="example"><var>newgroup</var> = <var>obj1</var> * <i>grp</i>(<var>obj1</var>, <var>obj2</var>) -- = grp(obj1)
8340
<var>newgroup</var> = <i>grp</i>(<var>obj2</var>) * <var>obj1</var> -- = grp()
8341
</pre></td></tr></table>
8346
<a name="Object-Difference"></a>
8347
<table cellpadding="1" cellspacing="1" border="0">
8348
<tr><td valign="middle" align="left">[<a href="#Object-Intersection" title="Previous section in reading order"> < </a>]</td>
8349
<td valign="middle" align="left">[<a href="#Object-Sound" title="Next section in reading order"> > </a>]</td>
8350
<td valign="middle" align="left"> </td>
8351
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
8352
<td valign="middle" align="left">[<a href="#Object" title="Up section"> Up </a>]</td>
8353
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
8354
<td valign="middle" align="left"> </td>
8355
<td valign="middle" align="left"> </td>
8356
<td valign="middle" align="left"> </td>
8357
<td valign="middle" align="left"> </td>
8358
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
8359
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
8360
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
8361
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
8363
<a name="Object-Difference-1"></a>
8364
<h3 class="subsection">5.6.12 Object Difference</h3>
8366
<dl compact="compact">
8367
<dt> <b>Syntax:</b></dt>
8368
<dd><p>result = <i>obj</i> - <i>group</i>
8370
<p>result = <i>group</i> - <i>obj</i>
8373
<dt> <b>Details:</b></dt>
8374
<dd><p>In the first case a new set containing just the object itself, if it is not part
8375
of the group, too, or an empty group returned. In the second case the new group
8376
contains all members of the old group without the object. The sequence of
8377
objects remains untouched.
8380
<dt> <b>Syntax Samples:</b></dt>
8381
<dd><table><tr><td> </td><td><pre class="example"><var>newgroup</var> = <var>obj1</var> - <i>grp</i>(<var>obj2</var>, <var>obj1</var>) -- = grp()
8382
<var>newgroup</var> = <i>grp</i>(<var>obj1</var>, <var>obj2</var>) - <var>obj1</var> -- = grp(obj2)
8383
</pre></td></tr></table>
8388
<a name="Object-Sound"></a>
8389
<table cellpadding="1" cellspacing="1" border="0">
8390
<tr><td valign="middle" align="left">[<a href="#Object-Difference" title="Previous section in reading order"> < </a>]</td>
8391
<td valign="middle" align="left">[<a href="#Group" title="Next section in reading order"> > </a>]</td>
8392
<td valign="middle" align="left"> </td>
8393
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
8394
<td valign="middle" align="left">[<a href="#Object" title="Up section"> Up </a>]</td>
8395
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
8396
<td valign="middle" align="left"> </td>
8397
<td valign="middle" align="left"> </td>
8398
<td valign="middle" align="left"> </td>
8399
<td valign="middle" align="left"> </td>
8400
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
8401
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
8402
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
8403
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
8405
<a name="Object-Sound-1"></a>
8406
<h3 class="subsection">5.6.13 Object Sound</h3>
8408
<dl compact="compact">
8409
<dt> <b>Syntax:</b></dt>
8410
<dd><p>result = <i>obj</i>:sound("name", volume)
8413
<dt> <b>Details:</b></dt>
8414
<dd><p>Play a sound of given name at the position of the object. The volume defaults
8415
to ‘<samp>1</samp>’.
8418
<dt> <b>Syntax Samples:</b></dt>
8419
<dd><table><tr><td> </td><td><pre class="example"><var>obj</var>:<b>sound</b>("<b>quake</b>")
8420
<var>obj</var>:<b>sound</b>("<b>quake</b>", <var>2</var>)
8421
</pre></td></tr></table>
8428
<a name="Group"></a>
8429
<table cellpadding="1" cellspacing="1" border="0">
8430
<tr><td valign="middle" align="left">[<a href="#Object-Sound" title="Previous section in reading order"> < </a>]</td>
8431
<td valign="middle" align="left">[<a href="#Group-Messaging" title="Next section in reading order"> > </a>]</td>
8432
<td valign="middle" align="left"> </td>
8433
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
8434
<td valign="middle" align="left">[<a href="#Lua-API" title="Up section"> Up </a>]</td>
8435
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
8436
<td valign="middle" align="left"> </td>
8437
<td valign="middle" align="left"> </td>
8438
<td valign="middle" align="left"> </td>
8439
<td valign="middle" align="left"> </td>
8440
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
8441
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
8442
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
8443
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
8445
<a name="Group-1"></a>
8446
<h2 class="section">5.7 Group</h2>
8448
<p>A group is a sorted set of <a href="#Object">Object</a>s. Every object can be contained just
8449
in one instance in the group. In contrast to a Lua table the group is a constant
8450
value datatype. Once you retrieved a group it can not be modified. But you can
8451
calculate and apply operators like join, intersection and difference on
8452
groups and generate thereby other group values as results.
8454
<p>Even though groups as values are long living you should be careful in keeping
8455
a group longer than a callback evaluation. Groups contain object references and
8456
objects can be killed. Thus a prior retrieved group may contain invalid
8457
object references on a subsequent callback evaluation. This may be uncritical
8458
if you just send a message to a group, but in other cases you may need to
8459
clean the group from invalid members (see below).
8461
<p>You create a group by listing the contained objects as arguments to the
8462
‘<samp>grp()</samp>’ <a href="#Functions">Functions</a>, by retrieving objects from the <a href="#NamedObjects">NamedObjects</a>
8463
repository or as result of other methods and calculations.
8465
<p>As groups are constant the sequence of contained objects is stable. All
8466
operations that generate resulting new groups maintain this sequence as far
8467
as possible. E.g. a join of two groups takes the objects of the first group
8468
in the given sequence and appends the additional objects of the second group
8469
in the sequence they appear in the second group.
8471
<p>All group operations that return new groups clean their results from any
8472
meanwhile invalid ‘<samp>NULL</samp>’ object references. You can use this feature
8473
to clean a group by the function ‘<samp>grp()</samp>’.
8475
<p>Any message sent to a group will be forwarded to all its members in sequence.
8476
An attribute write access to a group results in series of attribute writes
8477
on every group member in sequence, too.
8479
<p>But of course you can iterate over a group and access every member by index
8480
access. Several special methods for common group evaluations like shuffling,
8481
subgroup, sort, etc. are supported, too.
8483
<p>For task driven samples see section <a href="#Group-Tasks">Group Tasks</a>.
8485
<table class="menu" border="0" cellspacing="0">
8486
<tr><td align="left" valign="top"><a href="#Group-Messaging">5.7.1 Group Messaging</a></td><td> </td><td align="left" valign="top"> Method Operator ‘<samp>:</samp>’
8488
<tr><td align="left" valign="top"><a href="#Group-Attribute-Write">5.7.2 Group Attribute Write</a></td><td> </td><td align="left" valign="top"> Index Operators ‘<samp>[]</samp>’
8490
<tr><td align="left" valign="top"><a href="#Group-Comparison">5.7.3 Group Comparison</a></td><td> </td><td align="left" valign="top"> Equality ‘<samp>==</samp>’ and Inequality ‘<samp>~=</samp>’
8492
<tr><td align="left" valign="top"><a href="#Group-Length">5.7.4 Group Length</a></td><td> </td><td align="left" valign="top"> Operator ‘<samp>#</samp>’
8494
<tr><td align="left" valign="top"><a href="#Group-Member-Access">5.7.5 Group Member Access</a></td><td> </td><td align="left" valign="top"> Index Operators ‘<samp>[]</samp>’
8496
<tr><td align="left" valign="top"><a href="#Group-Loop">5.7.6 Group Loop</a></td><td> </td><td align="left" valign="top"> ‘<samp>for obj in group do ... end</samp>’
8498
<tr><td align="left" valign="top"><a href="#Group-Join">5.7.7 Group Join</a></td><td> </td><td align="left" valign="top"> Operator ‘<samp>+</samp>’
8500
<tr><td align="left" valign="top"><a href="#Group-Intersection">5.7.8 Group Intersection</a></td><td> </td><td align="left" valign="top"> Operator ‘<samp>*</samp>’
8502
<tr><td align="left" valign="top"><a href="#Group-Difference">5.7.9 Group Difference</a></td><td> </td><td align="left" valign="top"> Operator ‘<samp>-</samp>’
8504
<tr><td align="left" valign="top"><a href="#Group-Shuffle">5.7.10 Group Shuffle</a></td><td> </td><td align="left" valign="top"> Method ‘<samp>shuffle()</samp>’
8506
<tr><td align="left" valign="top"><a href="#Group-Sorting">5.7.11 Group Sorting</a></td><td> </td><td align="left" valign="top"> Method ‘<samp>sort()</samp>’
8508
<tr><td align="left" valign="top"><a href="#Group-Subset">5.7.12 Group Subset</a></td><td> </td><td align="left" valign="top"> Method ‘<samp>sub()</samp>’
8510
<tr><td align="left" valign="top"><a href="#Group-Nearest-Object">5.7.13 Group Nearest Object</a></td><td> </td><td align="left" valign="top"> Method ‘<samp>nearest()</samp>’
8515
<a name="Group-Messaging"></a>
8516
<table cellpadding="1" cellspacing="1" border="0">
8517
<tr><td valign="middle" align="left">[<a href="#Group" title="Previous section in reading order"> < </a>]</td>
8518
<td valign="middle" align="left">[<a href="#Group-Attribute-Write" title="Next section in reading order"> > </a>]</td>
8519
<td valign="middle" align="left"> </td>
8520
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
8521
<td valign="middle" align="left">[<a href="#Group" title="Up section"> Up </a>]</td>
8522
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
8523
<td valign="middle" align="left"> </td>
8524
<td valign="middle" align="left"> </td>
8525
<td valign="middle" align="left"> </td>
8526
<td valign="middle" align="left"> </td>
8527
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
8528
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
8529
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
8530
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
8532
<a name="Group-Messaging-1"></a>
8533
<h3 class="subsection">5.7.1 Group Messaging</h3>
8535
<dl compact="compact">
8536
<dt> <b>Syntax:</b></dt>
8537
<dd><p>result = <i>group</i>:message("msg", value)
8539
<p>result = <i>group</i>:msg(value)
8542
<dt> <b>Details:</b></dt>
8543
<dd><p>Send a message with a given value or ‘<samp>nil</samp>’ to all objects in the group.
8544
Every message can be sent directly as a method with the given message name.
8545
When an object reference is invalid the message is simply ignored. The result
8546
is the return value of the message to the last object in the group, or ‘<samp>nil</samp>’
8549
<p>You are even allowed to send a ‘<samp>kill()</samp>’ message to all objects in a group.
8550
The objects will be killed, but the group remains filled with invalid ‘<samp>NULL</samp>’
8554
<dt> <b>Syntax Samples:</b></dt>
8555
<dd><table><tr><td> </td><td><pre class="example"><var>value</var> = <var>group</var>:<b>message</b>("<b>open</b>")
8556
<var>value</var> = <var>group</var>:<b>open</b>()
8557
<var>value</var> = <var>group</var>:<b>message</b>("<b>signal</b>", <var>1</var>)
8558
<var>value</var> = <var>group</var>:<b>signal</b>(<var>1</var>)
8559
<var>value</var> = <var>group</var>:<b>kill</b>()
8560
</pre></td></tr></table>
8565
<a name="Group-Attribute-Write"></a>
8566
<table cellpadding="1" cellspacing="1" border="0">
8567
<tr><td valign="middle" align="left">[<a href="#Group-Messaging" title="Previous section in reading order"> < </a>]</td>
8568
<td valign="middle" align="left">[<a href="#Group-Comparison" title="Next section in reading order"> > </a>]</td>
8569
<td valign="middle" align="left"> </td>
8570
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
8571
<td valign="middle" align="left">[<a href="#Group" title="Up section"> Up </a>]</td>
8572
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
8573
<td valign="middle" align="left"> </td>
8574
<td valign="middle" align="left"> </td>
8575
<td valign="middle" align="left"> </td>
8576
<td valign="middle" align="left"> </td>
8577
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
8578
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
8579
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
8580
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
8582
<a name="Group-Attribute-Write-1"></a>
8583
<h3 class="subsection">5.7.2 Group Attribute Write</h3>
8585
<dl compact="compact">
8586
<dt> <b>Syntax:</b></dt>
8587
<dd><p><i>group</i>["attributename"] = value
8589
<p><i>group</i>:set({attributename1=value1, attributename2=value2,...})
8592
<dt> <b>Details:</b></dt>
8593
<dd><p>Set attributes as described in the following chapters or custom attributes on
8594
all objects of the group. The ‘<samp>set</samp>’ method allows you to set multiple
8595
attributes at once. Attribute writes are ignored if an object reference is
8596
invalid. Attribute read on groups in not allowed - the group index read is
8597
overloaded as a group member access.
8600
<dt> <b>Syntax Samples:</b></dt>
8601
<dd><table><tr><td> </td><td><pre class="example"><var>group</var>["<b>color</b>"] = <var>BLACK</var>
8602
<var>group</var>.<b>color</b> = <var>BLACK</var>
8603
<var>group</var>:<b>set</b>({<b>target</b>=<var>mydoor</var>, <b>action</b>="<b>open</b>"})
8604
</pre></td></tr></table>
8609
<a name="Group-Comparison"></a>
8610
<table cellpadding="1" cellspacing="1" border="0">
8611
<tr><td valign="middle" align="left">[<a href="#Group-Attribute-Write" title="Previous section in reading order"> < </a>]</td>
8612
<td valign="middle" align="left">[<a href="#Group-Length" title="Next section in reading order"> > </a>]</td>
8613
<td valign="middle" align="left"> </td>
8614
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
8615
<td valign="middle" align="left">[<a href="#Group" title="Up section"> Up </a>]</td>
8616
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
8617
<td valign="middle" align="left"> </td>
8618
<td valign="middle" align="left"> </td>
8619
<td valign="middle" align="left"> </td>
8620
<td valign="middle" align="left"> </td>
8621
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
8622
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
8623
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
8624
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
8626
<a name="Group-Comparison-1"></a>
8627
<h3 class="subsection">5.7.3 Group Comparison</h3>
8629
<dl compact="compact">
8630
<dt> <b>Syntax:</b></dt>
8631
<dd><p>result = <i>group1</i> <==|~=> <i>group2</i>
8634
<dt> <b>Details:</b></dt>
8635
<dd><p>A comparison of two groups. Two groups are equal if both contain the same set
8636
of objects independent of their sequence within both groups. Otherwise they are
8640
<dt> <b>Syntax Samples:</b></dt>
8641
<dd><table><tr><td> </td><td><pre class="example"><var>bool</var> = <i>grp</i>(<var>obj1</var>, <var>obj2</var>) == <i>grp</i>(<var>obj2</var>, <var>obj1</var>) -- = true
8642
<var>bool</var> = <i>grp</i>(<var>obj1</var>, <var>obj2</var>) == <i>grp</i>(<var>obj1</var>, <var>obj3</var>) -- = false, if different object contents
8643
<var>bool</var> = <i>grp</i>(<var>obj1</var>) ~= <i>grp</i>(<var>obj2</var>, <var>obj1</var>) -- = true, if different object contents
8644
</pre></td></tr></table>
8649
<a name="Group-Length"></a>
8650
<table cellpadding="1" cellspacing="1" border="0">
8651
<tr><td valign="middle" align="left">[<a href="#Group-Comparison" title="Previous section in reading order"> < </a>]</td>
8652
<td valign="middle" align="left">[<a href="#Group-Member-Access" title="Next section in reading order"> > </a>]</td>
8653
<td valign="middle" align="left"> </td>
8654
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
8655
<td valign="middle" align="left">[<a href="#Group" title="Up section"> Up </a>]</td>
8656
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
8657
<td valign="middle" align="left"> </td>
8658
<td valign="middle" align="left"> </td>
8659
<td valign="middle" align="left"> </td>
8660
<td valign="middle" align="left"> </td>
8661
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
8662
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
8663
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
8664
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
8666
<a name="Group-Length-1"></a>
8667
<h3 class="subsection">5.7.4 Group Length</h3>
8669
<dl compact="compact">
8670
<dt> <b>Syntax:</b></dt>
8671
<dd><p>result = #<i>group</i>
8674
<dt> <b>Details:</b></dt>
8675
<dd><p>Number of objects contained in the group. Invalid ‘<samp>NULL</samp>’ object references
8679
<dt> <b>Syntax Samples:</b></dt>
8680
<dd><table><tr><td> </td><td><pre class="example"><var>number</var> = #<i>grp</i>(<var>obj1</var>, <var>obj2</var>) -- = 2
8681
for <var>i</var> = <var>1</var>, #<var>group</var> do <var>obj</var> = <var>group</var>[<var>i</var>] ... end
8682
</pre></td></tr></table>
8687
<a name="Group-Member-Access"></a>
8688
<table cellpadding="1" cellspacing="1" border="0">
8689
<tr><td valign="middle" align="left">[<a href="#Group-Length" title="Previous section in reading order"> < </a>]</td>
8690
<td valign="middle" align="left">[<a href="#Group-Loop" title="Next section in reading order"> > </a>]</td>
8691
<td valign="middle" align="left"> </td>
8692
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
8693
<td valign="middle" align="left">[<a href="#Group" title="Up section"> Up </a>]</td>
8694
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
8695
<td valign="middle" align="left"> </td>
8696
<td valign="middle" align="left"> </td>
8697
<td valign="middle" align="left"> </td>
8698
<td valign="middle" align="left"> </td>
8699
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
8700
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
8701
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
8702
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
8704
<a name="Group-Member-Access-1"></a>
8705
<h3 class="subsection">5.7.5 Group Member Access</h3>
8707
<dl compact="compact">
8708
<dt> <b>Syntax:</b></dt>
8709
<dd><p>result = <i>group</i>[<i>index</i>]
8711
<p>result = <i>group</i>[<i>obj</i>]
8714
<dt> <b>Details:</b></dt>
8715
<dd><p>An index like read access with an index number between 1 and #<i>group</i> returns
8716
the object in the related group sequence position. Negative indices between
8717
-#<i>group</i> and -1 give the same objects. Thus you can always access the last
8718
object at index -1. All other index positions return an invalid ‘<samp>NULL</samp>’
8719
object - not ‘<samp>nil</samp>’ as tables do! Thus you are always able to send messages
8720
to returned object references.
8722
<p>An index like read access with an object as index returns the sequence position
8723
number, the number index, of the object if it is contained in the group or
8724
‘<samp>nil</samp>’ if it is not contained.
8727
<dt> <b>Syntax Samples:</b></dt>
8728
<dd><table><tr><td> </td><td><pre class="example"><var>object</var> = <i>grp</i>(<var>obj1</var>, <var>obj2</var>)[2] -- = obj2
8729
<var>object</var> = <i>grp</i>(<var>obj1</var>, <var>obj2</var>)[-1] -- = obj2
8730
<var>object</var> = <i>grp</i>(<var>obj1</var>, <var>obj2</var>)[0] -- = NULL object
8731
for <var>i</var> = <var>1</var>, #<var>group</var> do <var>obj</var> = <var>group</var>[<var>i</var>] ... end
8732
<var>number</var> = <i>grp</i>(<var>obj1</var>, <var>obj2</var>)[<var>obj2</var>] -- = 2
8733
<var>number</var> = <i>grp</i>(<var>obj1</var>, <var>obj2</var>)[<var>obj3</var>] -- = nil
8734
</pre></td></tr></table>
8739
<a name="Group-Loop"></a>
8740
<table cellpadding="1" cellspacing="1" border="0">
8741
<tr><td valign="middle" align="left">[<a href="#Group-Member-Access" title="Previous section in reading order"> < </a>]</td>
8742
<td valign="middle" align="left">[<a href="#Group-Join" title="Next section in reading order"> > </a>]</td>
8743
<td valign="middle" align="left"> </td>
8744
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
8745
<td valign="middle" align="left">[<a href="#Group" title="Up section"> Up </a>]</td>
8746
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
8747
<td valign="middle" align="left"> </td>
8748
<td valign="middle" align="left"> </td>
8749
<td valign="middle" align="left"> </td>
8750
<td valign="middle" align="left"> </td>
8751
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
8752
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
8753
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
8754
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
8756
<a name="Group-Loop-1"></a>
8757
<h3 class="subsection">5.7.6 Group Loop</h3>
8759
<dl compact="compact">
8760
<dt> <b>Syntax:</b></dt>
8761
<dd><p>for <i>obj</i> in <i>group</i> do ... end
8764
<dt> <b>Details:</b></dt>
8765
<dd><p>Looping over all objects contained in a group. The loop occurs in the sequence
8766
of the contained objects and includes all objects, even invalid ‘<samp>NULL</samp>’
8770
<dt> <b>Syntax Samples:</b></dt>
8771
<dd><table><tr><td> </td><td><pre class="example">for <var>obj</var> in <var>group</var> do <var>obj</var>:<b>toggle</b>() end
8772
</pre></td></tr></table>
8778
<a name="Group-Join"></a>
8779
<table cellpadding="1" cellspacing="1" border="0">
8780
<tr><td valign="middle" align="left">[<a href="#Group-Loop" title="Previous section in reading order"> < </a>]</td>
8781
<td valign="middle" align="left">[<a href="#Group-Intersection" title="Next section in reading order"> > </a>]</td>
8782
<td valign="middle" align="left"> </td>
8783
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
8784
<td valign="middle" align="left">[<a href="#Group" title="Up section"> Up </a>]</td>
8785
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
8786
<td valign="middle" align="left"> </td>
8787
<td valign="middle" align="left"> </td>
8788
<td valign="middle" align="left"> </td>
8789
<td valign="middle" align="left"> </td>
8790
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
8791
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
8792
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
8793
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
8795
<a name="Group-Join-1"></a>
8796
<h3 class="subsection">5.7.7 Group Join</h3>
8798
<dl compact="compact">
8799
<dt> <b>Syntax:</b></dt>
8800
<dd><p>result = <i>group</i> + <<i>obj</i>|<i>group</i>>
8802
<p>result = <<i>obj</i>|<i>group</i>> + <i>group</i>
8806
<dt> <b>Details:</b></dt>
8807
<dd><p>A new set containing any object of both arguments just once, is returned. The
8808
object sequence is maintained. If an object is member of both arguments the new
8809
group will contain just one object reference, namely the first one in sequence.
8812
<dt> <b>Syntax Samples:</b></dt>
8813
<dd><table><tr><td> </td><td><pre class="example"><var>newgroup</var> = <var>obj1</var> + <i>grp</i>(<var>obj2</var>, <var>obj3</var>, <var>obj1</var>) -- = grp(obj1, obj2, obj3)
8814
<var>newgroup</var> = <i>grp</i>(<var>obj2</var>, <var>obj3</var>) + <i>grp</i>(<var>obj1</var>, <var>obj3</var>) -- = grp(obj2, obj3, obj1)
8815
</pre></td></tr></table>
8820
<a name="Group-Intersection"></a>
8821
<table cellpadding="1" cellspacing="1" border="0">
8822
<tr><td valign="middle" align="left">[<a href="#Group-Join" title="Previous section in reading order"> < </a>]</td>
8823
<td valign="middle" align="left">[<a href="#Group-Difference" title="Next section in reading order"> > </a>]</td>
8824
<td valign="middle" align="left"> </td>
8825
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
8826
<td valign="middle" align="left">[<a href="#Group" title="Up section"> Up </a>]</td>
8827
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
8828
<td valign="middle" align="left"> </td>
8829
<td valign="middle" align="left"> </td>
8830
<td valign="middle" align="left"> </td>
8831
<td valign="middle" align="left"> </td>
8832
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
8833
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
8834
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
8835
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
8837
<a name="Group-Intersection-1"></a>
8838
<h3 class="subsection">5.7.8 Group Intersection</h3>
8840
<dl compact="compact">
8841
<dt> <b>Syntax:</b></dt>
8842
<dd><p>result = <<i>obj</i>|<i>group</i>> * <i>group</i>
8844
<p>result = <i>group</i> * <<i>obj</i>|<i>group</i>>
8847
<dt> <b>Details:</b></dt>
8848
<dd><p>A new set containing just those objects that are contained in both arguments. The
8849
objects are returned in the same sequence as they appear in the first argument.
8852
<dt> <b>Syntax Samples:</b></dt>
8853
<dd><table><tr><td> </td><td><pre class="example"><var>newgroup</var> = <var>obj1</var> * <i>grp</i>(<var>obj2</var>, <var>obj1</var>) -- = grp(obj1)
8854
<var>newgroup</var> = <i>grp</i>(<var>obj1</var>, <var>obj2</var>) * <i>grp</i>(<var>obj2</var>, <var>obj1</var>, <var>obj3</var>) -- = grp(obj1, obj2)
8855
</pre></td></tr></table>
8860
<a name="Group-Difference"></a>
8861
<table cellpadding="1" cellspacing="1" border="0">
8862
<tr><td valign="middle" align="left">[<a href="#Group-Intersection" title="Previous section in reading order"> < </a>]</td>
8863
<td valign="middle" align="left">[<a href="#Group-Shuffle" title="Next section in reading order"> > </a>]</td>
8864
<td valign="middle" align="left"> </td>
8865
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
8866
<td valign="middle" align="left">[<a href="#Group" title="Up section"> Up </a>]</td>
8867
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
8868
<td valign="middle" align="left"> </td>
8869
<td valign="middle" align="left"> </td>
8870
<td valign="middle" align="left"> </td>
8871
<td valign="middle" align="left"> </td>
8872
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
8873
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
8874
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
8875
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
8877
<a name="Group-Difference-1"></a>
8878
<h3 class="subsection">5.7.9 Group Difference</h3>
8880
<dl compact="compact">
8881
<dt> <b>Syntax:</b></dt>
8882
<dd><p>result = <<i>obj</i>|<i>group</i>> - <i>group</i>
8884
<p>result = <i>group</i> - <<i>obj</i>|<i>group</i>>
8887
<dt> <b>Details:</b></dt>
8888
<dd><p>A new set containing just those objects of the first argument, that are not
8889
contained in the second argument is returned. The sequence of the objects
8890
in the new group is the same as in the first argument.
8893
<dt> <b>Syntax Samples:</b></dt>
8894
<dd><table><tr><td> </td><td><pre class="example"><var>newgroup</var> = <var>obj1</var> - <i>grp</i>(<var>obj2</var>, <var>obj1</var>) -- = grp()
8895
<var>newgroup</var> = <i>grp</i>(<var>obj1</var>, <var>obj2</var>, <var>obj3</var>) - <i>grp</i>(<var>obj2</var>, <var>obj4</var>) -- = grp(obj1, obj3)
8896
</pre></td></tr></table>
8901
<a name="Group-Shuffle"></a>
8902
<table cellpadding="1" cellspacing="1" border="0">
8903
<tr><td valign="middle" align="left">[<a href="#Group-Difference" title="Previous section in reading order"> < </a>]</td>
8904
<td valign="middle" align="left">[<a href="#Group-Sorting" title="Next section in reading order"> > </a>]</td>
8905
<td valign="middle" align="left"> </td>
8906
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
8907
<td valign="middle" align="left">[<a href="#Group" title="Up section"> Up </a>]</td>
8908
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
8909
<td valign="middle" align="left"> </td>
8910
<td valign="middle" align="left"> </td>
8911
<td valign="middle" align="left"> </td>
8912
<td valign="middle" align="left"> </td>
8913
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
8914
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
8915
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
8916
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
8918
<a name="Group-Shuffle-1"></a>
8919
<h3 class="subsection">5.7.10 Group Shuffle</h3>
8921
<dl compact="compact">
8922
<dt> <b>Syntax:</b></dt>
8923
<dd><p>result = <i>group</i>:shuffle()
8926
<dt> <b>Details:</b></dt>
8927
<dd><p>Returns a new group with the same objects in another random sequence. Note that
8928
all invalid ‘<samp>NULL</samp>’ object references are removed in the resulting group by
8932
<dt> <b>Syntax Samples:</b></dt>
8933
<dd><table><tr><td> </td><td><pre class="example"><var>newgroup</var> = <i>grp</i>(<var>obj1</var>, <var>obj2</var>)
8934
</pre></td></tr></table>
8939
<a name="Group-Sorting"></a>
8940
<table cellpadding="1" cellspacing="1" border="0">
8941
<tr><td valign="middle" align="left">[<a href="#Group-Shuffle" title="Previous section in reading order"> < </a>]</td>
8942
<td valign="middle" align="left">[<a href="#Group-Subset" title="Next section in reading order"> > </a>]</td>
8943
<td valign="middle" align="left"> </td>
8944
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
8945
<td valign="middle" align="left">[<a href="#Group" title="Up section"> Up </a>]</td>
8946
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
8947
<td valign="middle" align="left"> </td>
8948
<td valign="middle" align="left"> </td>
8949
<td valign="middle" align="left"> </td>
8950
<td valign="middle" align="left"> </td>
8951
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
8952
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
8953
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
8954
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
8956
<a name="Group-Sorting-1"></a>
8957
<h3 class="subsection">5.7.11 Group Sorting</h3>
8959
<dl compact="compact">
8960
<dt> <b>Syntax:</b></dt>
8961
<dd><p>result = <i>group</i>:sort("circular")
8963
<p>result = <i>group</i>:sort("linear" <, <i>direction</i>>)
8965
<p>result = <i>group</i>:sort()
8968
<dt> <b>Details:</b></dt>
8969
<dd><p>Returns a new group with the same objects in another sorted sequence. Note that
8970
all invalid ‘<samp>NULL</samp>’ object reference are removed in the resulting group by
8973
<p>With a string argument <code>"circular"</code> the objects are arranged around their
8974
center by their angle. The distance from this center has no influence.
8976
<p>With a string argument <code>"linear"</code> the objects are arranged in a linear
8977
fashion. You either supply a <a href="#Position">Position</a> as sorting direction vector, or
8978
the first two objects of the group will define the sorting direction as default.
8980
<p>If no sorting argument is supplied the objects will be sorted by their name
8984
<dt> <b>Syntax Samples:</b></dt>
8985
<dd><table><tr><td> </td><td><pre class="example"><var>newgroup</var> = <i>grp</i>(<var>obj1</var>, <var>obj2</var>, <var>obj3</var>):sort("linear", po(2,1))
8986
<var>newgroup</var> = <i>grp</i>(<var>obj1</var>, <var>obj2</var>, <var>obj3</var>):sort("circular")
8987
<var>newgroup</var> = <i>grp</i>(<var>obj1</var>, <var>obj2</var>, <var>obj3</var>):sort()
8988
</pre></td></tr></table>
8993
<a name="Group-Subset"></a>
8994
<table cellpadding="1" cellspacing="1" border="0">
8995
<tr><td valign="middle" align="left">[<a href="#Group-Sorting" title="Previous section in reading order"> < </a>]</td>
8996
<td valign="middle" align="left">[<a href="#Group-Nearest-Object" title="Next section in reading order"> > </a>]</td>
8997
<td valign="middle" align="left"> </td>
8998
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
8999
<td valign="middle" align="left">[<a href="#Group" title="Up section"> Up </a>]</td>
9000
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
9001
<td valign="middle" align="left"> </td>
9002
<td valign="middle" align="left"> </td>
9003
<td valign="middle" align="left"> </td>
9004
<td valign="middle" align="left"> </td>
9005
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
9006
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
9007
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
9008
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
9010
<a name="Group-Subset-1"></a>
9011
<h3 class="subsection">5.7.12 Group Subset</h3>
9013
<dl compact="compact">
9014
<dt> <b>Syntax:</b></dt>
9015
<dd><p>result = <i>group</i>:sub(<i>number</i>)
9017
<p>result = <i>group</i>:sub(<i>start</i>, <i>end</i>)
9019
<p>result = <i>group</i>:sub(<i>start</i>, -<i>number</i>)
9022
<dt> <b>Details:</b></dt>
9023
<dd><p>Returns a new group with a subset of the contained objects. The sequence of
9024
objects in the new group is identical to the sequence in the originating group.
9025
Note that all invalid ‘<samp>NULL</samp>’ object reference are removed in the resulting
9026
group by this method call after determination of the sub set candidate objects.
9028
<p>With a number as argument you determine the number of requested objects. A
9029
positive number returns the amount of objects starting with the first object
9030
of the group. Whereas a negative number returns objects from the tail of the
9031
group. In this case the absolute value determines the number of selected objects
9032
counted backwards from the last one in sequence.
9034
<p>With two positive numbers as arguments you define the first and the last sequence
9035
index of the requested subset.
9037
<p>With two numbers, but the second one being negative, you define the first object
9038
and the with the absolute value of the second number you define the amount of
9039
objects you want in your subset.
9042
<dt> <b>Syntax Samples:</b></dt>
9043
<dd><table><tr><td> </td><td><pre class="example"><var>newgroup</var> = <i>grp</i>(<var>obj1</var>, <var>obj2</var>, <var>obj3</var>, <var>obj4</var>):sub(2) -- = grp(obj1, obj2)
9044
<var>newgroup</var> = <i>grp</i>(<var>obj1</var>, <var>obj2</var>, <var>obj3</var>, <var>obj4</var>):sub(-2) -- = grp(obj3, obj4)
9045
<var>newgroup</var> = <i>grp</i>(<var>obj1</var>, <var>obj2</var>, <var>obj3</var>, <var>obj4</var>):sub(2, 4) -- = grp(obj2, obj3, obj4)
9046
<var>newgroup</var> = <i>grp</i>(<var>obj1</var>, <var>obj2</var>, <var>obj3</var>, <var>obj4</var>):sub(2, -2) -- = grp(obj2, obj3)
9047
</pre></td></tr></table>
9052
<a name="Group-Nearest-Object"></a>
9053
<table cellpadding="1" cellspacing="1" border="0">
9054
<tr><td valign="middle" align="left">[<a href="#Group-Subset" title="Previous section in reading order"> < </a>]</td>
9055
<td valign="middle" align="left">[<a href="#NamedObjects" title="Next section in reading order"> > </a>]</td>
9056
<td valign="middle" align="left"> </td>
9057
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
9058
<td valign="middle" align="left">[<a href="#Group" title="Up section"> Up </a>]</td>
9059
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
9060
<td valign="middle" align="left"> </td>
9061
<td valign="middle" align="left"> </td>
9062
<td valign="middle" align="left"> </td>
9063
<td valign="middle" align="left"> </td>
9064
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
9065
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
9066
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
9067
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
9069
<a name="Group-Nearest-Object-1"></a>
9070
<h3 class="subsection">5.7.13 Group Nearest Object</h3>
9072
<dl compact="compact">
9073
<dt> <b>Syntax:</b></dt>
9074
<dd><p>result = <i>group</i>:nearest(<i>obj</i>)
9077
<dt> <b>Details:</b></dt>
9078
<dd><p>Returns the object contained in the group that is nearest to the given reference
9079
object. The distances are calculated exactly without rounding actor positions.
9080
In case two objects have the same distance from the reference object one is
9081
chosen by chance as the result.
9084
<dt> <b>Syntax Samples:</b></dt>
9085
<dd><table><tr><td> </td><td><pre class="example"><var>newobject</var> = <i>grp</i>(<var>obj1</var>, <var>obj2</var>, <var>obj3</var>):nearest(<var>obj4</var>)
9086
</pre></td></tr></table>
9093
<a name="NamedObjects"></a>
9094
<table cellpadding="1" cellspacing="1" border="0">
9095
<tr><td valign="middle" align="left">[<a href="#Group-Nearest-Object" title="Previous section in reading order"> < </a>]</td>
9096
<td valign="middle" align="left">[<a href="#NamedObjects-Repository-Request" title="Next section in reading order"> > </a>]</td>
9097
<td valign="middle" align="left"> </td>
9098
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
9099
<td valign="middle" align="left">[<a href="#Lua-API" title="Up section"> Up </a>]</td>
9100
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
9101
<td valign="middle" align="left"> </td>
9102
<td valign="middle" align="left"> </td>
9103
<td valign="middle" align="left"> </td>
9104
<td valign="middle" align="left"> </td>
9105
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
9106
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
9107
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
9108
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
9110
<a name="NamedObjects-1"></a>
9111
<h2 class="section">5.8 NamedObjects</h2>
9113
<p>The datatype NamedObjects is used by just one object, the singleton repository
9114
of named objects. Whenever you name an object, see section <a href="#Object-Naming">Object Naming</a>, this
9115
repository registers its name and allows you to retrieve the object lateron
9116
by providing its name.
9118
<p>Being a singleton you can not create new NamedObjects. The singleton is stored
9119
at the global variable ‘<samp>no</samp>’ on level load.
9121
<table class="menu" border="0" cellspacing="0">
9122
<tr><td align="left" valign="top"><a href="#NamedObjects-Repository-Request">5.8.1 NamedObjects Repository Request</a></td><td> </td><td align="left" valign="top"> Index Operator ‘<samp>[]</samp>’ read
9124
<tr><td align="left" valign="top"><a href="#NamedObjects-Object-Naming">5.8.2 NamedObjects Object Naming</a></td><td> </td><td align="left" valign="top"> Index Operator ‘<samp>[]</samp>’ write
9129
<a name="NamedObjects-Repository-Request"></a>
9130
<table cellpadding="1" cellspacing="1" border="0">
9131
<tr><td valign="middle" align="left">[<a href="#NamedObjects" title="Previous section in reading order"> < </a>]</td>
9132
<td valign="middle" align="left">[<a href="#NamedObjects-Object-Naming" title="Next section in reading order"> > </a>]</td>
9133
<td valign="middle" align="left"> </td>
9134
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
9135
<td valign="middle" align="left">[<a href="#NamedObjects" title="Up section"> Up </a>]</td>
9136
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
9137
<td valign="middle" align="left"> </td>
9138
<td valign="middle" align="left"> </td>
9139
<td valign="middle" align="left"> </td>
9140
<td valign="middle" align="left"> </td>
9141
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
9142
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
9143
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
9144
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
9146
<a name="NamedObjects-Repository-Request-1"></a>
9147
<h3 class="subsection">5.8.1 NamedObjects Repository Request</h3>
9149
<dl compact="compact">
9150
<dt> <b>Syntax:</b></dt>
9151
<dd><p>result = no["<i>name</i>"]
9154
<dt> <b>Details:</b></dt>
9155
<dd><p>Request of one or several objects from the repository. If no wildcard
9156
characters are used in the name an <a href="#Object">Object</a> value is returned. It is either
9157
the unique object with the given name, or an invalid ‘<samp>NULL</samp>’ object if no
9158
object exists with the given name.
9160
<p>If the requested name contains a wildcard character, either an asterisk ‘<samp>*</samp>’
9161
or a question mark ‘<samp>?</samp>’, a <a href="#Group">Group</a> containing all objects with matching
9162
names is returned. An asterisk matches zero, one or several arbitrary characters.
9163
A question mark matches a single arbitrary character. Both wildcard characters
9164
can be used anywhere in the string and in arbitrary multiplicity. Anyway the
9165
result is always returned as a <a href="#Group">Group</a>. The group may contain multiple
9166
objects, just a single object, or even no objects at all when no existing object
9167
matches your name pattern.
9170
<dt> <b>Syntax Samples:</b></dt>
9171
<dd><table><tr><td> </td><td><pre class="example"><var>obj</var> = <i>no</i>["<var>mydoor</var>"] -- exact name match
9172
<var>group</var> = <i>no</i>["<var>mydoors#*</var>"] -- any suffix
9173
<var>group</var> = <i>no</i>["<var>mydoor?</var>"] -- just one char suffix
9174
<var>group</var> = <i>no</i>["<var>mydoors?#*</var>"] -- matches e.g. "mydoorsA#123435", "mydoorsB#1213"
9175
</pre></td></tr></table>
9180
<a name="NamedObjects-Object-Naming"></a>
9181
<table cellpadding="1" cellspacing="1" border="0">
9182
<tr><td valign="middle" align="left">[<a href="#NamedObjects-Repository-Request" title="Previous section in reading order"> < </a>]</td>
9183
<td valign="middle" align="left">[<a href="#PositionList" title="Next section in reading order"> > </a>]</td>
9184
<td valign="middle" align="left"> </td>
9185
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
9186
<td valign="middle" align="left">[<a href="#NamedObjects" title="Up section"> Up </a>]</td>
9187
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
9188
<td valign="middle" align="left"> </td>
9189
<td valign="middle" align="left"> </td>
9190
<td valign="middle" align="left"> </td>
9191
<td valign="middle" align="left"> </td>
9192
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
9193
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
9194
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
9195
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
9197
<a name="NamedObjects-Object-Naming-1"></a>
9198
<h3 class="subsection">5.8.2 NamedObjects Object Naming</h3>
9200
<dl compact="compact">
9201
<dt> <b>Syntax:</b></dt>
9202
<dd><p>no["<i>name</i>"] = <i>obj</i>
9205
<dt> <b>Details:</b></dt>
9206
<dd><p>Index write accesses to the singleton allows you to name or rename objects. Note
9207
that you can name or rename objects by <a href="#Object">Object</a> attribute writes, too.
9208
The object’s name is stored as attribute <code>"name"</code>. Both ways of naming
9209
an object are totally equivalent.
9212
<dt> <b>Syntax Samples:</b></dt>
9213
<dd><table><tr><td> </td><td><pre class="example"><i>no</i>["<var>myobject</var>"] = <var>obj</var>
9214
</pre></td></tr></table>
9221
<a name="PositionList"></a>
9222
<table cellpadding="1" cellspacing="1" border="0">
9223
<tr><td valign="middle" align="left">[<a href="#NamedObjects-Object-Naming" title="Previous section in reading order"> < </a>]</td>
9224
<td valign="middle" align="left">[<a href="#PositionList-Comparison" title="Next section in reading order"> > </a>]</td>
9225
<td valign="middle" align="left"> </td>
9226
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
9227
<td valign="middle" align="left">[<a href="#Lua-API" title="Up section"> Up </a>]</td>
9228
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
9229
<td valign="middle" align="left"> </td>
9230
<td valign="middle" align="left"> </td>
9231
<td valign="middle" align="left"> </td>
9232
<td valign="middle" align="left"> </td>
9233
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
9234
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
9235
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
9236
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
9238
<a name="PositionList-1"></a>
9239
<h2 class="section">5.9 PositionList</h2>
9241
<p>A PositionList is a sorted set, known as list, of <a href="#Position">Position</a>s. Like a
9242
<a href="#Group">Group</a> this container is a constant datatype, that can not be modified. But
9243
you can easily compose new position lists by concatenation of existing lists and
9246
<p>An important difference to a group is the ability of a position list to store
9247
a position multiple times at different locations in its sequence. Thus a
9248
position list is suited to describe paths, even paths that are closed or
9251
<p>As <a href="#Position">Position</a>s are values that never become invalid, position lists once
9252
created will never change or get invalid. They are true values themselves. Thus
9253
they are the containers of choice for longterm storage.
9255
<p>You can easily create a position list by <a href="#PositionList-Conversion">PositionList Conversion</a>, which
9256
is featured by the <a href="#Positions-Repository">Positions Repository</a> singleton and allows you to
9257
transform a group into a position list by the simple expression
9258
‘<samp>po(group)</samp>’. On the other hand you can retrieve all <a href="#Object">Object</a>s of a
9259
basic kind located along a position list path by <a href="#Functions">Functions</a> like
9260
‘<samp>st(polist)</samp>’, ‘<samp>it(polist)</samp>’ and ‘<samp>fl(polist)</samp>’.
9262
<p>As a unique floor object is guaranteed to be on every grid position, you can
9263
convert a given list of unique grid positions to a group of floors without
9264
loosing any information. Now you can apply all group methods on the floors, like
9265
shuffling, sorting, subgrouping, etc.. Finally you can convert the resulting
9266
group back to a persistent position list. Of course the conversions preserve
9267
the sequence of members.
9269
<p>Some additional position specific operators are supplied to allow simple
9270
translations and stretchings of position lists.
9272
<p>Note that in contrast to a <a href="#Group">Group</a> this datatype can not directly be stored
9273
in an <a href="#Object">Object</a> attribute. But you can always store a <a href="#Group">Group</a> of floors
9274
in an attribute. In case floors can be destroyed you may need to name these
9275
floors as discussed in <a href="#Named-Positions">Named Positions</a>.
9277
<p>For task driven samples see section <a href="#Named-Positions-Tasks">Named Positions Tasks</a>.
9279
<table class="menu" border="0" cellspacing="0">
9280
<tr><td align="left" valign="top"><a href="#PositionList-Comparison">5.9.1 PositionList Comparison</a></td><td> </td><td align="left" valign="top"> Equality ‘<samp>==</samp>’ and Inequality ‘<samp>~=</samp>’
9282
<tr><td align="left" valign="top"><a href="#PositionList-Length">5.9.2 PositionList Length</a></td><td> </td><td align="left" valign="top"> Operator ‘<samp>#</samp>’
9284
<tr><td align="left" valign="top"><a href="#PositionList-Member-Access">5.9.3 PositionList Member Access</a></td><td> </td><td align="left" valign="top"> Index Operators ‘<samp>[]</samp>’
9286
<tr><td align="left" valign="top"><a href="#PositionList-Concatenation">5.9.4 PositionList Concatenation</a></td><td> </td><td align="left" valign="top"> Operator ‘<samp>..</samp>’
9288
<tr><td align="left" valign="top"><a href="#PositionList-Translation">5.9.5 PositionList Translation</a></td><td> </td><td align="left" valign="top"> Operators ‘<samp>+</samp>’ and ‘<samp>-</samp>’
9290
<tr><td align="left" valign="top"><a href="#PositionList-Stretching">5.9.6 PositionList Stretching</a></td><td> </td><td align="left" valign="top"> Operators ‘<samp>*</samp>’ and ‘<samp>/</samp>’
9295
<a name="PositionList-Comparison"></a>
9296
<table cellpadding="1" cellspacing="1" border="0">
9297
<tr><td valign="middle" align="left">[<a href="#PositionList" title="Previous section in reading order"> < </a>]</td>
9298
<td valign="middle" align="left">[<a href="#PositionList-Length" title="Next section in reading order"> > </a>]</td>
9299
<td valign="middle" align="left"> </td>
9300
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
9301
<td valign="middle" align="left">[<a href="#PositionList" title="Up section"> Up </a>]</td>
9302
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
9303
<td valign="middle" align="left"> </td>
9304
<td valign="middle" align="left"> </td>
9305
<td valign="middle" align="left"> </td>
9306
<td valign="middle" align="left"> </td>
9307
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
9308
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
9309
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
9310
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
9312
<a name="PositionList-Comparison-1"></a>
9313
<h3 class="subsection">5.9.1 PositionList Comparison</h3>
9315
<dl compact="compact">
9316
<dt> <b>Syntax:</b></dt>
9317
<dd><p>result = <i>polist1</i> <==|~=> <i>polist2</i>
9320
<dt> <b>Details:</b></dt>
9321
<dd><p>A comparison of two position lists. Two position lists are equal if both contain
9322
the same positions in the identical sequence. Otherwise they are unequal.
9325
<dt> <b>Syntax Samples:</b></dt>
9326
<dd><table><tr><td> </td><td><pre class="example"><var>bool</var> = (<i>po</i>(<var>2</var>,<var>3</var>).. <i>po</i>(<var>5</var>,<var>7</var>)) == (<i>po</i>(<var>2</var>,<var>3</var>) .. <i>po</i>(<var>5</var>,<var>7</var>)) -- = true
9327
<var>bool</var> = (<i>po</i>(<var>2</var>,<var>3</var>).. <i>po</i>(<var>5</var>,<var>7</var>)) == (<i>po</i>(<var>4</var>,<var>0</var>) .. <i>po</i>(<var>5</var>,<var>7</var>)) -- = false, different positions
9328
<var>bool</var> = (<i>po</i>(<var>2</var>,<var>3</var>).. <i>po</i>(<var>5</var>,<var>7</var>)) == (<i>po</i>(<var>5</var>,<var>7</var>) .. <i>po</i>(<var>2</var>,<var>3</var>)) -- = false, different sequence
9329
</pre></td></tr></table>
9334
<a name="PositionList-Length"></a>
9335
<table cellpadding="1" cellspacing="1" border="0">
9336
<tr><td valign="middle" align="left">[<a href="#PositionList-Comparison" title="Previous section in reading order"> < </a>]</td>
9337
<td valign="middle" align="left">[<a href="#PositionList-Member-Access" title="Next section in reading order"> > </a>]</td>
9338
<td valign="middle" align="left"> </td>
9339
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
9340
<td valign="middle" align="left">[<a href="#PositionList" title="Up section"> Up </a>]</td>
9341
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
9342
<td valign="middle" align="left"> </td>
9343
<td valign="middle" align="left"> </td>
9344
<td valign="middle" align="left"> </td>
9345
<td valign="middle" align="left"> </td>
9346
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
9347
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
9348
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
9349
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
9351
<a name="PositionList-Length-1"></a>
9352
<h3 class="subsection">5.9.2 PositionList Length</h3>
9354
<dl compact="compact">
9355
<dt> <b>Syntax:</b></dt>
9356
<dd><p>result = #<i>polist</i>
9359
<dt> <b>Details:</b></dt>
9360
<dd><p>Number of positions contained in the list.
9363
<dt> <b>Syntax Samples:</b></dt>
9364
<dd><table><tr><td> </td><td><pre class="example"><var>number</var> = #(<i>po</i>(<var>2</var>,<var>3</var>) .. <i>po</i>(<var>5</var>,<var>7</var>)) -- = 2
9365
for <var>i</var> = <var>1</var>, #<var>polist</var> do <var>pos</var> = <var>polist</var>[<var>i</var>] ... end
9366
</pre></td></tr></table>
9371
<a name="PositionList-Member-Access"></a>
9372
<table cellpadding="1" cellspacing="1" border="0">
9373
<tr><td valign="middle" align="left">[<a href="#PositionList-Length" title="Previous section in reading order"> < </a>]</td>
9374
<td valign="middle" align="left">[<a href="#PositionList-Concatenation" title="Next section in reading order"> > </a>]</td>
9375
<td valign="middle" align="left"> </td>
9376
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
9377
<td valign="middle" align="left">[<a href="#PositionList" title="Up section"> Up </a>]</td>
9378
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
9379
<td valign="middle" align="left"> </td>
9380
<td valign="middle" align="left"> </td>
9381
<td valign="middle" align="left"> </td>
9382
<td valign="middle" align="left"> </td>
9383
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
9384
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
9385
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
9386
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
9388
<a name="PositionList-Member-Access-1"></a>
9389
<h3 class="subsection">5.9.3 PositionList Member Access</h3>
9391
<dl compact="compact">
9392
<dt> <b>Syntax:</b></dt>
9393
<dd><p>result = <i>group</i>[<i>index</i>]
9396
<dt> <b>Details:</b></dt>
9397
<dd><p>An index like read access with an index number between 1 and #<i>polist</i> returns
9398
the position in the related position list position. Negative indices between
9399
-#<i>polist</i> and -1 give the same positions. Thus you can always access the last
9400
position at index -1. All other indices return a Lua ‘<samp>nil</samp>’ value like
9404
<dt> <b>Syntax Samples:</b></dt>
9405
<dd><table><tr><td> </td><td><pre class="example"><var>pos</var> = (<i>po</i>(<var>2</var>,<var>3</var>) .. <i>po</i>(<var>5</var>,<var>7</var>))[2] -- = po(5,7)
9406
<var>pos</var> = (<i>po</i>(<var>2</var>,<var>3</var>) .. <i>po</i>(<var>5</var>,<var>7</var>))[-1] -- = po(5,7)
9407
<var>pos</var> = (<i>po</i>(<var>2</var>,<var>3</var>) .. <i>po</i>(<var>5</var>,<var>7</var>))[0] -- = nil
9408
for <var>i</var> = <var>1</var>, #<var>polist</var> do <var>pos</var> = <var>polist</var>[<var>i</var>] ... end
9409
</pre></td></tr></table>
9414
<a name="PositionList-Concatenation"></a>
9415
<table cellpadding="1" cellspacing="1" border="0">
9416
<tr><td valign="middle" align="left">[<a href="#PositionList-Member-Access" title="Previous section in reading order"> < </a>]</td>
9417
<td valign="middle" align="left">[<a href="#PositionList-Translation" title="Next section in reading order"> > </a>]</td>
9418
<td valign="middle" align="left"> </td>
9419
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
9420
<td valign="middle" align="left">[<a href="#PositionList" title="Up section"> Up </a>]</td>
9421
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
9422
<td valign="middle" align="left"> </td>
9423
<td valign="middle" align="left"> </td>
9424
<td valign="middle" align="left"> </td>
9425
<td valign="middle" align="left"> </td>
9426
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
9427
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
9428
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
9429
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
9431
<a name="PositionList-Concatenation-1"></a>
9432
<h3 class="subsection">5.9.4 PositionList Concatenation</h3>
9434
<dl compact="compact">
9435
<dt> <b>Syntax:</b></dt>
9436
<dd><p>result = <i>polist1</i> .. <<i>pos</i> | <i>polist2</i>>
9438
<p>result = <<i>pos</i> | <i>polist1</i>> .. <i>polist2</i>
9441
<dt> <b>Details:</b></dt>
9442
<dd><p>Concatenates two position lists or a position with a position list to a
9443
new PositionList containing all positions in the given order. Note that this
9444
operation is associative, that means it does not matter if you use braces in
9445
multiple concatenations or not.
9448
<dt> <b>Syntax Samples:</b></dt>
9449
<dd><table><tr><td> </td><td><pre class="example"><var>newpolist</var> = <i>po</i>(<i>po</i>(<var>2</var>,<var>3</var>), <i>po</i>(<var>5</var>,<var>7</var>)) .. <i>po</i>(<var>4</var>, <var>4</var>) -- = (2,3),(5,7),(4,4)
9450
</pre></td></tr></table>
9453
<dt> <b>Caveats:</b></dt>
9454
<dd><p>Note that due to the value nature of position lists the concatenation creates
9455
a new value. This is an expensive operation. When you are collecting potentially
9456
large number of positions in a loop, you should not concat each new candidate
9457
to an existing position list. Avoid the creation of numerous position list
9458
values and collect the positions in a standard Lua table. Convert this table
9459
at the end to a position list (See section <a href="#PositionList-Conversion">PositionList Conversion</a>).
9461
<table><tr><td> </td><td><pre class="example"><var>result</var> = {}
9462
for <var>x</var> = 1, 200 do
9463
table.insert(<var>result</var>, <i>po</i>(<var>x</var>, 17))
9465
return <i>po</i>(<var>result</var>)
9466
</pre></td></tr></table>
9472
<a name="PositionList-Translation"></a>
9473
<table cellpadding="1" cellspacing="1" border="0">
9474
<tr><td valign="middle" align="left">[<a href="#PositionList-Concatenation" title="Previous section in reading order"> < </a>]</td>
9475
<td valign="middle" align="left">[<a href="#PositionList-Stretching" title="Next section in reading order"> > </a>]</td>
9476
<td valign="middle" align="left"> </td>
9477
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
9478
<td valign="middle" align="left">[<a href="#PositionList" title="Up section"> Up </a>]</td>
9479
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
9480
<td valign="middle" align="left"> </td>
9481
<td valign="middle" align="left"> </td>
9482
<td valign="middle" align="left"> </td>
9483
<td valign="middle" align="left"> </td>
9484
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
9485
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
9486
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
9487
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
9489
<a name="PositionList-Translation-1"></a>
9490
<h3 class="subsection">5.9.5 PositionList Translation</h3>
9492
<dl compact="compact">
9493
<dt> <b>Syntax:</b></dt>
9494
<dd><p>result = <i>polist</i> <<b>+</b>|<b>-</b>> <<i>pos</i> | <i>obj</i> | <i>cpos</i>>
9496
<p>result = <<i>pos</i> | <i>obj</i> | <i>cpos</i>> <<b>+</b>|<b>-</b>> <i>polist</i>
9499
<dt> <b>Details:</b></dt>
9500
<dd><p>If a position or data convertible to a position is added to or subtracted from
9501
a position list a new list is created with the positions representing the sum or
9502
difference of the position with every member of the position list. In total the
9503
position list is shifted by the position as a vector.
9506
<dt> <b>Syntax Samples:</b></dt>
9507
<dd><table><tr><td> </td><td><pre class="example"><var>newpolist</var> = <i>po</i>(<var>2</var>, <var>3</var>) + <var>NEIGHBORS_4</var> -- po(1, 3) .. po(2, 4) .. po(3, 3) .. po(2, 2)
9508
<var>newpolist</var> = <i>po</i>["<var>myfloor</var>#*"] - <i>po</i>(<var>3</var>, <var>0</var>)
9509
</pre></td></tr></table>
9514
<a name="PositionList-Stretching"></a>
9515
<table cellpadding="1" cellspacing="1" border="0">
9516
<tr><td valign="middle" align="left">[<a href="#PositionList-Translation" title="Previous section in reading order"> < </a>]</td>
9517
<td valign="middle" align="left">[<a href="#Positions-Repository" title="Next section in reading order"> > </a>]</td>
9518
<td valign="middle" align="left"> </td>
9519
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
9520
<td valign="middle" align="left">[<a href="#PositionList" title="Up section"> Up </a>]</td>
9521
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
9522
<td valign="middle" align="left"> </td>
9523
<td valign="middle" align="left"> </td>
9524
<td valign="middle" align="left"> </td>
9525
<td valign="middle" align="left"> </td>
9526
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
9527
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
9528
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
9529
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
9531
<a name="PositionList-Stretching-1"></a>
9532
<h3 class="subsection">5.9.6 PositionList Stretching</h3>
9534
<dl compact="compact">
9535
<dt> <b>Syntax:</b></dt>
9536
<dd><p>result = <i>polist</i> <b>*</b> <i>number</i>
9538
<p>result = <i>number</i> <b>*</b> <i>polist</i>
9541
<dt> <b>Details:</b></dt>
9542
<dd><p>A scalar multiplication or division of all positions in a position list. All
9543
position values are multiplicated or divided by the given number in both
9544
coordinate values. In total the position list is stretched by a scalar factor.
9547
<dt> <b>Syntax Samples:</b></dt>
9548
<dd><table><tr><td> </td><td><pre class="example"><var>newpolist</var> = <var>2</var> * <var>NEIGHBORS_4</var> -- = po(9, 12)
9549
<var>newpolist</var> = (<i>po</i>(<var>2</var>,<var>4</var>) .. <i>po</i>(<var>6</var>,<var>7</var>)) * <var>1/2</var> -- = (1, 2), (3, 3.5)
9550
</pre></td></tr></table>
9557
<a name="Positions-Repository"></a>
9558
<table cellpadding="1" cellspacing="1" border="0">
9559
<tr><td valign="middle" align="left">[<a href="#PositionList-Stretching" title="Previous section in reading order"> < </a>]</td>
9560
<td valign="middle" align="left">[<a href="#Positions-Repository-Request" title="Next section in reading order"> > </a>]</td>
9561
<td valign="middle" align="left"> </td>
9562
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
9563
<td valign="middle" align="left">[<a href="#Lua-API" title="Up section"> Up </a>]</td>
9564
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
9565
<td valign="middle" align="left"> </td>
9566
<td valign="middle" align="left"> </td>
9567
<td valign="middle" align="left"> </td>
9568
<td valign="middle" align="left"> </td>
9569
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
9570
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
9571
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
9572
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
9574
<a name="Positions-Repository-1"></a>
9575
<h2 class="section">5.10 Positions Repository</h2>
9577
<p>The Positions datatype is just used by a single instance, the singleton
9578
repository of named positions. Besides the management of named positions it
9579
provides useful conversions of other datatypes to position based types.
9581
<p>Being a singleton you can not create a new Positions Repository. The singleton
9582
that is available on level load is stored at the global variable ‘<samp>po</samp>’.
9584
<p>The position repository is an extension of the <a href="#NamedObjects">NamedObjects</a> repository.
9585
Whenever you name an object, See section <a href="#Object-Naming">Object Naming</a>, this repository registers
9586
its name and allows you to retrieve lateron the current object’s position by
9587
providing its name. But even when a floor object gets killed, its position
9588
entry remains stored as <a href="#Named-Positions">Named Positions</a>. Of course you can name positions
9589
yourself, but positions of existing named objects will always override plane
9590
named positions on name clashes.
9592
<p>For task driven samples see section <a href="#Named-Positions-Tasks">Named Positions Tasks</a>.
9594
<table class="menu" border="0" cellspacing="0">
9595
<tr><td align="left" valign="top"><a href="#Positions-Repository-Request">5.10.1 Positions Repository Request</a></td><td> </td><td align="left" valign="top"> Index Operator ‘<samp>[]</samp>’ read
9597
<tr><td align="left" valign="top"><a href="#Positions-Repository-Storage">5.10.2 Positions Repository Storage</a></td><td> </td><td align="left" valign="top"> Index Operator ‘<samp>[]</samp>’ write
9599
<tr><td align="left" valign="top"><a href="#Position-Conversion">5.10.3 Position Conversion</a></td><td> </td><td align="left" valign="top"> Function ‘<samp>po()</samp>’
9601
<tr><td align="left" valign="top"><a href="#PositionList-Conversion">5.10.4 PositionList Conversion</a></td><td> </td><td align="left" valign="top"> Function ‘<samp>po()</samp>’
9606
<a name="Positions-Repository-Request"></a>
9607
<table cellpadding="1" cellspacing="1" border="0">
9608
<tr><td valign="middle" align="left">[<a href="#Positions-Repository" title="Previous section in reading order"> < </a>]</td>
9609
<td valign="middle" align="left">[<a href="#Positions-Repository-Storage" title="Next section in reading order"> > </a>]</td>
9610
<td valign="middle" align="left"> </td>
9611
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
9612
<td valign="middle" align="left">[<a href="#Positions-Repository" title="Up section"> Up </a>]</td>
9613
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
9614
<td valign="middle" align="left"> </td>
9615
<td valign="middle" align="left"> </td>
9616
<td valign="middle" align="left"> </td>
9617
<td valign="middle" align="left"> </td>
9618
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
9619
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
9620
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
9621
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
9623
<a name="Positions-Repository-Request-1"></a>
9624
<h3 class="subsection">5.10.1 Positions Repository Request</h3>
9626
<dl compact="compact">
9627
<dt> <b>Syntax:</b></dt>
9628
<dd><p>result = po["<i>name</i>"]
9631
<dt> <b>Details:</b></dt>
9632
<dd><p>Request of one or several positions from the repository. If no wildcard
9633
characters are used in the name the <a href="#Position">Position</a> value of the unique object
9634
with the given name, if existent, is returned. It no object exists with the
9635
name, the last position stored with the same name is returned. If no position
9636
exists the value ‘<samp>nil</samp>’ is returned.
9638
<p>If the requested name contains a wildcard character, either an asterisk ‘<samp>*</samp>’
9639
or a question mark ‘<samp>?</samp>’, a <a href="#PositionList">PositionList</a> containing all positions with
9640
matching names is returned. An asterisk matches zero, one or several arbitrary
9641
characters. A question mark matches a single arbitrary character. Both wildcard
9642
characters can be used anywhere in the string and in arbitrary multiplicity.
9643
Anyway the result is always returned as a <a href="#PositionList">PositionList</a>. The list may
9644
contain multiple positions, just a single position, or even no position at all
9645
when no existing position matches your name pattern.
9648
<dt> <b>Syntax Samples:</b></dt>
9649
<dd><table><tr><td> </td><td><pre class="example"><var>pos</var> = <i>po</i>["<var>mydoor</var>"] -- exact name match
9650
<var>polist</var> = <i>po</i>["<var>mydoors#*</var>"] -- any suffix
9651
<var>polist</var> = <i>po</i>["<var>mydoor?</var>"] -- just one char suffix
9652
<var>polist</var> = <i>po</i>["<var>mydoors?#*</var>"] -- matches e.g. "mydoorsA#123435", "mydoorsB#1213"
9653
</pre></td></tr></table>
9658
<a name="Positions-Repository-Storage"></a>
9659
<table cellpadding="1" cellspacing="1" border="0">
9660
<tr><td valign="middle" align="left">[<a href="#Positions-Repository-Request" title="Previous section in reading order"> < </a>]</td>
9661
<td valign="middle" align="left">[<a href="#Position-Conversion" title="Next section in reading order"> > </a>]</td>
9662
<td valign="middle" align="left"> </td>
9663
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
9664
<td valign="middle" align="left">[<a href="#Positions-Repository" title="Up section"> Up </a>]</td>
9665
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
9666
<td valign="middle" align="left"> </td>
9667
<td valign="middle" align="left"> </td>
9668
<td valign="middle" align="left"> </td>
9669
<td valign="middle" align="left"> </td>
9670
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
9671
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
9672
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
9673
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
9675
<a name="Positions-Repository-Storage-1"></a>
9676
<h3 class="subsection">5.10.2 Positions Repository Storage</h3>
9678
<dl compact="compact">
9679
<dt> <b>Syntax:</b></dt>
9680
<dd><p>po["<i>name</i>"] = <i>obj</i>
9683
<dt> <b>Details:</b></dt>
9684
<dd><p>Index write accesses to the singleton allows you to name or rename positions.
9685
Note that can not assign a new position to a name that currently references
9686
an existing <a href="#Object">Object</a>. Such write access are silently ignored.
9689
<dt> <b>Syntax Samples:</b></dt>
9690
<dd><table><tr><td> </td><td><pre class="example"><i>po</i>["<var>mypos</var>"] = <var>pos</var>
9691
</pre></td></tr></table>
9696
<a name="Position-Conversion"></a>
9697
<table cellpadding="1" cellspacing="1" border="0">
9698
<tr><td valign="middle" align="left">[<a href="#Positions-Repository-Storage" title="Previous section in reading order"> < </a>]</td>
9699
<td valign="middle" align="left">[<a href="#PositionList-Conversion" title="Next section in reading order"> > </a>]</td>
9700
<td valign="middle" align="left"> </td>
9701
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
9702
<td valign="middle" align="left">[<a href="#Positions-Repository" title="Up section"> Up </a>]</td>
9703
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
9704
<td valign="middle" align="left"> </td>
9705
<td valign="middle" align="left"> </td>
9706
<td valign="middle" align="left"> </td>
9707
<td valign="middle" align="left"> </td>
9708
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
9709
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
9710
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
9711
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
9713
<a name="Position-Conversion-1"></a>
9714
<h3 class="subsection">5.10.3 Position Conversion</h3>
9716
<dl compact="compact">
9717
<dt> <b>Syntax:</b></dt>
9718
<dd><p>result = po(<<i>obj</i> | <i>pos</i> | {<var>x</var>, <var>y</var>} | <var>x</var>, <var>y</var> >)
9721
<dt> <b>Details:</b></dt>
9722
<dd><p>Converts its argument to a new position value.
9725
<dt> <b>Syntax Samples:</b></dt>
9726
<dd><table><tr><td> </td><td><pre class="example"><var>pos</var> = <i>po</i>(<var>pos2</var>)
9727
<var>pos</var> = <i>po</i>(<var>obj</var>)
9728
<var>pos</var> = <i>po</i>({<var>2</var>, <var>4</var>})
9729
<var>pos</var> = <i>po</i>(<var>3</var>, <var>7</var>)
9730
</pre></td></tr></table>
9735
<a name="PositionList-Conversion"></a>
9736
<table cellpadding="1" cellspacing="1" border="0">
9737
<tr><td valign="middle" align="left">[<a href="#Position-Conversion" title="Previous section in reading order"> < </a>]</td>
9738
<td valign="middle" align="left">[<a href="#Tile-and-Object-Declaration" title="Next section in reading order"> > </a>]</td>
9739
<td valign="middle" align="left"> </td>
9740
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
9741
<td valign="middle" align="left">[<a href="#Positions-Repository" title="Up section"> Up </a>]</td>
9742
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
9743
<td valign="middle" align="left"> </td>
9744
<td valign="middle" align="left"> </td>
9745
<td valign="middle" align="left"> </td>
9746
<td valign="middle" align="left"> </td>
9747
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
9748
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
9749
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
9750
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
9752
<a name="PositionList-Conversion-1"></a>
9753
<h3 class="subsection">5.10.4 PositionList Conversion</h3>
9755
<dl compact="compact">
9756
<dt> <b>Syntax:</b></dt>
9757
<dd><p>result = po(<i>group</i> | {<i>pos1</i>, <i>pos2</i>, <i>pos3</i>})
9760
<dt> <b>Details:</b></dt>
9761
<dd><p>Converts the given group or table of positions to a new <a href="#PositionList">PositionList</a>
9762
value, that contains the positions of all valid group <a href="#Object">Object</a>s or table
9763
members in the same sequence.
9766
<dt> <b>Syntax Samples:</b></dt>
9767
<dd><table><tr><td> </td><td><pre class="example"><var>polist</var> = <i>po</i>(<var>group</var>)
9768
<var>polist</var> = <i>po</i>({<i>po</i>(<var>3</var>, <var>7</var>), <i>po</i>(<var>2</var>, <var>6</var>)})
9769
<var>polist</var> = <i>po</i>({}) -- an empty position list
9770
</pre></td></tr></table>
9776
<a name="Tile-and-Object-Declaration"></a>
9777
<table cellpadding="1" cellspacing="1" border="0">
9778
<tr><td valign="middle" align="left">[<a href="#PositionList-Conversion" title="Previous section in reading order"> < </a>]</td>
9779
<td valign="middle" align="left">[<a href="#Tile-concat" title="Next section in reading order"> > </a>]</td>
9780
<td valign="middle" align="left"> </td>
9781
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
9782
<td valign="middle" align="left">[<a href="#Lua-API" title="Up section"> Up </a>]</td>
9783
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
9784
<td valign="middle" align="left"> </td>
9785
<td valign="middle" align="left"> </td>
9786
<td valign="middle" align="left"> </td>
9787
<td valign="middle" align="left"> </td>
9788
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
9789
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
9790
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
9791
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
9793
<a name="Tile-and-Object-Declaration-1"></a>
9794
<h2 class="section">5.11 Tile and Object Declaration</h2>
9796
<p>A tile is the description of one or several objects that should be positioned
9797
on the same grid position. A single object can be set up by a straight
9798
object declaration, an anonymous Lua table with entries for the object kind
9799
and all attributes. The object declaration comes in three minor variations:
9801
<table><tr><td> </td><td><pre class="example">{"<b>st_chess</b>", <b>name</b>="<var>jumper</var>", <b>color</b>=<var>WHITE</var>}
9802
{"<b>st_chess_white</b>", "<var>jumper</var>", <var>_myattr</var>=<var>5</var>}
9803
{"<b>ac_marble</b>", 0.2, 0.6, <b>name</b>="<var>blacky</var>"}
9804
</pre></td></tr></table>
9806
<p>The first entry, the one stored at table position ‘<samp>1</samp>’, has always to be
9807
the kind name of a supported Enigma object. In the first example all other
9808
table entries are key value pairs with the key being the attribute name. The
9809
second example uses the shortcut of specifying the name attribute value as
9810
second table entry, that will be stored at table position ‘<samp>2</samp>’. It has to
9811
be a string value. The third variation, that is useful for actor declarations,
9812
stores the grid offsets in x and y directions in the table positions ‘<samp>2</samp>’ and
9813
‘<samp>3</samp>’. Of course you can not use the name attribute shortcut in the same
9816
<p>These table driven object declarations are always sufficient if you just want to
9817
set a single object at once. But tiles do often take an item or a stone besides
9818
a floor. So we need an Enigma data type being able to handle these multiple
9819
declarations. This is the ‘<samp>tile</samp>’ data type. It can take just one object
9820
declaration or an arbitrary list of declarations. You convert a table object
9821
declaration into a tile by the <a href="#Tiles-Repository">Tiles Repository</a> handle. Once you have a
9822
tile you can concat other tiles or table object declarations to set up new
9825
<p>Enigma guarantees that the objects will be set to the world in the sequence
9826
of declarations in the tile.
9828
<a name="index-fl_005fnil"></a>
9829
<a name="index-it_005fnil"></a>
9830
<a name="index-st_005fnil"></a>
9831
<a name="index-nil"></a>
9832
<p>Even though in most cases you use object declarations and tiles to set objects
9833
you may need in some advanced usage cases to supply such a datatype in
9834
situations where you want to add nothing at all or even want to kill a
9835
possibly existing object. In these cases you can supply one of the pseudo object
9836
kind names <code>"fl_nil"</code>, <code>"it_nil"</code>, <code>"st_nil"</code> or <code>"nil"</code>.
9837
While the first three pseudo kinds will kill existing objects on the given
9838
layer, the last pseudo kind will just do nothing. It is equivalent, but more
9839
expressive than an empty Lua table being used as an object declaration:
9841
<table><tr><td> </td><td><pre class="example"><i>ti</i>["<var>D</var>"] = <i>cond</i>(<i>wo</i>["<b>IsDifficult"</b>], {"<b>st_death</b>"}, {"<b>nil</b>"})
9842
<i>ti</i>["<var>S</var>"] = {"<b>st_surprise</b>", <b>selection</b>={"<b>st_box</b>", "<b>st_nil</b>"}}
9843
function <var>customresolver</var>(<var>key</var>, <var>x</var>, <var>y</var>)
9844
if <var>key</var> == "<var>a</var>" then
9845
return {"<b>nil</b>"}
9846
elseif <var>key</var> == "<var>b</var>" then
9849
return <i>ti</i>[<var>key</var>]
9852
</pre></td></tr></table>
9854
<p>The first sample uses the pseudo to supply a valid third arguement to the
9855
<a href="#cond">cond</a> function that causes no syntax error when being passed to the
9858
<p>The second sample uses the pseudo to kill the <a href="#st_005fsurprise">st_surprise</a> even when
9859
no substitution stone is being set.
9861
<p>The last example of a <a href="#Custom-Resolver">Custom Resolver</a> provides a solution for avoiding
9862
the change of the world on a given key in the world map. Usually you will always
9863
set at least a floor object. But if you draw a map during runtime there is no
9864
longer the need of setting inital floors. In cases where this can not be handled
9865
by proper usage of default keys the pseudo kind <code>"nil"</code> is your friend.
9867
<p>For task driven samples see section <a href="#Tiles-and-World-Tasks">Tiles and World Tasks</a>.
9869
<table class="menu" border="0" cellspacing="0">
9870
<tr><td align="left" valign="top"><a href="#Tile-concat">5.11.1 Tile concat</a></td><td> </td><td align="left" valign="top"> Compose a new tile as concatenation of two other
9876
<a name="Tile-concat"></a>
9877
<table cellpadding="1" cellspacing="1" border="0">
9878
<tr><td valign="middle" align="left">[<a href="#Tile-and-Object-Declaration" title="Previous section in reading order"> < </a>]</td>
9879
<td valign="middle" align="left">[<a href="#Tiles-Repository" title="Next section in reading order"> > </a>]</td>
9880
<td valign="middle" align="left"> </td>
9881
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
9882
<td valign="middle" align="left">[<a href="#Tile-and-Object-Declaration" title="Up section"> Up </a>]</td>
9883
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
9884
<td valign="middle" align="left"> </td>
9885
<td valign="middle" align="left"> </td>
9886
<td valign="middle" align="left"> </td>
9887
<td valign="middle" align="left"> </td>
9888
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
9889
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
9890
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
9891
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
9893
<a name="Tile-concat-1"></a>
9894
<h3 class="subsection">5.11.1 Tile concat</h3>
9896
<dl compact="compact">
9897
<dt> <b>Syntax:</b></dt>
9898
<dd><p>result = <i>tile</i> .. <<i>tile</i> | <i>odecl</i>>
9900
<p>result = <<i>tile</i> | <i>odecl</i>> .. <i>tile</i>
9903
<dt> <b>Details:</b></dt>
9904
<dd><p>Compose a new tile by concatenation of a tile with another tile or a table
9905
object declaration. In a concatenated chain of tiles and object declarations
9906
one of the first two evaluated arguments needs to be a tile as two Lua tables
9907
do not know how to concat.
9909
<p>Note that Lua does evaluate the ‘<samp>..</samp>’ operator from right to left! Thus you
9910
need either use proper braces or you need to guarantee that at least one of the
9911
two rightmost tokens is a tile.
9914
<dt> <b>Syntax Samples:</b></dt>
9915
<dd><table><tr><td> </td><td><pre class="example"><var>newtile</var> = <i>ti</i>{"<b>st_chess</b>"} .. {"<b>fl_sahara</b>"}
9916
<var>newtile</var> = <i>ti</i>{"<b>st_chess</b>"} .. {"<b>fl_sahara</b>"} .. {"<b>it_cherry</b>"} -- Lua error due to right to left evaluation
9917
<var>newtile</var> = (<i>ti</i>{"<b>st_chess</b>"} .. {"<b>fl_sahara</b>"}) .. {"<b>it_cherry</b>"} -- evaluation order fixed
9918
<var>newtile</var> = <i>ti</i>{"<b>st_chess</b>"} .. {"<b>fl_sahara</b>"} .. <i>ti</i>{"<b>it_cherry</b>"} -- converted one of the two critical declarations
9919
</pre></td></tr></table>
9927
<a name="Tiles-Repository"></a>
9928
<table cellpadding="1" cellspacing="1" border="0">
9929
<tr><td valign="middle" align="left">[<a href="#Tile-concat" title="Previous section in reading order"> < </a>]</td>
9930
<td valign="middle" align="left">[<a href="#Tiles-Storage" title="Next section in reading order"> > </a>]</td>
9931
<td valign="middle" align="left"> </td>
9932
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
9933
<td valign="middle" align="left">[<a href="#Lua-API" title="Up section"> Up </a>]</td>
9934
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
9935
<td valign="middle" align="left"> </td>
9936
<td valign="middle" align="left"> </td>
9937
<td valign="middle" align="left"> </td>
9938
<td valign="middle" align="left"> </td>
9939
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
9940
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
9941
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
9942
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
9944
<a name="Tiles-Repository-1"></a>
9945
<h2 class="section">5.12 Tiles Repository</h2>
9947
<p>The Tiles datatype is just used by a single instance, the singleton repository of
9948
<a href="#Tile-and-Object-Declaration">Tile and Object Declaration</a>s. Besides the management of tiles it provides
9949
useful conversions of table based object declarations to tiles.
9951
<p>Being a singleton you can not create a new Tiles repository. The singleton is
9952
stored at the global variable ‘<samp>ti</samp>’ on level load.
9954
<p>The repository stores tiles for given string keys. The key strings can be
9955
of any length. Due to Lua limitations they need to be composed of printable
9956
7-bit ASCII characters.
9958
<p>You can assign a tile to every key just once. A reassign causes an error. On
9959
one hand this allows internal implementation optimization, but on the other hand
9960
an unforeseen key reassignment is the most common level coding error that
9961
needs to be reported.
9963
<p>For task driven samples see section <a href="#Tiles-and-World-Tasks">Tiles and World Tasks</a>.
9965
<table class="menu" border="0" cellspacing="0">
9966
<tr><td align="left" valign="top"><a href="#Tiles-Storage">5.12.1 Tiles Storage</a></td><td> </td><td align="left" valign="top"> Store a tile for a key
9968
<tr><td align="left" valign="top"><a href="#Tiles-Request">5.12.2 Tiles Request</a></td><td> </td><td align="left" valign="top"> Retrieve a tile for a key
9970
<tr><td align="left" valign="top"><a href="#Tile-Conversion">5.12.3 Tile Conversion</a></td><td> </td><td align="left" valign="top"> Convert an object declaration into a tile
9976
<a name="Tiles-Storage"></a>
9977
<table cellpadding="1" cellspacing="1" border="0">
9978
<tr><td valign="middle" align="left">[<a href="#Tiles-Repository" title="Previous section in reading order"> < </a>]</td>
9979
<td valign="middle" align="left">[<a href="#Tiles-Request" title="Next section in reading order"> > </a>]</td>
9980
<td valign="middle" align="left"> </td>
9981
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
9982
<td valign="middle" align="left">[<a href="#Tiles-Repository" title="Up section"> Up </a>]</td>
9983
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
9984
<td valign="middle" align="left"> </td>
9985
<td valign="middle" align="left"> </td>
9986
<td valign="middle" align="left"> </td>
9987
<td valign="middle" align="left"> </td>
9988
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
9989
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
9990
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
9991
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
9993
<a name="Tiles-Storage-1"></a>
9994
<h3 class="subsection">5.12.1 Tiles Storage</h3>
9996
<dl compact="compact">
9997
<dt> <b>Syntax:</b></dt>
9998
<dd><p>ti["<i>key</i>"] = <<i>tile</i>|<i>odecl</i>>
10001
<dt> <b>Details:</b></dt>
10002
<dd><p>Index write accesses to the singleton allows you to assign a tile or an table
10003
based object declaration, that is autoconverted to a tile, to a given key. The
10004
key must be a unique string. Unique in the sense that you can not reassign a
10005
new tile to key to which previously another tile has been assigned.
10008
<dt> <b>Syntax Samples:</b></dt>
10009
<dd><table><tr><td> </td><td><pre class="example"><i>ti</i>["<var>#</var>"] = <var>tile</var>
10010
<i>ti</i>["<var>$</var>"] = {"<b>st_chess</b>"}
10011
<i>ti</i>["<var>$</var>"] = {"<b>st_switch</b>"} -- error of key reassignment
10012
<i>ti</i>["<var>anykey</var>"] = {"<b>st_chess</b>"}
10013
</pre></td></tr></table>
10020
<a name="Tiles-Request"></a>
10021
<table cellpadding="1" cellspacing="1" border="0">
10022
<tr><td valign="middle" align="left">[<a href="#Tiles-Storage" title="Previous section in reading order"> < </a>]</td>
10023
<td valign="middle" align="left">[<a href="#Tile-Conversion" title="Next section in reading order"> > </a>]</td>
10024
<td valign="middle" align="left"> </td>
10025
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
10026
<td valign="middle" align="left">[<a href="#Tiles-Repository" title="Up section"> Up </a>]</td>
10027
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
10028
<td valign="middle" align="left"> </td>
10029
<td valign="middle" align="left"> </td>
10030
<td valign="middle" align="left"> </td>
10031
<td valign="middle" align="left"> </td>
10032
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
10033
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
10034
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
10035
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
10037
<a name="Tiles-Request-1"></a>
10038
<h3 class="subsection">5.12.2 Tiles Request</h3>
10040
<dl compact="compact">
10041
<dt> <b>Syntax:</b></dt>
10042
<dd><p>result = ti["<i>key</i>"]
10045
<dt> <b>Details:</b></dt>
10046
<dd><p>Request of the tile that has been assigned to the given key. If no tile has yet
10047
been stored for the key a Lua ‘<samp>nil</samp>’ value is returned. Note that this
10048
tiles repository does not use wildcard characters as the named objects and
10049
positions repositories do. The asterisk ‘<samp>*</samp>’ and question mark ‘<samp>?</samp>’ are
10050
just keys as any other characters.
10053
<dt> <b>Syntax Samples:</b></dt>
10054
<dd><table><tr><td> </td><td><pre class="example"><var>tile</var> = <i>ti</i>["<var>#</var>"]
10055
</pre></td></tr></table>
10061
<a name="Tile-Conversion"></a>
10062
<table cellpadding="1" cellspacing="1" border="0">
10063
<tr><td valign="middle" align="left">[<a href="#Tiles-Request" title="Previous section in reading order"> < </a>]</td>
10064
<td valign="middle" align="left">[<a href="#World" title="Next section in reading order"> > </a>]</td>
10065
<td valign="middle" align="left"> </td>
10066
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
10067
<td valign="middle" align="left">[<a href="#Tiles-Repository" title="Up section"> Up </a>]</td>
10068
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
10069
<td valign="middle" align="left"> </td>
10070
<td valign="middle" align="left"> </td>
10071
<td valign="middle" align="left"> </td>
10072
<td valign="middle" align="left"> </td>
10073
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
10074
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
10075
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
10076
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
10078
<a name="Tile-Conversion-1"></a>
10079
<h3 class="subsection">5.12.3 Tile Conversion</h3>
10081
<dl compact="compact">
10082
<dt> <b>Syntax:</b></dt>
10083
<dd><p>result = ti(<i>odecl</i>)
10086
<dt> <b>Details:</b></dt>
10087
<dd><p>Converts a table based object declaration to a new tile value.
10090
<dt> <b>Syntax Samples:</b></dt>
10091
<dd><table><tr><td> </td><td><pre class="example"><var>tile</var> = <i>ti</i>({"<b>st_chess</b>"})
10092
<var>tile</var> = <i>ti</i>{"<b>st_chess</b>"} -- Lua syntax equivalence
10093
</pre></td></tr></table>
10100
<a name="World"></a>
10101
<table cellpadding="1" cellspacing="1" border="0">
10102
<tr><td valign="middle" align="left">[<a href="#Tile-Conversion" title="Previous section in reading order"> < </a>]</td>
10103
<td valign="middle" align="left">[<a href="#World-Creation" title="Next section in reading order"> > </a>]</td>
10104
<td valign="middle" align="left"> </td>
10105
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
10106
<td valign="middle" align="left">[<a href="#Lua-API" title="Up section"> Up </a>]</td>
10107
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
10108
<td valign="middle" align="left"> </td>
10109
<td valign="middle" align="left"> </td>
10110
<td valign="middle" align="left"> </td>
10111
<td valign="middle" align="left"> </td>
10112
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
10113
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
10114
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
10115
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
10117
<a name="World-1"></a>
10118
<h2 class="section">5.13 World</h2>
10120
<p>The World datatype is just used by a single instance, another singleton object.
10121
A reference to this singleton is stored at the Lua global variable ‘<samp>wo</samp>’ on
10122
level load. Being a singleton you can not instantiate another World object.
10124
<p>But even though the singleton ‘<samp>wo</samp>’ already exists on load of a level the
10125
world is still undefined in all aspects. From the first line of Lua code you
10126
can access the <a href="#Global-Attributes">Global Attributes</a>. But the world gets really set up with
10127
the <a href="#World-Creation">World Creation</a>. After this call the world has a well defined size
10128
and is filled with an initial set of objects that you can access and modify
10129
from this moment on.
10131
<table class="menu" border="0" cellspacing="0">
10132
<tr><td align="left" valign="top"><a href="#World-Creation">5.13.1 World Creation</a></td><td> </td><td align="left" valign="top"> Set up world with objects
10134
<tr><td align="left" valign="top"><a href="#World-Tile-Set">5.13.2 World Tile Set</a></td><td> </td><td align="left" valign="top"> Index Operator ‘<samp>[]</samp>’ write
10136
<tr><td align="left" valign="top"><a href="#Global-Attribute-Set">5.13.3 Global Attribute Set</a></td><td> </td><td align="left" valign="top"> Index Operator ‘<samp>[]</samp>’ write
10138
<tr><td align="left" valign="top"><a href="#Global-Attribute-Get">5.13.4 Global Attribute Get</a></td><td> </td><td align="left" valign="top"> Index Operator ‘<samp>[]</samp>’ read
10140
<tr><td align="left" valign="top"><a href="#add">5.13.5 add</a></td><td> </td><td align="left" valign="top"> Add single objects to the world or an inventory
10142
<tr><td align="left" valign="top"><a href="#drawBorder">5.13.6 drawBorder</a></td><td> </td><td align="left" valign="top"> Draw a rectangular border with a tile
10144
<tr><td align="left" valign="top"><a href="#drawMap">5.13.7 drawMap</a></td><td> </td><td align="left" valign="top"> Draw objects given by a map of tile keys
10146
<tr><td align="left" valign="top"><a href="#drawRect">5.13.8 drawRect</a></td><td> </td><td align="left" valign="top"> Fill a complete rectangle with a tile
10148
<tr><td align="left" valign="top"><a href="#world-floor">5.13.9 world floor</a></td><td> </td><td align="left" valign="top"> Retrieval of floor objects
10150
<tr><td align="left" valign="top"><a href="#world-item">5.13.10 world item</a></td><td> </td><td align="left" valign="top"> Retrieval of item objects
10152
<tr><td align="left" valign="top"><a href="#shuffleOxyd">5.13.11 shuffleOxyd</a></td><td> </td><td align="left" valign="top"> Oxyd Shuffling Rules
10154
<tr><td align="left" valign="top"><a href="#world-stone">5.13.12 world stone</a></td><td> </td><td align="left" valign="top"> Retrieval of stone objects
10160
<a name="World-Creation"></a>
10161
<table cellpadding="1" cellspacing="1" border="0">
10162
<tr><td valign="middle" align="left">[<a href="#World" title="Previous section in reading order"> < </a>]</td>
10163
<td valign="middle" align="left">[<a href="#World-Tile-Set" title="Next section in reading order"> > </a>]</td>
10164
<td valign="middle" align="left"> </td>
10165
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
10166
<td valign="middle" align="left">[<a href="#World" title="Up section"> Up </a>]</td>
10167
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
10168
<td valign="middle" align="left"> </td>
10169
<td valign="middle" align="left"> </td>
10170
<td valign="middle" align="left"> </td>
10171
<td valign="middle" align="left"> </td>
10172
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
10173
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
10174
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
10175
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
10177
<a name="World-Creation-1"></a>
10178
<h3 class="subsection">5.13.1 World Creation</h3>
10180
<p>Once all parameters have been set and all tiles have been declared it is time
10181
to create the level world with all its objects. This is done by the following
10182
constructor that appears in three variations.
10184
<dl compact="compact">
10185
<dt> <b>Syntax:</b></dt>
10186
<dd><p>width, height = <b>wo</b>(<i>topresolver</i>, <i>defaultkey</i>, <i>map</i>)
10188
<p>width, height = <b>wo</b>(<i>topresolver</i>, <i>libmap</i>)
10190
<p>width, height = <b>wo</b>(<i>topresolver</i>, <i>defaultkey</i>, <i>width</i>, <i>height</i>)
10192
<dl compact="compact">
10193
<dt> <i>topresolver</i> = <code>ti</code> | <i>resolver</i> | <i>localresolver</i></dt>
10194
<dd><p>Every tile in the world is given by a key that needs to be resolved to its
10195
declaration. This can be done either by the <a href="#Tiles-Repository">Tiles Repository</a> ‘<samp>ti</samp>’, or
10196
by given library <a href="#Resolvers">Resolvers</a> or by a local <a href="#Custom-Resolver">Custom Resolver</a> function.
10197
This argument takes the top resolver that is requested first.
10199
<dt> <i>defaultkey</i></dt>
10200
<dd><p>A string that defines the key that should be taken as default. It is taken
10201
if no other key is given and it is added to a tile if a floor object is
10202
missing. The character length of this key defines the key size within the map
10204
<dt> <i>map</i></dt>
10205
<dd><p>A table of strings. Each string describes a row of tiles by its tile keys.
10206
If a map is given, the world size is determined from the longest string and
10207
the number of rows.
10209
<dt> <i>libmap</i></dt>
10210
<dd><p>A map of the library <a href="#libmap">libmap</a>
10212
<dt> <i>width</i></dt>
10213
<dd><p>As an argument that is given instead of a map it describes the width of the
10216
<dt> <i>height</i></dt>
10217
<dd><p>As an argument that is given instead of a map it describes the height of the
10223
<dt> <b>Syntax Samples:</b></dt>
10224
<dd><table><tr><td> </td><td><pre class="example">w, h = wo(ti, " ", 20, 13)
10225
w, h = wo(resolver, " ", {
10229
w, h = wo(ti, mylibmap)
10230
</pre></td></tr></table>
10233
<dt> <b>Details:</b></dt>
10234
<dd><p>This world constructor may just be called once. Every subsequent call causes
10235
an error. This call sets the size of the world to fixed values that are reported
10236
by its two return values. The world size can later on be retrieved by the world
10237
attributes <a href="#Width">Width</a> and <a href="#Height">Height</a>, too.
10239
<p>A mapless world is filled with default tiles. Rows in a given map that are
10240
shorter than others are filled with default tiles, too. Any tile that does
10241
not define a floor object will add the floor object of the default tile.
10243
<p>Every key is resolved to its tile declaration via the given resolver chain.
10244
The top resolver is given to this call as a parameter. If it is ‘<samp>ti</samp>’ the
10245
chain consists just of one element and the tile declaration stored in the tiles
10246
repository at the given key is taken. Otherwise the resolvers will be evaluated
10247
as explained in <a href="#Resolver-Chaining">Resolver Chaining</a>.
10253
<a name="World-Tile-Set"></a>
10254
<table cellpadding="1" cellspacing="1" border="0">
10255
<tr><td valign="middle" align="left">[<a href="#World-Creation" title="Previous section in reading order"> < </a>]</td>
10256
<td valign="middle" align="left">[<a href="#Global-Attribute-Set" title="Next section in reading order"> > </a>]</td>
10257
<td valign="middle" align="left"> </td>
10258
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
10259
<td valign="middle" align="left">[<a href="#World" title="Up section"> Up </a>]</td>
10260
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
10261
<td valign="middle" align="left"> </td>
10262
<td valign="middle" align="left"> </td>
10263
<td valign="middle" align="left"> </td>
10264
<td valign="middle" align="left"> </td>
10265
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
10266
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
10267
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
10268
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
10270
<a name="World-Tile-Set-1"></a>
10271
<h3 class="subsection">5.13.2 World Tile Set</h3>
10273
<dl compact="compact">
10274
<dt> <b>Syntax:</b></dt>
10275
<dd><p><b>wo</b>[<<i>object</i> | <i>position</i> | <i>table</i> | <i>group</i> | <i>polist</i>>] = <i>tile_declarations</i>
10278
<dt> <b>Details:</b></dt>
10279
<dd><p>Index write accesses to an index that can be interpreted as a grid position or
10280
a list of grid positions allows you to set one or several new objects to the
10281
given positions according to the supplied tile declaration.
10284
<dt> <b>Syntax Samples:</b></dt>
10285
<dd><table><tr><td> </td><td><pre class="example"><i>wo</i>[<i>no</i>["<var>myobjectname</var>"]] = {"<b>st_chess</b>"}
10286
<i>wo</i>[<i>po</i>(<var>3</var>, <var>4</var>)] = <i>ti</i>["<var>x</var>"]
10287
<i>wo</i>[{<var>2</var>, <var>5</var>}] = <i>ti</i>["<var>x</var>"] .. <i>ti</i>["<var>y</var>"]
10288
<i>wo</i>[<i>no</i>["<var>floorgroup#*</var>"]] = {"<b>it_burnable_oil</b>"}
10289
<i>wo</i>[<i>no</i>["<var>myobjectname</var>"] + <b>NEIGHBORS_4</b>] = <i>ti</i>["<var>x</var>"]
10290
</pre></td></tr></table>
10296
<a name="Global-Attribute-Set"></a>
10297
<table cellpadding="1" cellspacing="1" border="0">
10298
<tr><td valign="middle" align="left">[<a href="#World-Tile-Set" title="Previous section in reading order"> < </a>]</td>
10299
<td valign="middle" align="left">[<a href="#Global-Attribute-Get" title="Next section in reading order"> > </a>]</td>
10300
<td valign="middle" align="left"> </td>
10301
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
10302
<td valign="middle" align="left">[<a href="#World" title="Up section"> Up </a>]</td>
10303
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
10304
<td valign="middle" align="left"> </td>
10305
<td valign="middle" align="left"> </td>
10306
<td valign="middle" align="left"> </td>
10307
<td valign="middle" align="left"> </td>
10308
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
10309
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
10310
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
10311
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
10313
<a name="Global-Attribute-Set-1"></a>
10314
<h3 class="subsection">5.13.3 Global Attribute Set</h3>
10316
<dl compact="compact">
10317
<dt> <b>Syntax:</b></dt>
10318
<dd><p><b>wo</b>["attritbutename"] = value
10321
<dt> <b>Details:</b></dt>
10322
<dd><p>Write accesses to string type indices allows you to change <a href="#Global-Attributes">Global Attributes</a>.
10323
Just existing attributes with write accessibility may be changed. Note that
10324
some attributes must be set prior <a href="#World-Creation">World Creation</a> to take proper affect.
10327
<dt> <b>Syntax Samples:</b></dt>
10328
<dd><table><tr><td> </td><td><pre class="example"><i>wo</i>["<b>ConserveLevel</b>"] = true
10329
</pre></td></tr></table>
10335
<a name="Global-Attribute-Get"></a>
10336
<table cellpadding="1" cellspacing="1" border="0">
10337
<tr><td valign="middle" align="left">[<a href="#Global-Attribute-Set" title="Previous section in reading order"> < </a>]</td>
10338
<td valign="middle" align="left">[<a href="#add" title="Next section in reading order"> > </a>]</td>
10339
<td valign="middle" align="left"> </td>
10340
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
10341
<td valign="middle" align="left">[<a href="#World" title="Up section"> Up </a>]</td>
10342
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
10343
<td valign="middle" align="left"> </td>
10344
<td valign="middle" align="left"> </td>
10345
<td valign="middle" align="left"> </td>
10346
<td valign="middle" align="left"> </td>
10347
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
10348
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
10349
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
10350
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
10352
<a name="Global-Attribute-Get-1"></a>
10353
<h3 class="subsection">5.13.4 Global Attribute Get</h3>
10355
<dl compact="compact">
10356
<dt> <b>Syntax:</b></dt>
10357
<dd><p><var>var</var> = <b>wo</b>["attritbutename"]
10360
<dt> <b>Details:</b></dt>
10361
<dd><p>Read accesses to string type indices allows you to retrieve <a href="#Global-Attributes">Global Attributes</a>.
10362
Just existing attributes with read accessibility can be read. Note that
10363
some attributes report proper values just after <a href="#World-Creation">World Creation</a>.
10366
<dt> <b>Syntax Samples:</b></dt>
10367
<dd><table><tr><td> </td><td><pre class="example"><var>var</var> = <i>wo</i>["<b>IsDifficult</b>"]
10368
</pre></td></tr></table>
10375
<table cellpadding="1" cellspacing="1" border="0">
10376
<tr><td valign="middle" align="left">[<a href="#Global-Attribute-Get" title="Previous section in reading order"> < </a>]</td>
10377
<td valign="middle" align="left">[<a href="#drawBorder" title="Next section in reading order"> > </a>]</td>
10378
<td valign="middle" align="left"> </td>
10379
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
10380
<td valign="middle" align="left">[<a href="#World" title="Up section"> Up </a>]</td>
10381
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
10382
<td valign="middle" align="left"> </td>
10383
<td valign="middle" align="left"> </td>
10384
<td valign="middle" align="left"> </td>
10385
<td valign="middle" align="left"> </td>
10386
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
10387
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
10388
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
10389
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
10391
<a name="add-1"></a>
10392
<h3 class="subsection">5.13.5 add</h3>
10394
<p>Add <a href="#Other-Objects">Other Objects</a> to the world or a portable item to an inventory or
10395
other container object.
10397
<dl compact="compact">
10398
<dt> <b>Syntax:</b></dt>
10399
<dd><p><b>wo:add</b>(<i>tile_declarations</i>)
10401
<p><b>wo:add</b>(<i>target</i>, <i>tile_declarations</i>)
10403
<dl compact="compact">
10404
<dt> <i>tile_declarations</i></dt>
10405
<dd><p>One or many other object declarations given as tiles or anonymous tables.
10407
<dt> <i>target</i></dt>
10408
<dd><p>‘<samp>YIN</samp>’, ‘<samp>YANG</samp>’ or valid <a href="#Object-Reference">Object Reference</a>
10413
<dt> <b>Syntax Samples:</b></dt>
10414
<dd><table><tr><td> </td><td><pre class="example">wo:add({"ot_rubberband", anchor1="a1", anchor2="w", length=2, strength=80, threshold=0})
10415
wo:add(ti["r"] .. {"ot_wire", anchor1="w1", anchor2="w2"})
10416
wo:add(YIN, {"it_magicwand"})
10417
wo:add(no["mybag"], {"it_magicwand"} .. ti["h"] .. ti["c"])
10418
</pre></td></tr></table>
10421
<dt> <b>Details:</b></dt>
10422
<dd><p>Just <a href="#Other-Objects">Other Objects</a> can be directly added to the world. Just portable
10423
<a href="#Item-Objects">Item Objects</a> can be added to the player’s inventories ‘<samp>YIN</samp>’ and
10424
‘<samp>YANG</samp>’ and to <a href="#it_005fbag">it_bag</a>s. No other targets do currently add objects by
10431
<a name="drawBorder"></a>
10432
<table cellpadding="1" cellspacing="1" border="0">
10433
<tr><td valign="middle" align="left">[<a href="#add" title="Previous section in reading order"> < </a>]</td>
10434
<td valign="middle" align="left">[<a href="#drawMap" title="Next section in reading order"> > </a>]</td>
10435
<td valign="middle" align="left"> </td>
10436
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
10437
<td valign="middle" align="left">[<a href="#World" title="Up section"> Up </a>]</td>
10438
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
10439
<td valign="middle" align="left"> </td>
10440
<td valign="middle" align="left"> </td>
10441
<td valign="middle" align="left"> </td>
10442
<td valign="middle" align="left"> </td>
10443
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
10444
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
10445
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
10446
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
10448
<a name="drawBorder-1"></a>
10449
<h3 class="subsection">5.13.6 drawBorder</h3>
10451
<p>Draw a border around a rectangle out of given tiles.
10453
<dl compact="compact">
10454
<dt> <b>Syntax:</b></dt>
10455
<dd><p><b>wo:drawBorder</b>(<i>upperleft_edge</i>, <i>lowerright_edge</i>, <<i>tile</i> | <i>key</i>, <i>resolver</i>>)
10457
<p><b>wo:drawBorder</b>(<i>upperleft_edge</i>, <i>width</i>, <i>height</i>, <<i>tile</i> | <i>key</i>, <i>resolver</i>>)
10459
<dl compact="compact">
10460
<dt> <i>upperleft_edge</i></dt>
10461
<dd><p>Upper left anchor position of the rectangle.
10463
<dt> <i>lowerright_edge</i></dt>
10464
<dd><p>Lower right end position of the rectangle.
10466
<dt> <i>width</i></dt>
10467
<dd><p>Width of the rectangle.
10469
<dt> <i>height</i></dt>
10470
<dd><p>Height of the rectangle.
10472
<dt> <i>tile</i></dt>
10473
<dd><p>A tile or an object declaration.
10475
<dt> <i>key</i></dt>
10476
<dd><p>A key string to be resolved via the given resolver.
10478
<dt> <i>resolver</i></dt>
10479
<dd><p>A resolver to be used for resolving the key to a valid tile.
10484
<dt> <b>Syntax Samples:</b></dt>
10485
<dd><table><tr><td> </td><td><pre class="example">wo:drawBorder(po(0, 0), wo["Width"], wo["Height"], ti["#"])
10486
wo:drawBorder(no["myRectUL"], no["myRectLR"], {"st_grate1"})
10487
wo:drawBorder(no["myRectUL"], no["myRectLR"], {"fl_water"} .. ti["X"])
10488
wo:drawBorder(no["myRectUL"], no["myRectLR"], "x", myresolver)
10489
</pre></td></tr></table>
10492
<dt> <b>Details:</b></dt>
10493
<dd><p>The rectangle as four one grid thick lines is drawn with the given tile. That
10494
means on every position of the rectangle itself an instance of every object of
10495
the tile declaration is set. The rectangle may degenerate to a single line.
10501
<a name="drawMap"></a>
10502
<table cellpadding="1" cellspacing="1" border="0">
10503
<tr><td valign="middle" align="left">[<a href="#drawBorder" title="Previous section in reading order"> < </a>]</td>
10504
<td valign="middle" align="left">[<a href="#drawRect" title="Next section in reading order"> > </a>]</td>
10505
<td valign="middle" align="left"> </td>
10506
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
10507
<td valign="middle" align="left">[<a href="#World" title="Up section"> Up </a>]</td>
10508
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
10509
<td valign="middle" align="left"> </td>
10510
<td valign="middle" align="left"> </td>
10511
<td valign="middle" align="left"> </td>
10512
<td valign="middle" align="left"> </td>
10513
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
10514
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
10515
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
10516
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
10518
<a name="drawMap-1"></a>
10519
<h3 class="subsection">5.13.7 drawMap</h3>
10521
<p>Even if the world is initialized by a map on creation of the world
10522
(see section <a href="#World-Creation">World Creation</a>), it is sometime useful to
10523
be able to draw smaller submaps either as part of the initialization or as
10524
dynamic level changes within <a href="#Callback-Function">Callback Function</a>. Of course the main purpose
10525
of ‘<samp>drawMap</samp>’ is the drawing of repeating patterns.
10527
<dl compact="compact">
10528
<dt> <b>Syntax:</b></dt>
10530
<p><b>wo:drawMap</b>(<i>resolver</i>, <i>anchor</i>, <i>ignore</i>, <i>map</i>, [<i>readdir</i>])
10532
<p><b>wo:drawMap</b>(<i>resolver</i>, <i>anchor</i>, <i>libmap-map</i>, [<i>readdir</i>])
10534
<dl compact="compact">
10535
<dt> <i>subresolver</i></dt>
10536
<dd><p>Resolver to which unresolved requests should be forwarded. May be ‘<samp>ti</samp>’
10537
as the final resolver of the resolver chain.
10539
<dt> <i>anchor</i></dt>
10540
<dd><p>The anchor position where the upper left tile of the map should be drawn.
10542
<dt> <i>ignore</i></dt>
10543
<dd><p>A tile key string that should be ignored. This key string is mandatory, even
10544
if it not used within the map.
10546
<dt> <i>map</i></dt>
10547
<dd><p>A table of strings. Each string describes a row of tiles by its tile keys.
10549
<dt> <i>libmap-map</i></dt>
10550
<dd><p>If the map used is created via <a href="#libmap">libmap</a>, the ‘<samp>ignore</samp>’-string can
10551
be omitted. The map’s default key will then be ignored instead.
10553
<dt> <i>readdir</i></dt>
10554
<dd><p>An optional argument to modify the direction of the map relative to the world.
10555
This argument can be any of the constants described in <a href="#Rotating-and-Mirroring-Maps">Rotating and Mirroring Maps</a>.
10560
<dt> <b>Syntax Samples:</b></dt>
10561
<dd><table><tr><td> </td><td><pre class="example">wo:drawMap(ti, po(5, 7), "-", {"abcabc"})
10562
wo:drawMap(ti, anchor_object, "--", {"--##--##","##--##"})
10563
wo:drawMap(ti, {12, 5}, " ", {"122 221"}, MAP_ROT_CW)
10564
</pre></td></tr></table>
10567
<dt> <b>Details:</b></dt>
10568
<dd><p>The syntax is similar to the world creation call. But there are two essential
10569
differences you need to be aware of. First the map is drawn in the already
10570
existing world. Thus we need to define the position. This is done via the
10571
anchor position, which can be an already existing object, too.
10573
<p>The second difference is in the definition of a tile key string for tiles in
10574
the map that should be ignored. Remember that the world initialization requested
10575
a default tile key string. This default is still valid. But with the given
10576
ignore key string we can draw arbitrary shaped patterns by filling unused
10577
grids in the map with this key.
10579
<p>The length of the ignore key defines the map key length. It is strongly
10580
recommended to use the same key length as in the world map.
10582
<p>The rows of the supplied map are drawn from the anchor position. The rows may
10583
be of different length and may start with ignore tile keys. The anchor must be
10584
the position composed of the smallest x and smallest y coordinate within the
10587
<p>You can use drawMap anywhere after the world creation. You are even allowed to
10588
use it within the world creation in a resolver.
10591
<dt> <b>Full Example:</b></dt>
10592
<dd><table><tr><td> </td><td><pre class="example">01 <i>ti</i>["<var> </var>"] = {"<b>fl_plank</b>"}
10593
02 <i>ti</i>["<var>X</var>"] = {"<b>st_oxyd</b>"}
10594
03 <i>ti</i>["<var>B</var>"] = {"<b>st_passage_black</b>", <b>flavor</b>="<var>frame</var>"}
10595
04 <i>ti</i>["<var>W</var>"] = {"<b>st_passage_white</b>", <b>flavor</b>="<var>frame</var>"}
10596
05 <i>ti</i>["<var>y</var>"] = {"<b>it_yinyang</b>"}
10597
06 <i>ti</i>["<var>1</var>"] = {"<b>#ac_marble_black</b>"}
10598
07 <i>ti</i>["<var>2</var>"] = {"<b>#ac_marble_white</b>"}
10600
09 function <var>myresolver</var>(<var>key</var>, <var>x</var>, <var>y</var>)
10601
10 if <var>key</var> == "<b>w</b>" then
10602
11 <i>wo</i>:<b>drawMap</b>(ti, po(x-1, y-1), "-", {"-W-",
10603
12 "WXW",
10604
13 "-W-"})
10605
14 return <i>ti</i>({})
10606
15 elseif <var>key</var> == "<b>b</b>" then
10607
16 <i>wo</i>:<b>drawMap</b>(ti, po(x-1, y-1), "-", {"-B",
10608
17 "BXB",
10609
18 "-B"})
10610
19 return <i>ti</i>({})
10612
21 return <i>ti</i>[<var>key</var>]
10616
25 w, h = <i>wo</i>(<i>myresolver</i>, "<var> </var>", {
10618
27 " b b ",
10619
28 " w w ",
10622
31 " w ",
10623
32 " 12 b ",
10624
33 " w ",
10625
34 " w ",
10626
35 " b ",
10627
36 " w b ",
10628
37 " b ",
10631
40 <i>wo</i>:<b>shuffleOxyd</b>()
10632
</pre></td></tr></table>
10637
<a name="drawRect"></a>
10638
<table cellpadding="1" cellspacing="1" border="0">
10639
<tr><td valign="middle" align="left">[<a href="#drawMap" title="Previous section in reading order"> < </a>]</td>
10640
<td valign="middle" align="left">[<a href="#world-floor" title="Next section in reading order"> > </a>]</td>
10641
<td valign="middle" align="left"> </td>
10642
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
10643
<td valign="middle" align="left">[<a href="#World" title="Up section"> Up </a>]</td>
10644
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
10645
<td valign="middle" align="left"> </td>
10646
<td valign="middle" align="left"> </td>
10647
<td valign="middle" align="left"> </td>
10648
<td valign="middle" align="left"> </td>
10649
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
10650
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
10651
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
10652
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
10654
<a name="drawRect-1"></a>
10655
<h3 class="subsection">5.13.8 drawRect</h3>
10657
<p>Fill a rectangle with a given tile.
10659
<dl compact="compact">
10660
<dt> <b>Syntax:</b></dt>
10661
<dd><p><b>wo:drawRect</b>(<i>upperleft_edge</i>, <i>lowerright_edge</i>, <<i>tile</i> | <i>key</i>, <i>resolver</i>>)
10663
<p><b>wo:drawRect</b>(<i>upperleft_edge</i>, <i>width</i>, <i>height</i>, <<i>tile</i> | <i>key</i>, <i>resolver</i>>)
10665
<dl compact="compact">
10666
<dt> <i>upperleft_edge</i></dt>
10667
<dd><p>Upper left anchor position of the rectangle.
10669
<dt> <i>lowerright_edge</i></dt>
10670
<dd><p>Lower right end position of the rectangle.
10672
<dt> <i>width</i></dt>
10673
<dd><p>Width of the rectangle.
10675
<dt> <i>height</i></dt>
10676
<dd><p>Height of the rectangle.
10678
<dt> <i>tile</i></dt>
10679
<dd><p>A tile or an object declaration.
10681
<dt> <i>key</i></dt>
10682
<dd><p>A key string to be resolved via the given resolver.
10684
<dt> <i>resolver</i></dt>
10685
<dd><p>A resolver to be used for resolving the key to a valid tile.
10690
<dt> <b>Syntax Samples:</b></dt>
10691
<dd><table><tr><td> </td><td><pre class="example">wo:drawRect(po(0, 0), wo["Width"], wo["Height"], ti[" "])
10692
wo:drawRect(no["myRectUL"], no["myRectLR"], {"fl_water"})
10693
wo:drawRect(no["myRectUL"], no["myRectLR"], {"fl_water"} .. ti["#"])
10694
wo:drawRect(no["myRectUL"], no["myRectLR"], "x", myresolver)
10695
</pre></td></tr></table>
10698
<dt> <b>Details:</b></dt>
10699
<dd><p>The complete rectangle is filled with the given tile. That means on every
10700
position of the rectangle and its interior an instance of every object of
10701
the tile declaration is set. The rectangle may degenerate to a single line.
10707
<a name="world-floor"></a>
10708
<table cellpadding="1" cellspacing="1" border="0">
10709
<tr><td valign="middle" align="left">[<a href="#drawRect" title="Previous section in reading order"> < </a>]</td>
10710
<td valign="middle" align="left">[<a href="#world-item" title="Next section in reading order"> > </a>]</td>
10711
<td valign="middle" align="left"> </td>
10712
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
10713
<td valign="middle" align="left">[<a href="#World" title="Up section"> Up </a>]</td>
10714
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
10715
<td valign="middle" align="left"> </td>
10716
<td valign="middle" align="left"> </td>
10717
<td valign="middle" align="left"> </td>
10718
<td valign="middle" align="left"> </td>
10719
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
10720
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
10721
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
10722
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
10724
<a name="world-floor-1"></a>
10725
<h3 class="subsection">5.13.9 world floor</h3>
10727
<p>Retrieves the floor objects for the given position or positions.
10729
<dl compact="compact">
10730
<dt> <b>Syntax:</b></dt>
10731
<dd><p>result = <b>wo</b>:<b>fl</b>(<<i>pos</i>| {<i>x</i>, <i>y</i>}|<i>x</i>, <i>y</i>| <i>obj</i> | <i>group</i>| <i>polist</i>>)
10734
<dt> <b>Details:</b></dt>
10735
<dd><p>This world method is identical to the global function <a href="#fl">fl</a>.
10741
<a name="world-item"></a>
10742
<table cellpadding="1" cellspacing="1" border="0">
10743
<tr><td valign="middle" align="left">[<a href="#world-floor" title="Previous section in reading order"> < </a>]</td>
10744
<td valign="middle" align="left">[<a href="#shuffleOxyd" title="Next section in reading order"> > </a>]</td>
10745
<td valign="middle" align="left"> </td>
10746
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
10747
<td valign="middle" align="left">[<a href="#World" title="Up section"> Up </a>]</td>
10748
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
10749
<td valign="middle" align="left"> </td>
10750
<td valign="middle" align="left"> </td>
10751
<td valign="middle" align="left"> </td>
10752
<td valign="middle" align="left"> </td>
10753
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
10754
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
10755
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
10756
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
10758
<a name="world-item-1"></a>
10759
<h3 class="subsection">5.13.10 world item</h3>
10761
<p>Retrieves the item objects for the given position or positions.
10763
<dl compact="compact">
10764
<dt> <b>Syntax:</b></dt>
10765
<dd><p>result = <b>wo</b>:<b>it</b>(<<i>pos</i>| {<i>x</i>, <i>y</i>}|<i>x</i>, <i>y</i>| <i>obj</i> | <i>group</i>| <i>polist</i>>)
10768
<dt> <b>Details:</b></dt>
10769
<dd><p>This world method is identical to the global function <a href="#it">it</a>.
10775
<a name="shuffleOxyd"></a>
10776
<table cellpadding="1" cellspacing="1" border="0">
10777
<tr><td valign="middle" align="left">[<a href="#world-item" title="Previous section in reading order"> < </a>]</td>
10778
<td valign="middle" align="left">[<a href="#world-stone" title="Next section in reading order"> > </a>]</td>
10779
<td valign="middle" align="left"> </td>
10780
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
10781
<td valign="middle" align="left">[<a href="#World" title="Up section"> Up </a>]</td>
10782
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
10783
<td valign="middle" align="left"> </td>
10784
<td valign="middle" align="left"> </td>
10785
<td valign="middle" align="left"> </td>
10786
<td valign="middle" align="left"> </td>
10787
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
10788
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
10789
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
10790
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
10792
<a name="shuffleOxyd-1"></a>
10793
<h3 class="subsection">5.13.11 shuffleOxyd</h3>
10795
<p>Shuffling the color distribution of the <a href="#st_005foxyd">st_oxyd</a> makes every level, that
10796
is no meditation, a bit generic. On every level start the level looks a little
10797
bit different and the user has to solve a modified level. This provides long
10798
term amusement. Thus the call of this method is part of most levels.
10800
<p>Many levels just call this method without any arguments. This results in a
10801
shuffling of all <a href="#st_005foxyd">st_oxyd</a> that are not excluded by a ‘<samp>noshuffle</samp>’
10804
<p>But sometimes levels need to influence the shuffling, either for ensuring that
10805
the level remains solvable, or simply to ensure fairness. Imagine a level that
10806
has two <a href="#st_005foxyd">st_oxyd</a>s in every corner. If by chance a user gets a distribution
10807
where he has in each corner a pair of same colored oxyds, the level might be
10808
trivial. Another level may have a passage that the marble can pass just a few
10809
times. With 5 or more oxyds on each side of the passage you need to ensure that
10810
the marble never needs to pass the passage more often than possible. Both
10811
situations can be handled by providing proper rules as arguments to this method.
10813
<dl compact="compact">
10814
<dt> <b>Syntax:</b></dt>
10816
<p><b>wo:shuffleOxyd</b>(<i>rules</i>)
10818
<dl compact="compact">
10819
<dt> <i>rules</i> = <i>rule</i>, <i>rule</i>,...</dt>
10820
<dd><p>No rule or as many as you like, all separated by a comma.
10822
<dt> <i>rule</i> = {<i>group1</i>, <i>group2</i>, <i>maxrule</i>, <i>minrule</i>, <i>circularrule</i>, <i>linearrule</i>, <i>log</i>}</dt>
10823
<dd><p>Each rule is a table with a subset of the listed entries. The <i>group1</i> entry
10824
is mandatory. All other entries are optional and can be added in any combination.
10826
<dt> <i>group1</i> = <i>group</i> | <i>objectreference</i> | <i>objectspecifier</i></dt>
10827
<dd><p>A description of oxyd objects that are part of the first rule group. Either
10828
a group or a single object reference or a string specifier that resolves to a
10829
single or via wildcard to several oxyd objects are legal descriptors.
10831
<dt> <i>group2</i> = <i>group</i> | <i>objectreference</i> | <i>objectspecifier</i></dt>
10832
<dd><p>A description of oxyd objects that are part of the second rule group. Either
10833
a group or a single object reference or a string specifier that resolves to a
10834
single or via wildcard to several oxyd objects are legal descriptors.
10836
<dt> <i>maxrule</i> = <code>max = </code><i>number</i></dt>
10837
<dd><p>The maximum number of oxyd pairs.
10839
<dt> <i>minrule</i> = <code>min = </code><i>number</i></dt>
10840
<dd><p>The minimum number of oxyd pairs.
10842
<dt> <i>circularrule</i> = <code>circular = true</code></dt>
10843
<dd><p>Avoid any pair of neighboring oxyds in group1. Avoid an oxyd pair of first and
10844
last oxyd in group1, too.
10846
<dt> <i>linearrule</i> = <code>linear = true</code></dt>
10847
<dd><p>Avoid any pair of neighboring oxyds in group1.
10849
<dt> <i>log</i> = <code>log = </code> <code>"solution"</code> |<code>"count"</code> |<code>"all"</code></dt>
10850
<dd><p>Log additional information to the log stream for debugging purposes and
10851
security checks by the level author.
10856
<dt> <b>Syntax Samples:</b></dt>
10857
<dd><table><tr><td> </td><td><pre class="example">wo:shuffleOxyd()
10858
wo:shuffleOxyd({no["borderoxyds#*"]:sort("circular"), circular=true})
10859
wo:shuffleOxyd({"leftoxyds#*","rightoxyds#*", min=3}, {"islandoxyds#*", max=0})
10860
</pre></td></tr></table>
10863
<dt> <b>Details:</b></dt>
10865
<p>Any call of ‘<samp>wo:shuffleOxyd()</samp>’ must occur after all <a href="#st_005foxyd">st_oxyd</a> have been
10866
set. That means that it must follow the standard world initialization
10867
(see section <a href="#World-Creation">World Creation</a>). As a side effect shuffleOxyd
10868
will assign colors to all ‘<samp>OXYD_AUTO</samp>’ colored <a href="#st_005foxyd">st_oxyd</a>.
10870
<p>Once called the given shuffling rules remain valid. Any further reshuffling
10871
must be done by messages ‘<samp>closeall</samp>’ and ‘<samp>shuffle</samp>’ to one arbitrary
10872
<a href="#st_005foxyd">st_oxyd</a> instance. No addition of an <a href="#st_005foxyd">st_oxyd</a> or subsequent
10873
‘<samp>wo:shuffleOxyd()</samp>’ calls are possible without disturbing and deleting the
10876
<p>Rule based shuffling is limited to a maximum of one pair of each standard oxyd
10877
color plus any combination of additional special fake, quake or bold oxyds
10878
summing up to a maximum of 32 oxyds. If more than 32 oxyds or 2 or more pairs
10879
of a single standard color are set, all oxyds will be shuffled by random
10880
ignoring any provided rules.
10882
<p>There are basically two different types of rules. Those with one group and those
10883
with two groups of oxyds (Note that group is the general API expression for
10884
a set of oxyds and not a mathematical group). For a single group the rules apply
10885
to the oxyd instances within this group. For two groups the rules apply to oxyd
10886
pairs with one oxyd in the first group and the other in the second group.
10888
<p>E.g. ‘<samp>{"islandoxyds#*", max=0}</samp>’ requests that there is no pair within
10889
this group of oxyds. Whereas ‘<samp>{"leftoxyds#*","rightoxyds#*", min=3}</samp>’
10890
requests that there are 3 different oxyd pairs, each with one oxyd out of the
10891
leftoxyd group and the second out of the rightoxyd group.
10893
<p>Linear and circular rules can only be applied to a single group. They are
10894
shortcuts for the most common rules that are applied to oxyds arranged on a
10895
line or a circle. In both cases they avoid pairs of neighboring oxyds. They
10896
are equivalent to ‘<samp>n-1</samp>’ res. ‘<samp>n</samp>’ rules with all possible neighboring
10897
oxyd pairs as two groups and a rule of ‘<samp>max=0</samp>’.
10899
<p>Note that you can apply several rules at once to given groups. E.g. you can
10900
apply a minrule and a maxrule within one rule!
10902
<p>The shuffling process consists always of two stages. The most important first
10903
stage generates a valid oxyd pair distribution. That means that we settle which
10904
pairs will have the same color. But the color itself is assigned in an
10905
independent second stage. As for the examination of given rules just the pair
10906
distribution is relevant, we do just count and log these different distributions
10907
ignoring the colors.
10909
<p>With 16 oxyds of 8 different colors and no restricting rules you have 2027025
10910
(15 * 13 * 11 * 9 * 7 * 5 * 3) different valid distributions. Keep in mind
10911
that useful rules should always keep hundreds or thousands of different valid
10912
distributions for a level.
10914
<p>For debugging purposes you can add a log parameter to one of the rules (it does
10915
not matter to which one). If you request the log of ‘<samp>solution</samp>’ the
10916
pair distribution will be printed to the log stream.
10918
<p>In case of ‘<samp>count</samp>’ the number of different oxyd distributions will be
10919
counted and logged. It is recommended to check the count on complex rules to
10920
ensure that enough distributions remain for a varying game. But be careful
10921
applying count on trivial rules. With 16 oxyds there may be as many as
10922
2027025 distributions and it may take a standard PC up to 30 seconds to count
10923
them - add a factor of 17*19 for 20 oxyds!
10925
<p>Be very, very cautious in usage of logging ‘<samp>all</samp>’. This call tries to print
10926
all solutions. It takes ages if there are too many solutions. First check the
10927
count before trying to log the solutions.
10930
<dt> <b>Full Example:</b></dt>
10931
<dd><table><tr><td> </td><td><pre class="example">01 <i>wo</i>["<b>ConserveLevel</b>"] = <var>false</var>
10933
03 <i>ti</i>["<var>~</var>"] = {"<b>fl_water</b>"}
10934
04 <i>ti</i>["<var> </var>"] = {"<b>fl_plank</b>"}
10935
05 <i>ti</i>["<var>c</var>"] = {"<b>it_crack_l</b>", <b>brittleness</b>=<var>0</var>}
10936
06 <i>ti</i>["<var>^</var>"] = {"<b>st_oneway_n</b>"}
10937
07 <i>ti</i>["<var>1</var>"] = {"<b>ac_marble_black</b>", 0, 0.5}
10939
09 <i>ti</i>["<var>x</var>"] = {"<b>st_oxyd</b>", "island#"}
10940
10 <i>ti</i>["<var>y</var>"] = {"<b>st_oxyd</b>", "left#"}
10941
11 <i>ti</i>["<var>z</var>"] = {"<b>st_oxyd</b>", "right#"}
10943
13 w, h = <i>wo</i>(<i>ti</i>, "<var> </var>", {
10944
14 "<var>~~x x x x x x~~</var>",
10945
15 "<var>~~ ~~</var>",
10946
16 "<var>~~~~^~~~~~~~~~~^~~~~</var>",
10947
17 "<var>y ~~~~ z</var>",
10948
18 "<var>~ cccc ~</var>",
10949
19 "<var>y ~~~~ z</var>",
10950
20 "<var>~ cccc ~</var>",
10951
21 "<var>y ~~~~ z</var>",
10952
22 "<var>~ cccc ~</var>",
10953
23 "<var>y ~~~~ z</var>",
10954
24 "<var>~~~~c~~~~~~~~~~c~~~~</var>",
10955
25 "<var>~~ ~~</var>",
10956
26 "<var>~~ 1 ~~</var>"
10959
29 <i>wo</i>:<b>shuffleOxyd</b>({"<b>island#*</b>", <b>min</b>=<var>3</var>, <b>linear</b>=<var>true</var>}, {"<b>left#*</b>","<b>right#*</b>", <b>max</b>=<var>2</var>, <b>min</b>=<var>2</var>})
10960
</pre></td></tr></table>
10962
<p>This level uses 14 oxyds. The 6 oxyds in the upper row are on an island that
10963
can not be left once the marble entered it through one of the oneways. Thus
10964
we need 3 pairs of oxyds on this island, which are enforced by the min rule.
10965
To avoid trivial neighboring pairs on the island, we do add a linear rule, too.
10966
The marble can pass just three times between the left and right islands. This
10967
allows a first look on the color oxyds with one pass and opening one pair on
10968
each of the two following passes. Thus we limit the number of pairs by a max
10969
rule to 2. To avoid trivial oxyd pair distributions, like two pairs on the left
10970
and two pairs on the right side, we do add a min rule that enforces that two
10971
shared pairs of oxyds do exist.
10976
<a name="world-stone"></a>
10977
<table cellpadding="1" cellspacing="1" border="0">
10978
<tr><td valign="middle" align="left">[<a href="#shuffleOxyd" title="Previous section in reading order"> < </a>]</td>
10979
<td valign="middle" align="left">[<a href="#Functions" title="Next section in reading order"> > </a>]</td>
10980
<td valign="middle" align="left"> </td>
10981
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
10982
<td valign="middle" align="left">[<a href="#World" title="Up section"> Up </a>]</td>
10983
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
10984
<td valign="middle" align="left"> </td>
10985
<td valign="middle" align="left"> </td>
10986
<td valign="middle" align="left"> </td>
10987
<td valign="middle" align="left"> </td>
10988
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
10989
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
10990
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
10991
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
10993
<a name="world-stone-1"></a>
10994
<h3 class="subsection">5.13.12 world stone</h3>
10996
<p>Retrieves the stone objects for the given position or positions.
10998
<dl compact="compact">
10999
<dt> <b>Syntax:</b></dt>
11000
<dd><p>result = <b>wo</b>:<b>st</b>(<<i>pos</i>| {<i>x</i>, <i>y</i>}|<i>x</i>, <i>y</i>| <i>obj</i> | <i>group</i>| <i>polist</i>>)
11003
<dt> <b>Details:</b></dt>
11004
<dd><p>This world method is identical to the global function <a href="#st">st</a>.
11012
<a name="Functions"></a>
11013
<table cellpadding="1" cellspacing="1" border="0">
11014
<tr><td valign="middle" align="left">[<a href="#world-stone" title="Previous section in reading order"> < </a>]</td>
11015
<td valign="middle" align="left">[<a href="#assert_005fbool" title="Next section in reading order"> > </a>]</td>
11016
<td valign="middle" align="left"> </td>
11017
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
11018
<td valign="middle" align="left">[<a href="#Lua-API" title="Up section"> Up </a>]</td>
11019
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
11020
<td valign="middle" align="left"> </td>
11021
<td valign="middle" align="left"> </td>
11022
<td valign="middle" align="left"> </td>
11023
<td valign="middle" align="left"> </td>
11024
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
11025
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
11026
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
11027
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
11029
<a name="Functions-1"></a>
11030
<h2 class="section">5.14 Functions</h2>
11032
<p>Besides all the features strongly related to a value as context and thus
11033
implemented as operators or methods of these datatypes, a few other tasks
11034
remain. These are either context free or take at least in one variation just a
11035
standard Lua datatype, that does not supply a context. Thus these tasks are
11036
implemented as simple functions.
11038
<table class="menu" border="0" cellspacing="0">
11039
<tr><td align="left" valign="top"><a href="#assert_005fbool">5.14.1 assert_bool</a></td><td> </td><td align="left" valign="top"> Throws an error if a condition doesn’t hold.
11041
<tr><td align="left" valign="top"><a href="#assert_005ftype">5.14.2 assert_type</a></td><td> </td><td align="left" valign="top"> Throws an error if a variable is not of a given type.
11043
<tr><td align="left" valign="top"><a href="#cond">5.14.3 cond</a></td><td> </td><td align="left" valign="top"> A ternary operator, wrapper for if-then-else.
11045
<tr><td align="left" valign="top"><a href="#etype">5.14.4 etype</a></td><td> </td><td align="left" valign="top"> An advanced function to return normal and user data types.
11047
<tr><td align="left" valign="top"><a href="#fl">5.14.5 fl</a></td><td> </td><td align="left" valign="top"> Floor retrieval
11049
<tr><td align="left" valign="top"><a href="#grp">5.14.6 grp</a></td><td> </td><td align="left" valign="top"> Create a group out of the argument objects
11051
<tr><td align="left" valign="top"><a href="#it">5.14.7 it</a></td><td> </td><td align="left" valign="top"> Item retrieval
11053
<tr><td align="left" valign="top"><a href="#ORI2DIR">5.14.8 ORI2DIR</a></td><td> </td><td align="left" valign="top"> Orientation to direction conversion
11055
<tr><td align="left" valign="top"><a href="#random">5.14.9 random</a></td><td> </td><td align="left" valign="top"> Random number generator
11057
<tr><td align="left" valign="top"><a href="#st">5.14.10 st</a></td><td> </td><td align="left" valign="top"> Stone retrieval
11059
<tr><td align="left" valign="top"><a href="#usertype">5.14.11 usertype</a></td><td> </td><td align="left" valign="top"> Type info for Enigma userdata types
11065
<a name="assert_005fbool"></a>
11066
<table cellpadding="1" cellspacing="1" border="0">
11067
<tr><td valign="middle" align="left">[<a href="#Functions" title="Previous section in reading order"> < </a>]</td>
11068
<td valign="middle" align="left">[<a href="#assert_005ftype" title="Next section in reading order"> > </a>]</td>
11069
<td valign="middle" align="left"> </td>
11070
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
11071
<td valign="middle" align="left">[<a href="#Functions" title="Up section"> Up </a>]</td>
11072
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
11073
<td valign="middle" align="left"> </td>
11074
<td valign="middle" align="left"> </td>
11075
<td valign="middle" align="left"> </td>
11076
<td valign="middle" align="left"> </td>
11077
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
11078
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
11079
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
11080
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
11082
<a name="assert_005fbool-1"></a>
11083
<h3 class="subsection">5.14.1 assert_bool</h3>
11084
<a name="index-assert_005fbool"></a>
11086
<p>The function ‘<samp>assert_bool</samp>’ throws an error if a given condition doesn’t hold.
11088
<dl compact="compact">
11089
<dt> <b>Syntax:</b></dt>
11090
<dd><p><b>assert_bool</b>(<i>condition</i>, <i>message</i>, <i>level</i>)
11092
<dl compact="compact">
11093
<dt> <i>condition</i></dt>
11094
<dd><p>A boolean expression or anything else. If it is <code>false</code> or <code>nil</code>, an
11095
error will be thrown.
11098
<dt> <i>message</i></dt>
11099
<dd><p>A string, holding the error message. If <code>message</code> is nil or empty, an
11100
"anonymous assertion" will be thrown, but it’s always better to provide a
11101
meaningful error message.
11104
<dt> <i>level</i></dt>
11105
<dd><p><code>level</code> specifies the error position in the same way as does Lua’s
11106
‘<samp>error</samp>’-function. Default is 1.
11111
<dt> <b>Syntax Samples:</b></dt>
11112
<dd><table><tr><td> </td><td><pre class="example"><i>assert_bool</i>(<i>no</i>["<var>mystone</var>"]:<b>exists</b>(), "<var>Stone 'mystone' has disappeared.</var>")
11113
</pre></td></tr></table>
11116
<dt> <b>Details:</b></dt>
11117
<dd><p>Assertions help you to detect coding errors. They are heavily used on argument
11118
checks of library functions and resolver implementations. As the assertions
11119
should not lead to performance penalties during runtime they are usually just
11120
evaluated when the level’s ‘<samp>status</samp>’ is declared in the XML header element
11121
<a href="#g_t_003cversion_003e"><version></a> with a value of either <code>"test"</code> or <code>"experimental"</code>.
11123
<p>For <code>"stable"</code> and <code>"released"</code> levels standard assert statements are
11124
simply skipped on compilation like Lua comments. But you can enforce assert
11125
statements to be executed even in these modes by the following pattern of
11126
assignment and additional braces:
11127
</p><table><tr><td> </td><td><pre class="example"><var>dummy</var> = (<i>assert_bool</i>)(<i>no</i>["<var>mystone</var>"]:<b>exists</b>(), "<var>Stone 'mystone' has disappeared.</var>")
11128
</pre></td></tr></table>
11130
<p>Similar to <a href="#cond">cond</a>, all side effects within the evaluation of ‘<samp>message</samp>’
11131
and ‘<samp>level</samp>’ will appear.
11133
<p>See Lua’s manual for more detailed information about the ‘<samp>error</samp>’-function.
11140
<a name="assert_005ftype"></a>
11141
<table cellpadding="1" cellspacing="1" border="0">
11142
<tr><td valign="middle" align="left">[<a href="#assert_005fbool" title="Previous section in reading order"> < </a>]</td>
11143
<td valign="middle" align="left">[<a href="#cond" title="Next section in reading order"> > </a>]</td>
11144
<td valign="middle" align="left"> </td>
11145
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
11146
<td valign="middle" align="left">[<a href="#Functions" title="Up section"> Up </a>]</td>
11147
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
11148
<td valign="middle" align="left"> </td>
11149
<td valign="middle" align="left"> </td>
11150
<td valign="middle" align="left"> </td>
11151
<td valign="middle" align="left"> </td>
11152
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
11153
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
11154
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
11155
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
11157
<a name="assert_005ftype-1"></a>
11158
<h3 class="subsection">5.14.2 assert_type</h3>
11159
<a name="index-assert_005ftype"></a>
11161
<p>The function ‘<samp>assert_type</samp>’ throws an error if the first argument is not of one of the
11164
<dl compact="compact">
11165
<dt> <b>Syntax:</b></dt>
11166
<dd><p><b>assert_type</b>(<i>var</i>, <i>vardescription</i>, <i>level</i>, <i>type1</i>, <i>type2</i>, ...)
11168
<dl compact="compact">
11169
<dt> <i>var</i></dt>
11170
<dd><p>Any kind of variable.
11173
<dt> <i>vardescription</i></dt>
11174
<dd><p>If ‘<samp>var</samp>’ is not of one of the types ‘<samp>type1</samp>’, ‘<samp>type2</samp>’ ...,
11175
then an error message will be thrown which includes the actual type of
11176
‘<samp>var</samp>’ and the desired types. ‘<samp>vardescription</samp>’ is a string which
11177
holds additional information for the error message. It should be a lower-case
11178
not-too-short description of ‘<samp>var</samp>’ (a name, as it is), additional
11179
details should be added in brackets.
11182
<dt> <i>level</i></dt>
11183
<dd><p><code>level</code> specifies the error position in the same way as does Lua’s
11184
‘<samp>error</samp>’-function. Can’t be omitted, use ‘<samp>1</samp>’ if in doubt.
11187
<dt> <i>type1</i>, <i>type2</i>, ...</dt>
11188
<dd><p>A sequence of strings. If ‘<samp>var</samp>’ is none of these types, the error will
11189
be thrown. See details below for type descriptors.
11194
<dt> <b>Syntax Samples:</b></dt>
11195
<dd><table><tr><td> </td><td><pre class="example"><i>assert_type</i>(<var>arg1</var>, "<var>mygreatfunction first argument (level width)</var>", <var>1</var>, "<b>nil</b>", "<b>positive integer</b>", "<b>position</b>")
11196
</pre></td></tr></table>
11199
<dt> <b>Details:</b></dt>
11200
<dd><p>Assertions help you to detect coding errors. They are heavily used on argument
11201
checks of library functions and resolver implementations. As the assertions
11202
should not lead to performance penalties during runtime they are usually just
11203
evaluated when the level’s ‘<samp>status</samp>’ is declared in the XML header element
11204
<a href="#g_t_003cversion_003e"><version></a> with a value of either <code>"test"</code> or <code>"experimental"</code>.
11206
<p>For <code>"stable"</code> and <code>"released"</code> levels standard assert statements are
11207
simply skipped on compilation like Lua comments. But you can enforce assert
11208
statements to be executed even in these modes by the following pattern of
11209
assignment and additional braces:
11210
</p><table><tr><td> </td><td><pre class="example"><var>dummy</var> = (<i>assert_type</i>)(<var>arg1</var>, "<var>myfunction first argument</var>", <var>1</var>, "<b>integer</b>")
11211
</pre></td></tr></table>
11213
<p>Possible types are all Lua types (like <code>"nil"</code>, <code>"number"</code>,
11214
<code>"boolean"</code>, <code>"string"</code>, <code>"table"</code>, <code>"function"</code>) except
11215
<code>"userdata"</code>, all Enigma-own user types (<code>"object"</code>,
11216
<code>"position"</code>, <code>"tile"</code>, <code>"tiles"</code>, <code>"group"</code>,
11217
<code>"world"</code>, <code>"polist"</code>, <code>"unknown"</code>), and
11218
types defined inside metatables (<code>"map"</code> from <a href="#libmap">libmap</a>), see
11219
<a href="#etype">etype</a>. In addition, the following type descriptors are recognized:
11220
</p><dl compact="compact">
11221
<dt> <code>"integer"</code></dt>
11222
<dd><p>Any integer number (..., -2, -1, 0, 1, 2, ...)
11224
<dt> <code>"positive"</code></dt>
11225
<dd><p>Any number which is positive and not zero.
11227
<dt> <code>"non-negative"</code></dt>
11228
<dd><p>Any number which is not negative, i.e. which is positive or zero.
11230
<dt> <code>"natural"</code></dt>
11231
<dd><p>Any non-negative integer number (0, 1, 2, ...).
11233
<dt> <code>"positive integer"</code></dt>
11234
<dd><p>Any positive integer number (1, 2, 3, ...).
11236
<dt> <code>"non-empty string"</code></dt>
11237
<dd><p>Any string other than the empty string <code>""</code>.
11239
<dt> <code>"any table"</code></dt>
11240
<dd><p>If ‘<samp>var</samp>’ is a table, the ‘<samp>_type</samp>’-attribute of its metatable will
11241
be used as its <a href="#etype">etype</a>. In particular, it won’t be accepted as a
11242
<code>"table"</code> anymore, if this ‘<samp>_type</samp>’-attribute exists. For example,
11243
</p><table><tr><td> </td><td><pre class="example">assert_type(mytable, "large table", 1, "table")
11244
</pre></td></tr></table>
11245
<p>will throw an assertion when ‘<samp>mytable</samp>’ is a <code>"map"</code>, although,
11246
technically, a <code>"map"</code> always is a <code>"table"</code>. You can use
11247
<code>"any table"</code> as type to allow for any table, regardless of its metatable.
11249
<dt> <code>"valid object"</code></dt>
11250
<dd><p>Any valid object.
11254
<p>Similar to <a href="#cond">cond</a>, all side effects within the evaluation of
11255
‘<samp>vardescription</samp>’, ‘<samp>level</samp>’ and any type descriptor will apply.
11257
<p>See Lua’s manual for more detailed information about the ‘<samp>error</samp>’-function.
11260
<dt> <b>Full Example:</b></dt>
11261
<dd><table><tr><td> </td><td><pre class="example">function paint_lawn(pos)
11262
assert_type(pos, "paint_lawn first argument", 2, "position", "object", "polist", "group", "table")
11263
if etype(pos) == "object" then
11264
assert_bool(-pos, "paint_lawn: Object not existing.", 2)
11266
wo[pos] = ti["lawn"]
11268
paint_lawn(no["mystone"])
11269
paint_lawn("myotherstone")
11270
</pre></td></tr></table>
11271
<p>If ‘<samp>mystone</samp>’ doesn’t exist, <code>no["mystone"]</code> will still be of etype
11272
<code>"object"</code>, an invalid object. Hence <code>assert_type</code> will not trigger,
11273
but <code>assert_bool</code> will.
11275
<p>If ‘<samp>mystone</samp>’ exists, the second ‘<samp>paint_lawn</samp>’ will throw an error via
11276
‘<samp>assert_type</samp>’, as <code>pos</code> now is a <code>"string"</code>. The error message
11278
</p><table><tr><td> </td><td><pre class="example">Wrong type for paint_lawn first argument, is string, must be one of position,
11279
object, polist, group, table.
11280
</pre></td></tr></table>
11286
<a name="cond"></a>
11287
<table cellpadding="1" cellspacing="1" border="0">
11288
<tr><td valign="middle" align="left">[<a href="#assert_005ftype" title="Previous section in reading order"> < </a>]</td>
11289
<td valign="middle" align="left">[<a href="#etype" title="Next section in reading order"> > </a>]</td>
11290
<td valign="middle" align="left"> </td>
11291
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
11292
<td valign="middle" align="left">[<a href="#Functions" title="Up section"> Up </a>]</td>
11293
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
11294
<td valign="middle" align="left"> </td>
11295
<td valign="middle" align="left"> </td>
11296
<td valign="middle" align="left"> </td>
11297
<td valign="middle" align="left"> </td>
11298
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
11299
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
11300
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
11301
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
11303
<a name="cond-1"></a>
11304
<h3 class="subsection">5.14.3 cond</h3>
11306
<p>‘<samp>cond</samp>’ is a conditional assignment, a substitution for the ternary
11307
‘<samp>?:</samp>’ operator of C-like languages. Note however, that it is not an
11308
equivalent substitution but just a workaround with some subtle side effects.
11310
<dl compact="compact">
11311
<dt> <b>Syntax:</b></dt>
11312
<dd><p><b>cond</b>(<i>condition</i>, <i>iftrue</i>, <i>iffalse</i>)
11314
<dl compact="compact">
11315
<dt> <i>condition</i></dt>
11316
<dd><p>A boolean expression.
11319
<dt> <i>iftrue</i></dt>
11320
<dd><p>The expression to be returned if ‘<samp>condition</samp>’ is true.
11323
<dt> <i>iffalse</i></dt>
11324
<dd><p>The expression to be returned if ‘<samp>condition</samp>’ is false.
11329
<dt> <b>Syntax Samples:</b></dt>
11330
<dd><table><tr><td> </td><td><pre class="example"><i>ti</i>["<var>x</var>"] = <i>cond</i>(<i>wo</i>["<b>IsDifficult</b>"], {"<b>st_death</b>"}, <i>ti</i>["<var>#</var>"])
11331
<i>ti</i>["<var>D</var>"] = <i>cond</i>(<i>wo</i>["<b>IsDifficult"</b>], {"<b>st_death</b>"}, {"<b>nil</b>"})
11332
</pre></td></tr></table>
11335
<dt> <b>Details:</b></dt>
11336
<dd><p>‘<samp>cond</samp>’ always evaluates both expressions ‘<samp>iftrue</samp>’ and
11337
‘<samp>iffalse</samp>’, regardless of ‘<samp>condition</samp>’. Hence,
11338
</p><table><tr><td> </td><td><pre class="example"><var>mytable</var> = {<var>1</var>,<var>2</var>,<var>3</var>,<var>4</var>,<var>5</var>,<var>6</var>,<var>7</var>,<var>8</var>,<var>9</var>,<var>0</var>}
11339
<var>removed_element</var> = <i>cond</i>(<var>i</var> < <var>5</var>, <i>table</i>.<i>remove</i>(<var>mytable</var>, <var>i</var>), <i>table</i>.<i>remove</i>(<var>mytable</var>, <var>5</var>))
11340
</pre></td></tr></table>
11341
<p>will always remove two elements. With ‘<samp>i=2</samp>’ the ‘<samp>2</samp>’ will be returned
11342
but ‘<samp>mytable</samp>’ will result in ‘<samp>{1,3,4,5,7,8,9,0}</samp>’, and with ‘<samp>i=6</samp>’
11343
you get the ‘<samp>5</samp>’ but mytable will be ‘<samp>{1,2,3,4,7,8,9,0}</samp>’.
11345
<p>Another Enigma example that will cause errors is:
11346
</p><table><tr><td> </td><td><pre class="example"><var>w</var>,<var>h</var> = <i>cond</i>(<i>wo</i>["<b>IsDifficult</b>"], <i>wo</i>(<i>ti</i>, " ", <var>map1</var>), <i>wo</i>(<i>ti</i>, " ", <var>map2</var>))
11347
</pre></td></tr></table>
11348
<p>Both, the second and the third argument will be evaluated. Thus two contradicting
11349
attempts to create a new world will be made causing the second one to fail. Use
11350
the following statement instead:
11351
</p><table><tr><td> </td><td><pre class="example"><var>w</var>,<var>h</var> = <i>wo</i>(<i>ti</i>, " ", <i>cond</i>(<i>wo</i>["<b>IsDifficult</b>"], <var>map1</var>, <var>map2</var>))
11352
</pre></td></tr></table>
11353
<p>However, in most cases ‘<samp>cond</samp>’ is used anyway with static expressions for
11354
‘<samp>iftrue</samp>’ and ‘<samp>iffalse</samp>’ (e.g. strings or variables) and no side effects
11361
<a name="etype"></a>
11362
<table cellpadding="1" cellspacing="1" border="0">
11363
<tr><td valign="middle" align="left">[<a href="#cond" title="Previous section in reading order"> < </a>]</td>
11364
<td valign="middle" align="left">[<a href="#fl" title="Next section in reading order"> > </a>]</td>
11365
<td valign="middle" align="left"> </td>
11366
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
11367
<td valign="middle" align="left">[<a href="#Functions" title="Up section"> Up </a>]</td>
11368
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
11369
<td valign="middle" align="left"> </td>
11370
<td valign="middle" align="left"> </td>
11371
<td valign="middle" align="left"> </td>
11372
<td valign="middle" align="left"> </td>
11373
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
11374
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
11375
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
11376
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
11378
<a name="etype-1"></a>
11379
<h3 class="subsection">5.14.4 etype</h3>
11380
<a name="index-etype"></a>
11382
<p>The function ‘<samp>etype()</samp>’ returns the advanced type of its argument.
11384
<dl compact="compact">
11385
<dt> <b>Syntax:</b></dt>
11386
<dd><p><b>etype</b>(<i>var</i>)
11388
<dl compact="compact">
11389
<dt> <i>var</i></dt>
11390
<dd><p>Any kind of variable.
11395
<dt> <b>Syntax Samples:</b></dt>
11396
<dd><table><tr><td> </td><td><pre class="example"><var>argtype</var> = <i>etype</i>(<var>value</var>)
11397
</pre></td></tr></table>
11400
<dt> <b>Details:</b></dt>
11401
<dd><p>Lua types are <code>"nil"</code>, <code>"number"</code>, <code>"boolean"</code>, <code>"string"</code>,
11402
<code>"table"</code>, <code>"function"</code>, <code>"userdata"</code>, and <code>"thread"</code>. You
11403
can use Lua’s ‘<samp>type</samp>’-function to query the type of any variable. However,
11404
Enigma defines more types through various means, and these types can be queried
11405
via ‘<samp>etype</samp>’. ‘<samp>etype</samp>’ will return its argument’s Lua type as usual,
11406
with the following two exceptions:
11407
</p><dl compact="compact">
11408
<dt> <i>"userdata"</i></dt>
11409
<dd><p>Instead of <code>"userdata"</code>, Enigma’s special types will be returned. These
11410
special types are <code>"object"</code>, <code>"position"</code>, <code>"tile"</code>,
11411
<code>"tiles"</code>, <code>"group"</code>, <code>"world"</code>, <code>"polist"</code> and
11412
<code>"default"</code>. If an unknown userdata is encountered, <code>"unknown"</code> will
11416
<dt> <i>"table"</i></dt>
11417
<dd><p>If <code>var</code> is a table, its metatable will be queried. If there is an entry
11418
‘<samp>_type</samp>’, this entry will be used as <code>etype</code>. Most important examples
11419
of this kind are <a href="#libmap">libmap</a>-maps, <a href="#Resolvers">Resolvers</a> and <a href="#res_002emaze">res.maze</a> with its
11420
mazes and cells. So ‘<samp>etype</samp>’ will return <code>"map"</code>, <code>"resolver"</code>,
11421
<code>"maze"</code> and <code>"cell"</code>, too. You may access the <code>etype</code>-system
11422
through ‘<samp>_type</samp>’ whenever you use metatables on your own.
11431
<table cellpadding="1" cellspacing="1" border="0">
11432
<tr><td valign="middle" align="left">[<a href="#etype" title="Previous section in reading order"> < </a>]</td>
11433
<td valign="middle" align="left">[<a href="#grp" title="Next section in reading order"> > </a>]</td>
11434
<td valign="middle" align="left"> </td>
11435
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
11436
<td valign="middle" align="left">[<a href="#Functions" title="Up section"> Up </a>]</td>
11437
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
11438
<td valign="middle" align="left"> </td>
11439
<td valign="middle" align="left"> </td>
11440
<td valign="middle" align="left"> </td>
11441
<td valign="middle" align="left"> </td>
11442
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
11443
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
11444
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
11445
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
11447
<a name="fl-1"></a>
11448
<h3 class="subsection">5.14.5 fl</h3>
11449
<a name="index-fl"></a>
11451
<p>The function ‘<samp>fl()</samp>’ retrieves the floor objects for the given position or
11454
<dl compact="compact">
11455
<dt> <b>Syntax:</b></dt>
11456
<dd><p>result = <b>fl</b>(<<i>pos</i>| {<i>x</i>, <i>y</i>}|<i>x</i>, <i>y</i>| <i>obj</i> | <i>group</i>| <i>polist</i>>)
11459
<dt> <b>Details:</b></dt>
11460
<dd><p>If the argument describes a single position, the floor object at this position
11461
is returned. When this single position is outside of the world an invalid
11462
‘<samp>NULL</samp>’ <a href="#Object">Object</a> reference is returned.
11464
<p>If the argument is either a <a href="#Group">Group</a> or <a href="#PositionList">PositionList</a> all floor objects
11465
of the related positions are retrieved and added in the same sequence to a new
11466
result group. Invalid positions will be skipped without adding an object to the
11469
<p>In any case you can send messages to the result value.
11472
<dt> <b>Syntax Samples:</b></dt>
11473
<dd><table><tr><td> </td><td><pre class="example"><var>floor</var> = <i>fl</i>(<i>po</i>(<var>3</var>, <var>5</var>))
11474
<var>floor</var> = <i>fl</i>({<var>3</var>, <var>5</var>})
11475
<var>floor</var> = <i>fl</i>(<var>3</var>, <var>5</var>)
11476
<var>floor</var> = <i>fl</i>{<var>3</var>, <var>5</var>} -- by Lua syntax equivalence
11477
<var>floor</var> = <i>fl</i>(<var>mystone</var>)
11478
<var>group</var> = <i>fl</i>(<i>no</i>["door#*"])
11479
<var>group</var> = <i>fl</i>(<i>po</i>(<var>3</var>, <var>5</var>)..<i>po</i>(<var>4</var>, <var>2</var>))
11480
</pre></td></tr></table>
11487
<table cellpadding="1" cellspacing="1" border="0">
11488
<tr><td valign="middle" align="left">[<a href="#fl" title="Previous section in reading order"> < </a>]</td>
11489
<td valign="middle" align="left">[<a href="#it" title="Next section in reading order"> > </a>]</td>
11490
<td valign="middle" align="left"> </td>
11491
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
11492
<td valign="middle" align="left">[<a href="#Functions" title="Up section"> Up </a>]</td>
11493
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
11494
<td valign="middle" align="left"> </td>
11495
<td valign="middle" align="left"> </td>
11496
<td valign="middle" align="left"> </td>
11497
<td valign="middle" align="left"> </td>
11498
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
11499
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
11500
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
11501
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
11503
<a name="grp-1"></a>
11504
<h3 class="subsection">5.14.6 grp</h3>
11505
<a name="index-grp"></a>
11507
<p>The function ‘<samp>grp()</samp>’ builds a <a href="#Group">Group</a> out of its argument <a href="#Object">Object</a>s.
11509
<dl compact="compact">
11510
<dt> <b>Syntax:</b></dt>
11511
<dd><p><b>grp</b>(<{<i>obj1</i>,<i>obj2</i>,...}| <i>obj1</i>,<i>obj2</i>,... |<i>group</i>>)
11514
<dt> <b>Details:</b></dt>
11515
<dd><p>Returns a new <a href="#Group">Group</a> that is build up by the objects listed by the
11516
arguments. The contents objects must be either listed in a Lua table, given
11517
as multiple single object arguments or an existing group. In all cases the
11518
sequence of objects is maintained in the returned new group, but all invalid
11519
‘<samp>NULL</samp>’ objects are omitted. In case one object is listed multiple times
11520
just the first instance will occur in the group and subsequent instances will
11524
<dt> <b>Syntax Samples:</b></dt>
11525
<dd><table><tr><td> </td><td><pre class="example"><var>newgroup</var> = <i>grp</i>(<var>obj1</var>, <var>obj2</var>, <var>obj3</var>)
11526
<var>newgroup</var> = <i>grp</i>({<var>obj1</var>,<var>obj2</var>})
11527
<var>newgroup</var> = <i>grp</i>{<var>obj1</var>,<var>obj2</var>} -- Lua syntax equivalence
11528
<var>newgroup</var> = <i>grp</i>{} -- empty group
11529
<var>newgroup</var> = <i>grp</i>(<var>group</var>) -- a copy of group cleaned of invalid ‘<samp>NULL</samp>’ objects
11530
</pre></td></tr></table>
11537
<table cellpadding="1" cellspacing="1" border="0">
11538
<tr><td valign="middle" align="left">[<a href="#grp" title="Previous section in reading order"> < </a>]</td>
11539
<td valign="middle" align="left">[<a href="#ORI2DIR" title="Next section in reading order"> > </a>]</td>
11540
<td valign="middle" align="left"> </td>
11541
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
11542
<td valign="middle" align="left">[<a href="#Functions" title="Up section"> Up </a>]</td>
11543
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
11544
<td valign="middle" align="left"> </td>
11545
<td valign="middle" align="left"> </td>
11546
<td valign="middle" align="left"> </td>
11547
<td valign="middle" align="left"> </td>
11548
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
11549
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
11550
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
11551
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
11553
<a name="it-1"></a>
11554
<h3 class="subsection">5.14.7 it</h3>
11555
<a name="index-it"></a>
11557
<p>The function ‘<samp>it()</samp>’ retrieves the item objects for the given position or
11560
<dl compact="compact">
11561
<dt> <b>Syntax:</b></dt>
11562
<dd><p>result = <b>it</b>(<<i>pos</i>| {<i>x</i>, <i>y</i>}|<i>x</i>, <i>y</i>| <i>obj</i> | <i>group</i>| <i>polist</i>>)
11565
<dt> <b>Details:</b></dt>
11566
<dd><p>If the argument describes a single position, the item object at this position
11567
is returned. When no item is located at the given single position or this
11568
position is outside of the world an invalid ‘<samp>NULL</samp>’ <a href="#Object">Object</a> reference
11571
<p>If the argument is either a <a href="#Group">Group</a> or <a href="#PositionList">PositionList</a> all item objects
11572
of the related positions are retrieved and added in the same sequence to a new
11573
result group. Invalid positions or positions without items will be skipped
11574
without adding an object to the group.
11576
<p>In any case you can send messages to the result value.
11579
<dt> <b>Syntax Samples:</b></dt>
11580
<dd><table><tr><td> </td><td><pre class="example"><var>item</var> = <i>it</i>(<i>po</i>(<var>3</var>, <var>5</var>))
11581
<var>item</var> = <i>it</i>({<var>3</var>, <var>5</var>})
11582
<var>item</var> = <i>it</i>(<var>3</var>, <var>5</var>)
11583
<var>item</var> = <i>it</i>{<var>3</var>, <var>5</var>} -- by Lua syntax equivalence
11584
<var>item</var> = <i>it</i>(<var>mystone</var>)
11585
<var>group</var> = <i>it</i>(<i>no</i>["door#*"])
11586
<var>group</var> = <i>it</i>(<i>po</i>(<var>3</var>, <var>5</var>)..<i>po</i>(<var>4</var>, <var>2</var>))
11587
</pre></td></tr></table>
11593
<a name="ORI2DIR"></a>
11594
<table cellpadding="1" cellspacing="1" border="0">
11595
<tr><td valign="middle" align="left">[<a href="#it" title="Previous section in reading order"> < </a>]</td>
11596
<td valign="middle" align="left">[<a href="#random" title="Next section in reading order"> > </a>]</td>
11597
<td valign="middle" align="left"> </td>
11598
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
11599
<td valign="middle" align="left">[<a href="#Functions" title="Up section"> Up </a>]</td>
11600
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
11601
<td valign="middle" align="left"> </td>
11602
<td valign="middle" align="left"> </td>
11603
<td valign="middle" align="left"> </td>
11604
<td valign="middle" align="left"> </td>
11605
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
11606
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
11607
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
11608
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
11610
<a name="ORI2DIR-1"></a>
11611
<h3 class="subsection">5.14.8 ORI2DIR</h3>
11613
<p>The table ‘<samp>ORI2DIR[]</samp>’ converts orientation values to direction values.
11615
<dl compact="compact">
11616
<dt> <b>Syntax:</b></dt>
11617
<dd><p>result = <b>ORI2DIR</b>[<var>orientation</var>]
11620
<dt> <b>Details:</b></dt>
11621
<dd><p>The table has stored the proper directions values at the index positions of
11622
the related orientations.
11625
<dt> <b>Syntax Samples:</b></dt>
11626
<dd><table><tr><td> </td><td><pre class="example"><var>direction</var> = <i>ORI2DIR</i>[NORTH] -- N = po(0, -1)
11627
<var>direction</var> = <i>ORI2DIR</i>[SOUTHEAST] -- SE = po(1, 1)
11628
<var>direction</var> = <i>ORI2DIR</i>[NODIR] -- po(0, 0)
11629
</pre></td></tr></table>
11634
<a name="random"></a>
11635
<table cellpadding="1" cellspacing="1" border="0">
11636
<tr><td valign="middle" align="left">[<a href="#ORI2DIR" title="Previous section in reading order"> < </a>]</td>
11637
<td valign="middle" align="left">[<a href="#st" title="Next section in reading order"> > </a>]</td>
11638
<td valign="middle" align="left"> </td>
11639
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
11640
<td valign="middle" align="left">[<a href="#Functions" title="Up section"> Up </a>]</td>
11641
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
11642
<td valign="middle" align="left"> </td>
11643
<td valign="middle" align="left"> </td>
11644
<td valign="middle" align="left"> </td>
11645
<td valign="middle" align="left"> </td>
11646
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
11647
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
11648
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
11649
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
11651
<a name="random-1"></a>
11652
<h3 class="subsection">5.14.9 random</h3>
11653
<a name="index-random"></a>
11655
<p>The function ‘<samp>random()</samp>’ is a syntax compatible replacement for the standard
11656
Lua function ‘<samp>math.random()</samp>’. Both names refer to the same Enigma random
11659
<dl compact="compact">
11660
<dt> <b>Syntax:</b></dt>
11661
<dd><p>result = <b>random</b>(<|<var>n</var>|<var>l</var>,<var>u</var>>)
11664
<dt> <b>Details:</b></dt>
11665
<dd><p>When called without arguments, math.random returns a pseudo-random real number
11666
in the range [0,1). When called with a number n, math.random returns a
11667
pseudo-random integer in the range [1,n]. When called with two arguments, l and
11668
u, math.random returns a pseudo-random integer in the range [l,u].
11670
<p>The only difference from the Lua implementation is the random generator itself.
11671
Enigma uses an own implementation that guarantees the same pseudo-random
11672
number sequence on any operating system and any processor for a given seed.
11673
This feature will be important for future Enigma versions and thus the
11674
randomseed can not be modified by the level itself.
11677
<dt> <b>Syntax Samples:</b></dt>
11678
<dd><table><tr><td> </td><td><pre class="example"><var>float</var> = <i>random</i>() -- e.g. 0.402834
11679
<var>integer</var> = <i>random</i>(20) -- e.g. 13
11680
<var>integer</var> = <i>random</i>(5, 10) -- e.g. 5
11681
</pre></td></tr></table>
11687
<table cellpadding="1" cellspacing="1" border="0">
11688
<tr><td valign="middle" align="left">[<a href="#random" title="Previous section in reading order"> < </a>]</td>
11689
<td valign="middle" align="left">[<a href="#usertype" title="Next section in reading order"> > </a>]</td>
11690
<td valign="middle" align="left"> </td>
11691
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
11692
<td valign="middle" align="left">[<a href="#Functions" title="Up section"> Up </a>]</td>
11693
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
11694
<td valign="middle" align="left"> </td>
11695
<td valign="middle" align="left"> </td>
11696
<td valign="middle" align="left"> </td>
11697
<td valign="middle" align="left"> </td>
11698
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
11699
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
11700
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
11701
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
11703
<a name="st-1"></a>
11704
<h3 class="subsection">5.14.10 st</h3>
11705
<a name="index-st"></a>
11707
<p>The function ‘<samp>st()</samp>’ retrieves the stone objects for the given position or
11710
<dl compact="compact">
11711
<dt> <b>Syntax:</b></dt>
11712
<dd><p>result = <b>st</b>(<<i>pos</i>| {<i>x</i>, <i>y</i>}|<i>x</i>, <i>y</i>| <i>obj</i> | <i>group</i>| <i>polist</i>>)
11715
<dt> <b>Details:</b></dt>
11716
<dd><p>If the argument describes a single position, the stone object at this position
11717
is returned. When no stone is located at the given single position or this
11718
position is outside of the world an invalid ‘<samp>NULL</samp>’ <a href="#Object">Object</a> reference
11721
<p>If the argument is either a <a href="#Group">Group</a> or <a href="#PositionList">PositionList</a> all stone objects
11722
of the related positions are retrieved and added in the same sequence to a new
11723
result group. Invalid positions or positions without stone will be skipped
11724
without adding an object to the group.
11726
<p>In any case you can send messages to the result value.
11729
<dt> <b>Syntax Samples:</b></dt>
11730
<dd><table><tr><td> </td><td><pre class="example"><var>stone</var> = <i>st</i>(<i>po</i>(<var>3</var>, <var>5</var>))
11731
<var>stone</var> = <i>st</i>({<var>3</var>, <var>5</var>})
11732
<var>stone</var> = <i>st</i>(<var>3</var>, <var>5</var>)
11733
<var>stone</var> = <i>st</i>{<var>3</var>, <var>5</var>} -- by Lua syntax equivalence
11734
<var>stone</var> = <i>st</i>(<var>myfloor</var>)
11735
<var>group</var> = <i>st</i>(<i>no</i>["cherry#*"])
11736
<var>group</var> = <i>st</i>(<i>po</i>(<var>3</var>, <var>5</var>)..<i>po</i>(<var>4</var>, <var>2</var>))
11737
</pre></td></tr></table>
11743
<a name="usertype"></a>
11744
<table cellpadding="1" cellspacing="1" border="0">
11745
<tr><td valign="middle" align="left">[<a href="#st" title="Previous section in reading order"> < </a>]</td>
11746
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next section in reading order"> > </a>]</td>
11747
<td valign="middle" align="left"> </td>
11748
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
11749
<td valign="middle" align="left">[<a href="#Functions" title="Up section"> Up </a>]</td>
11750
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Next chapter"> >> </a>]</td>
11751
<td valign="middle" align="left"> </td>
11752
<td valign="middle" align="left"> </td>
11753
<td valign="middle" align="left"> </td>
11754
<td valign="middle" align="left"> </td>
11755
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
11756
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
11757
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
11758
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
11760
<a name="usertype-1"></a>
11761
<h3 class="subsection">5.14.11 usertype</h3>
11762
<a name="index-usertype"></a>
11764
<p>The function ‘<samp>usertype()</samp>’ returns type info for Enigma data types.
11766
<dl compact="compact">
11767
<dt> <b>Syntax:</b></dt>
11768
<dd><p><b>usertype</b>(<i>var</i>)
11770
<dl compact="compact">
11771
<dt> <i>var</i></dt>
11772
<dd><p>Any kind of variable.
11777
<dt> <b>Syntax Samples:</b></dt>
11778
<dd><table><tr><td> </td><td><pre class="example"><var>argtype</var> = <i>usertype</i>(<var>value</var>)
11779
</pre></td></tr></table>
11782
<dt> <b>Details:</b></dt>
11783
<dd><p>Just for Lua type <code>"userdata"</code> Enigma’s special type info will be returned.
11784
These special types are <code>"object"</code>, <code>"position"</code>, <code>"tile"</code>,
11785
<code>"tiles"</code>, <code>"group"</code>, <code>"world"</code>, <code>"polist"</code> and
11786
<code>"default"</code>. If another data type is encountered, <code>"unknown"</code> will
11789
<p>The function <a href="#etype">etype</a> provides a more general type evaluation for arbitrary
11790
data types and is partially based on this function.
11797
<a name="Common-Attributes-and-Messages"></a>
11798
<table cellpadding="1" cellspacing="1" border="0">
11799
<tr><td valign="middle" align="left">[<a href="#usertype" title="Previous section in reading order"> < </a>]</td>
11800
<td valign="middle" align="left">[<a href="#Common-Attributes" title="Next section in reading order"> > </a>]</td>
11801
<td valign="middle" align="left"> </td>
11802
<td valign="middle" align="left">[<a href="#Lua-API" title="Beginning of this chapter or previous chapter"> << </a>]</td>
11803
<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up </a>]</td>
11804
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
11805
<td valign="middle" align="left"> </td>
11806
<td valign="middle" align="left"> </td>
11807
<td valign="middle" align="left"> </td>
11808
<td valign="middle" align="left"> </td>
11809
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
11810
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
11811
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
11812
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
11814
<a name="Common-Attributes-and-Messages-1"></a>
11815
<h1 class="chapter">6. Common Attributes and Messages</h1>
11817
<p>Some attributes, messages and constants are common to many objects or even
11818
supported by all objects. We describe them here in detail. The following
11819
chapters will just reference them or even skip them when they are generally
11820
supported and used in the default manner.
11822
<table class="menu" border="0" cellspacing="0">
11823
<tr><td align="left" valign="top"><a href="#Common-Attributes">6.1 Common Attributes</a></td><td> </td><td align="left" valign="top">
11825
<tr><td align="left" valign="top"><a href="#Common-Messages">6.2 Common Messages</a></td><td> </td><td align="left" valign="top">
11827
<tr><td align="left" valign="top"><a href="#Common-Constants">6.3 Common Constants</a></td><td> </td><td align="left" valign="top">
11829
<tr><td align="left" valign="top"><a href="#Global-Attributes">6.4 Global Attributes</a></td><td> </td><td align="left" valign="top">
11834
<a name="Common-Attributes"></a>
11835
<table cellpadding="1" cellspacing="1" border="0">
11836
<tr><td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Previous section in reading order"> < </a>]</td>
11837
<td valign="middle" align="left">[<a href="#name" title="Next section in reading order"> > </a>]</td>
11838
<td valign="middle" align="left"> </td>
11839
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
11840
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Up section"> Up </a>]</td>
11841
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
11842
<td valign="middle" align="left"> </td>
11843
<td valign="middle" align="left"> </td>
11844
<td valign="middle" align="left"> </td>
11845
<td valign="middle" align="left"> </td>
11846
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
11847
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
11848
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
11849
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
11851
<a name="Common-Attributes-1"></a>
11852
<h2 class="section">6.1 Common Attributes</h2>
11854
<table class="menu" border="0" cellspacing="0">
11855
<tr><td align="left" valign="top"><a href="#name">6.1.1 name</a></td><td> </td><td align="left" valign="top">
11857
<tr><td align="left" valign="top"><a href="#state">6.1.2 state</a></td><td> </td><td align="left" valign="top">
11859
<tr><td align="left" valign="top"><a href="#target">6.1.3 target</a></td><td> </td><td align="left" valign="top">
11861
<tr><td align="left" valign="top"><a href="#action">6.1.4 action</a></td><td> </td><td align="left" valign="top">
11863
<tr><td align="left" valign="top"><a href="#nopaction">6.1.5 nopaction</a></td><td> </td><td align="left" valign="top">
11865
<tr><td align="left" valign="top"><a href="#safeaction">6.1.6 safeaction</a></td><td> </td><td align="left" valign="top">
11867
<tr><td align="left" valign="top"><a href="#inverse">6.1.7 inverse</a></td><td> </td><td align="left" valign="top">
11869
<tr><td align="left" valign="top"><a href="#destination">6.1.8 destination</a></td><td> </td><td align="left" valign="top">
11871
<tr><td align="left" valign="top"><a href="#friction">6.1.9 friction</a></td><td> </td><td align="left" valign="top">
11873
<tr><td align="left" valign="top"><a href="#adhesion">6.1.10 adhesion</a></td><td> </td><td align="left" valign="top">
11875
<tr><td align="left" valign="top"><a href="#checkerboard">6.1.11 checkerboard</a></td><td> </td><td align="left" valign="top">
11877
<tr><td align="left" valign="top"><a href="#rubbers">6.1.12 rubbers</a></td><td> </td><td align="left" valign="top">
11879
<tr><td align="left" valign="top"><a href="#wires">6.1.13 wires</a></td><td> </td><td align="left" valign="top">
11881
<tr><td align="left" valign="top"><a href="#fellows">6.1.14 fellows</a></td><td> </td><td align="left" valign="top">
11886
<a name="name"></a>
11887
<table cellpadding="1" cellspacing="1" border="0">
11888
<tr><td valign="middle" align="left">[<a href="#Common-Attributes" title="Previous section in reading order"> < </a>]</td>
11889
<td valign="middle" align="left">[<a href="#state" title="Next section in reading order"> > </a>]</td>
11890
<td valign="middle" align="left"> </td>
11891
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
11892
<td valign="middle" align="left">[<a href="#Common-Attributes" title="Up section"> Up </a>]</td>
11893
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
11894
<td valign="middle" align="left"> </td>
11895
<td valign="middle" align="left"> </td>
11896
<td valign="middle" align="left"> </td>
11897
<td valign="middle" align="left"> </td>
11898
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
11899
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
11900
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
11901
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
11903
<a name="name-1"></a>
11904
<h3 class="subsection">6.1.1 name</h3>
11906
<p>The attribute of <a href="#Object-Naming">Object Naming</a> that allows you to name any object for
11907
reference purposes. It is up to you to ensure the uniqueness of the names. But
11908
the engine supports you by autonumbering names ending on a ‘<samp>#</samp>’ sign
11909
(see section <a href="#Object-Naming">Object Naming</a>). If you reuse an already used name the first object will
11910
be unnamed and all name references will point to the new named object. If you
11911
have need of naming an object you should do it with the object creation as
11912
a few objects have need of names and will otherwise be named by the engine with
11915
<p>Note that this attribute is not listed in the individual object descriptions.
11917
<dl compact="compact">
11918
<dt> <b>Type:</b> string</dt>
11919
<dt> <b>Values:</b> {a-zA-Z0-9_}+</dt>
11920
<dd><p>A sequence of characters of the given characters plus special characters as
11921
mentioned in the text above.
11923
<dt> <b>Default:</b> <code>nil</code></dt>
11924
<dd><p>Some objects will be autonamed if no name is defined.
11926
<dt> <b>Access:</b> read/write</dt>
11927
<dt> <b>Support:</b> by all objects</dt>
11931
<a name="state"></a>
11932
<table cellpadding="1" cellspacing="1" border="0">
11933
<tr><td valign="middle" align="left">[<a href="#name" title="Previous section in reading order"> < </a>]</td>
11934
<td valign="middle" align="left">[<a href="#target" title="Next section in reading order"> > </a>]</td>
11935
<td valign="middle" align="left"> </td>
11936
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
11937
<td valign="middle" align="left">[<a href="#Common-Attributes" title="Up section"> Up </a>]</td>
11938
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
11939
<td valign="middle" align="left"> </td>
11940
<td valign="middle" align="left"> </td>
11941
<td valign="middle" align="left"> </td>
11942
<td valign="middle" align="left"> </td>
11943
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
11944
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
11945
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
11946
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
11948
<a name="state-1"></a>
11949
<h3 class="subsection">6.1.2 state</h3>
11951
<p>The central attribute of any object that describes the current state of an
11952
object in its standard life cycle. This <a href="#Object-State">Object State</a> is described by
11953
a simple number. Most dynamic objects have just 2 states. Others may have more.
11954
The available states are listed with each object. This universal attribute
11955
allows common messages like <a href="#toggle">toggle</a>, <a href="#signal">signal</a>, <a href="#on">on</a>, <a href="#off">off</a>,
11956
<a href="#open">open</a>, <a href="#close">close</a>.
11958
<dl compact="compact">
11959
<dt> <b>Type:</b> number</dt>
11960
<dt> <b>Values:</b> dependent on the individual object</dt>
11961
<dd><p>Please use the given upper case constants.
11963
<dt> <b>Default:</b> <code>0</code></dt>
11964
<dt> <b>Access:</b> read/sometimes write</dt>
11965
<dd><p>While it is common to set the state attribute on object creation, it is
11966
preferable to change the object state later on by messages.
11968
<dt> <b>Support:</b> by all objects</dt>
11972
<a name="target"></a>
11973
<table cellpadding="1" cellspacing="1" border="0">
11974
<tr><td valign="middle" align="left">[<a href="#state" title="Previous section in reading order"> < </a>]</td>
11975
<td valign="middle" align="left">[<a href="#action" title="Next section in reading order"> > </a>]</td>
11976
<td valign="middle" align="left"> </td>
11977
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
11978
<td valign="middle" align="left">[<a href="#Common-Attributes" title="Up section"> Up </a>]</td>
11979
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
11980
<td valign="middle" align="left"> </td>
11981
<td valign="middle" align="left"> </td>
11982
<td valign="middle" align="left"> </td>
11983
<td valign="middle" align="left"> </td>
11984
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
11985
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
11986
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
11987
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
11989
<a name="target-1"></a>
11990
<h3 class="subsection">6.1.3 target</h3>
11992
<p>All active objects react on being triggered by performing an action on their
11993
targets. This attribute is part of the <a href="#Target-_002d-Action">Target - Action</a> paradigm that
11994
guarantees plugability of objects. You can either set a general ‘<samp>target</samp>’
11995
attribute for an object, or you can set <a href="#state">state</a> dependent attributes
11996
‘<samp>target_0</samp>’, ‘<samp>target_1</samp>’,... (see section <a href="#Object-State">Object State</a>). They all have the
11999
<dl compact="compact">
12000
<dt> <b>Type:</b> string, object, group, tokens See section <a href="#Object-Description">Object Description</a></dt>
12001
<dd><p>Single targets may be declared by their object name or their reference. Multiple
12002
targets can be declared by usage of groups and tokens.
12004
<dt> <b>Values:</b> See section <a href="#Object-Attributes">Object Attributes</a></dt>
12005
<dd><table><tr><td> </td><td><pre class="example">target = "myDoor"
12007
target = {"myDoor", myObject}
12008
target = {grp(obj1, obj2), "myDoor", myObject}
12009
</pre></td></tr></table>
12012
<dt> <b>Default:</b> <code>nil</code></dt>
12013
<dt> <b>Access:</b> read/write</dt>
12014
<dt> <b>Support:</b> by all objects</dt>
12018
<a name="action"></a>
12019
<table cellpadding="1" cellspacing="1" border="0">
12020
<tr><td valign="middle" align="left">[<a href="#target" title="Previous section in reading order"> < </a>]</td>
12021
<td valign="middle" align="left">[<a href="#nopaction" title="Next section in reading order"> > </a>]</td>
12022
<td valign="middle" align="left"> </td>
12023
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
12024
<td valign="middle" align="left">[<a href="#Common-Attributes" title="Up section"> Up </a>]</td>
12025
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
12026
<td valign="middle" align="left"> </td>
12027
<td valign="middle" align="left"> </td>
12028
<td valign="middle" align="left"> </td>
12029
<td valign="middle" align="left"> </td>
12030
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
12031
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
12032
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
12033
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
12035
<a name="action-1"></a>
12036
<h3 class="subsection">6.1.4 action</h3>
12038
<p>All active objects react on being triggered by performing an action on their
12039
targets. This attribute is part of the <a href="#Target-_002d-Action">Target - Action</a> paradigm that
12040
guarantees plugability of objects. You can either set a general ‘<samp>action</samp>’
12041
attribute for an object, or you can set <a href="#state">state</a> dependent attributes
12042
‘<samp>action_0</samp>’, ‘<samp>action_1</samp>’,... (see section <a href="#Object-State">Object State</a>). They all have the
12045
<dl compact="compact">
12046
<dt> <b>Type:</b> string, tokens of strings See section <a href="#Target-_002d-Action">Target - Action</a></dt>
12047
<dd><p>A single action may be declared by its message string. Multiple actions that
12048
match multiple targets can be declared by tokens of strings.
12050
<dt> <b>Values:</b> See section <a href="#Object-Attributes">Object Attributes</a></dt>
12051
<dd><table><tr><td> </td><td><pre class="example">action = "open"
12052
action = {"open", "turn", "toggle"}
12053
</pre></td></tr></table>
12056
<dt> <b>Default:</b> <code>nil</code></dt>
12057
<dt> <b>Access:</b> read/write</dt>
12058
<dt> <b>Support:</b> by all objects</dt>
12062
<a name="nopaction"></a>
12063
<table cellpadding="1" cellspacing="1" border="0">
12064
<tr><td valign="middle" align="left">[<a href="#action" title="Previous section in reading order"> < </a>]</td>
12065
<td valign="middle" align="left">[<a href="#safeaction" title="Next section in reading order"> > </a>]</td>
12066
<td valign="middle" align="left"> </td>
12067
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
12068
<td valign="middle" align="left">[<a href="#Common-Attributes" title="Up section"> Up </a>]</td>
12069
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
12070
<td valign="middle" align="left"> </td>
12071
<td valign="middle" align="left"> </td>
12072
<td valign="middle" align="left"> </td>
12073
<td valign="middle" align="left"> </td>
12074
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
12075
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
12076
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
12077
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
12079
<a name="nopaction-1"></a>
12080
<h3 class="subsection">6.1.5 nopaction</h3>
12082
<p>A very special addition to the <a href="#Target-_002d-Action">Target - Action</a> paradigm that allows
12083
in case of state specific actions to deny the sending of default messages
12084
(see section <a href="#Object-State">Object State</a>).
12086
<dl compact="compact">
12087
<dt> <b>Type:</b> bool</dt>
12088
<dt> <b>Values:</b> <code>true</code>, <code>false</code></dt>
12089
<dt> <b>Default:</b> <code>false</code></dt>
12090
<dt> <b>Access:</b> read/write</dt>
12091
<dt> <b>Support:</b> by all objects</dt>
12095
<a name="safeaction"></a>
12096
<table cellpadding="1" cellspacing="1" border="0">
12097
<tr><td valign="middle" align="left">[<a href="#nopaction" title="Previous section in reading order"> < </a>]</td>
12098
<td valign="middle" align="left">[<a href="#inverse" title="Next section in reading order"> > </a>]</td>
12099
<td valign="middle" align="left"> </td>
12100
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
12101
<td valign="middle" align="left">[<a href="#Common-Attributes" title="Up section"> Up </a>]</td>
12102
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
12103
<td valign="middle" align="left"> </td>
12104
<td valign="middle" align="left"> </td>
12105
<td valign="middle" align="left"> </td>
12106
<td valign="middle" align="left"> </td>
12107
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
12108
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
12109
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
12110
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
12112
<a name="safeaction-1"></a>
12113
<h3 class="subsection">6.1.6 safeaction</h3>
12115
<p>A very special addition to the <a href="#Target-_002d-Action">Target - Action</a> paradigm that allows
12116
to kill the sender within the execution of the action code.
12118
<dl compact="compact">
12119
<dt> <b>Type:</b> bool</dt>
12120
<dt> <b>Values:</b> <code>true</code>, <code>false</code></dt>
12121
<dt> <b>Default:</b> <code>false</code></dt>
12122
<dt> <b>Access:</b> read/write</dt>
12123
<dt> <b>Support:</b> by all objects</dt>
12127
<a name="inverse"></a>
12128
<table cellpadding="1" cellspacing="1" border="0">
12129
<tr><td valign="middle" align="left">[<a href="#safeaction" title="Previous section in reading order"> < </a>]</td>
12130
<td valign="middle" align="left">[<a href="#destination" title="Next section in reading order"> > </a>]</td>
12131
<td valign="middle" align="left"> </td>
12132
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
12133
<td valign="middle" align="left">[<a href="#Common-Attributes" title="Up section"> Up </a>]</td>
12134
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
12135
<td valign="middle" align="left"> </td>
12136
<td valign="middle" align="left"> </td>
12137
<td valign="middle" align="left"> </td>
12138
<td valign="middle" align="left"> </td>
12139
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
12140
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
12141
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
12142
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
12144
<a name="inverse-1"></a>
12145
<h3 class="subsection">6.1.7 inverse</h3>
12147
<p>An attribute that requests an inversion of the action value. It is supported by
12148
all objects with boolean action values.
12150
<p>Note that this attribute is not listed in the individual object description
12151
if the object has boolean action values.
12153
<dl compact="compact">
12154
<dt> <b>Type:</b> bool</dt>
12155
<dt> <b>Values:</b> <code>true</code>, <code>false</code></dt>
12156
<dt> <b>Default:</b> <code>false</code></dt>
12157
<dt> <b>Access:</b> read/write</dt>
12158
<dt> <b>Support:</b> by most objects</dt>
12159
<dd><p>All objects with boolean action values will support this attribute. Additionally
12160
some objects with other invertible action value types like orientations will
12161
support the inversion of their attributes as stated in the individual object
12167
<a name="destination"></a>
12168
<table cellpadding="1" cellspacing="1" border="0">
12169
<tr><td valign="middle" align="left">[<a href="#inverse" title="Previous section in reading order"> < </a>]</td>
12170
<td valign="middle" align="left">[<a href="#friction" title="Next section in reading order"> > </a>]</td>
12171
<td valign="middle" align="left"> </td>
12172
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
12173
<td valign="middle" align="left">[<a href="#Common-Attributes" title="Up section"> Up </a>]</td>
12174
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
12175
<td valign="middle" align="left"> </td>
12176
<td valign="middle" align="left"> </td>
12177
<td valign="middle" align="left"> </td>
12178
<td valign="middle" align="left"> </td>
12179
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
12180
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
12181
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
12182
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
12184
<a name="destination-1"></a>
12185
<h3 class="subsection">6.1.8 destination</h3>
12187
<p>An attribute that describes one or several destinations. It is used by objects
12188
like <a href="#it_005fvortex">it_vortex</a> and <a href="#it_005fwormhole">it_wormhole</a> to describe their teleporting
12189
destination and by <a href="#ac_005fhorse">ac_horse</a> to describe its traveling path.
12191
<p>Note that this attribute is only supported if it is listed in the individual
12194
<dl compact="compact">
12195
<dt> <b>Type:</b> tokens or a single position</dt>
12196
<dd><p>Just a single position for a first destination is allowed. Use tokens to
12197
define multiple destination.
12199
<dt> <b>Values:</b> See section <a href="#Object-Attributes">Object Attributes</a></dt>
12200
<dd><table><tr><td> </td><td><pre class="example">destination = po(3.0, 4.7)
12201
destination = "myFloor"
12202
destination = myObject
12203
destination = {"vortex2","vortex3","vortex4"}
12204
po["dest1"] = po(3,4)
12205
po["dest2"] = po(7,8)
12206
destination = {"dest1","dest2","myFloor"}
12207
</pre></td></tr></table>
12208
<p>Note that objects like ‘<samp>it_wormhole</samp>’ that have just a single destination
12209
do take the first token object. Note that in contrast to <a href="#target">target</a> tokens a
12210
destination tokens argument can take named positions, too. Referencing floors
12211
that may be destructed by bombs, cracks, floor building stones, etc. are save
12214
<dt> <b>Default:</b> <code>nil</code></dt>
12215
<dt> <b>Access:</b> read/write</dt>
12216
<dt> <b>Support:</b> by teleporting objects</dt>
12220
<a name="friction"></a>
12221
<table cellpadding="1" cellspacing="1" border="0">
12222
<tr><td valign="middle" align="left">[<a href="#destination" title="Previous section in reading order"> < </a>]</td>
12223
<td valign="middle" align="left">[<a href="#adhesion" title="Next section in reading order"> > </a>]</td>
12224
<td valign="middle" align="left"> </td>
12225
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
12226
<td valign="middle" align="left">[<a href="#Common-Attributes" title="Up section"> Up </a>]</td>
12227
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
12228
<td valign="middle" align="left"> </td>
12229
<td valign="middle" align="left"> </td>
12230
<td valign="middle" align="left"> </td>
12231
<td valign="middle" align="left"> </td>
12232
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
12233
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
12234
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
12235
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
12237
<a name="friction-1"></a>
12238
<h3 class="subsection">6.1.9 friction</h3>
12240
<p>An attribute that describes the decelerating friction force on actors that are
12241
on the floor. The friction force increases with the speed of the actor and
12242
is decelerating for positive friction values. But friction can be set to
12243
negative values as well what generates an accelerating force that is very
12244
difficult to control for the player.
12246
<p>Besides all floors some floor covering items like <a href="#it_005fstrip">it_strip</a>,
12247
<a href="#it_005fmeditation">it_meditation</a> may provide friction values as well to deviate from the
12250
<dl compact="compact">
12251
<dt> <b>Type:</b> number</dt>
12252
<dt> <b>Values:</b> any floating point number</dt>
12253
<dt> <b>Default:</b> <code>nil</code></dt>
12254
<dt> <b>Access:</b> read/write</dt>
12255
<dt> <b>Support:</b> by all floor, and floor covering item objects</dt>
12259
<a name="adhesion"></a>
12260
<table cellpadding="1" cellspacing="1" border="0">
12261
<tr><td valign="middle" align="left">[<a href="#friction" title="Previous section in reading order"> < </a>]</td>
12262
<td valign="middle" align="left">[<a href="#checkerboard" title="Next section in reading order"> > </a>]</td>
12263
<td valign="middle" align="left"> </td>
12264
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
12265
<td valign="middle" align="left">[<a href="#Common-Attributes" title="Up section"> Up </a>]</td>
12266
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
12267
<td valign="middle" align="left"> </td>
12268
<td valign="middle" align="left"> </td>
12269
<td valign="middle" align="left"> </td>
12270
<td valign="middle" align="left"> </td>
12271
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
12272
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
12273
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
12274
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
12276
<a name="adhesion-1"></a>
12277
<h3 class="subsection">6.1.10 adhesion</h3>
12279
<p>An attribute that describes the adhesion that allows an actor to accelerate on
12280
a floor. Greater adhesion leads to more accelerating force at the same given
12281
mouse speed. Adhesion can be set to negative values as well what generates an
12282
accelerating force in the inverse direction of the mouse movement which is a
12283
little bit difficult to control for the player.
12285
<p>Besides all floors some floor covering items like <a href="#it_005fstrip">it_strip</a>,
12286
<a href="#it_005fmeditation">it_meditation</a> may provide adhesion values as well to deviate from
12287
the floor adhesion.
12289
<dl compact="compact">
12290
<dt> <b>Type:</b> number</dt>
12291
<dt> <b>Values:</b> any floating point number</dt>
12292
<dt> <b>Default:</b> <code>nil</code></dt>
12293
<dt> <b>Access:</b> read/write</dt>
12294
<dt> <b>Support:</b> by all floors, and floor covering item objects</dt>
12298
<a name="checkerboard"></a>
12299
<table cellpadding="1" cellspacing="1" border="0">
12300
<tr><td valign="middle" align="left">[<a href="#adhesion" title="Previous section in reading order"> < </a>]</td>
12301
<td valign="middle" align="left">[<a href="#rubbers" title="Next section in reading order"> > </a>]</td>
12302
<td valign="middle" align="left"> </td>
12303
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
12304
<td valign="middle" align="left">[<a href="#Common-Attributes" title="Up section"> Up </a>]</td>
12305
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
12306
<td valign="middle" align="left"> </td>
12307
<td valign="middle" align="left"> </td>
12308
<td valign="middle" align="left"> </td>
12309
<td valign="middle" align="left"> </td>
12310
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
12311
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
12312
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
12313
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
12315
<a name="checkerboard-1"></a>
12316
<h3 class="subsection">6.1.11 checkerboard</h3>
12318
<p>An attribute that defines if a given object declaration should only be applied
12319
on ’even’ or ’uneven’ grid positions. Setting this attribute to ‘<samp>0</samp>’ assures
12320
that this object will only be set on grid positions with an even sum of
12321
<code>x + y</code> grid coordinates, where as a value of ‘<samp>1</samp>’ assures that the
12322
sum must be uneven. This way you can easily provide two different object
12323
declarations for a tile to generate an arbitrarily shaped map of checkerboard
12324
floors, items or stones.
12326
<dl compact="compact">
12327
<dt> <b>Type:</b> number</dt>
12328
<dt> <b>Values:</b> <code>0</code>, <code>1</code></dt>
12329
<dt> <b>Default:</b> <code>nil</code></dt>
12330
<dt> <b>Access:</b> read/write</dt>
12331
<dt> <b>Support:</b> by all floor, stone and item objects</dt>
12332
<dd><table><tr><td> </td><td><pre class="example">ti["c"] = ti({"fl_sahara", checkerboard=0}) .. {"fl_tigris", checkerboard=1}
12333
</pre></td></tr></table>
12338
<a name="rubbers"></a>
12339
<table cellpadding="1" cellspacing="1" border="0">
12340
<tr><td valign="middle" align="left">[<a href="#checkerboard" title="Previous section in reading order"> < </a>]</td>
12341
<td valign="middle" align="left">[<a href="#wires" title="Next section in reading order"> > </a>]</td>
12342
<td valign="middle" align="left"> </td>
12343
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
12344
<td valign="middle" align="left">[<a href="#Common-Attributes" title="Up section"> Up </a>]</td>
12345
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
12346
<td valign="middle" align="left"> </td>
12347
<td valign="middle" align="left"> </td>
12348
<td valign="middle" align="left"> </td>
12349
<td valign="middle" align="left"> </td>
12350
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
12351
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
12352
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
12353
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
12355
<a name="rubbers-1"></a>
12356
<h3 class="subsection">6.1.12 rubbers</h3>
12358
<p>An attribute that gives you access to the <a href="#ot_005frubberband">ot_rubberband</a>s that are
12359
currently connected to this object.
12361
<p>Note that this attribute is read only. You can use the rubberband references
12362
to kill or reconnect single rubberbands. But to add new rubberbands you need
12363
to use the world’s ‘<samp>add</samp>’ method.
12365
<dl compact="compact">
12366
<dt> <b>Type:</b> group of <a href="#ot_005frubberband">ot_rubberband</a> objects</dt>
12367
<dt> <b>Default:</b> <code>nil</code></dt>
12368
<dt> <b>Access:</b> read only</dt>
12369
<dt> <b>Support:</b> by actor and stone objects</dt>
12373
<a name="wires"></a>
12374
<table cellpadding="1" cellspacing="1" border="0">
12375
<tr><td valign="middle" align="left">[<a href="#rubbers" title="Previous section in reading order"> < </a>]</td>
12376
<td valign="middle" align="left">[<a href="#fellows" title="Next section in reading order"> > </a>]</td>
12377
<td valign="middle" align="left"> </td>
12378
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
12379
<td valign="middle" align="left">[<a href="#Common-Attributes" title="Up section"> Up </a>]</td>
12380
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
12381
<td valign="middle" align="left"> </td>
12382
<td valign="middle" align="left"> </td>
12383
<td valign="middle" align="left"> </td>
12384
<td valign="middle" align="left"> </td>
12385
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
12386
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
12387
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
12388
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
12390
<a name="wires-1"></a>
12391
<h3 class="subsection">6.1.13 wires</h3>
12393
<p>An attribute that gives you access to the <a href="#ot_005fwire">ot_wire</a>s that are
12394
currently connected to this stone object.
12396
<p>Note that this attribute is read only. You can use the wire references
12397
to kill or reconnect single wires. But to add new wires you need
12398
to use the world’s ‘<samp>add</samp>’ method.
12400
<dl compact="compact">
12401
<dt> <b>Type:</b> group of <a href="#ot_005fwire">ot_wire</a> objects</dt>
12402
<dt> <b>Default:</b> <code>nil</code></dt>
12403
<dt> <b>Access:</b> read only</dt>
12404
<dt> <b>Support:</b> by all stone objects</dt>
12408
<a name="fellows"></a>
12409
<table cellpadding="1" cellspacing="1" border="0">
12410
<tr><td valign="middle" align="left">[<a href="#wires" title="Previous section in reading order"> < </a>]</td>
12411
<td valign="middle" align="left">[<a href="#Common-Messages" title="Next section in reading order"> > </a>]</td>
12412
<td valign="middle" align="left"> </td>
12413
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
12414
<td valign="middle" align="left">[<a href="#Common-Attributes" title="Up section"> Up </a>]</td>
12415
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
12416
<td valign="middle" align="left"> </td>
12417
<td valign="middle" align="left"> </td>
12418
<td valign="middle" align="left"> </td>
12419
<td valign="middle" align="left"> </td>
12420
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
12421
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
12422
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
12423
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
12425
<a name="fellows-1"></a>
12426
<h3 class="subsection">6.1.14 fellows</h3>
12428
<p>An attribute that gives you access to the group of all objects that are currently
12429
connected either by an <a href="#ot_005frubberband">ot_rubberband</a> or an <a href="#ot_005fwire">ot_wire</a>.
12431
<p>Note that this attribute is read only. It is just for evaluation of the current
12432
level state. But to add new rubberbands or wires you need to use the
12433
world’s ‘<samp>add</samp>’ method.
12435
<dl compact="compact">
12436
<dt> <b>Type:</b> group of objects</dt>
12437
<dt> <b>Default:</b> <code>nil</code></dt>
12438
<dt> <b>Access:</b> read only</dt>
12439
<dt> <b>Support:</b> by actor and stone objects</dt>
12443
<a name="Common-Messages"></a>
12444
<table cellpadding="1" cellspacing="1" border="0">
12445
<tr><td valign="middle" align="left">[<a href="#fellows" title="Previous section in reading order"> < </a>]</td>
12446
<td valign="middle" align="left">[<a href="#toggle" title="Next section in reading order"> > </a>]</td>
12447
<td valign="middle" align="left"> </td>
12448
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
12449
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Up section"> Up </a>]</td>
12450
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
12451
<td valign="middle" align="left"> </td>
12452
<td valign="middle" align="left"> </td>
12453
<td valign="middle" align="left"> </td>
12454
<td valign="middle" align="left"> </td>
12455
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
12456
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
12457
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
12458
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
12460
<a name="Common-Messages-1"></a>
12461
<h2 class="section">6.2 Common Messages</h2>
12463
<table class="menu" border="0" cellspacing="0">
12464
<tr><td align="left" valign="top"><a href="#toggle">6.2.1 toggle</a></td><td> </td><td align="left" valign="top">
12466
<tr><td align="left" valign="top"><a href="#nop">6.2.2 nop</a></td><td> </td><td align="left" valign="top">
12468
<tr><td align="left" valign="top"><a href="#signal">6.2.3 signal</a></td><td> </td><td align="left" valign="top">
12470
<tr><td align="left" valign="top"><a href="#on">6.2.4 on</a></td><td> </td><td align="left" valign="top">
12472
<tr><td align="left" valign="top"><a href="#off">6.2.5 off</a></td><td> </td><td align="left" valign="top">
12474
<tr><td align="left" valign="top"><a href="#open">6.2.6 open</a></td><td> </td><td align="left" valign="top">
12476
<tr><td align="left" valign="top"><a href="#close">6.2.7 close</a></td><td> </td><td align="left" valign="top">
12478
<tr><td align="left" valign="top"><a href="#ignite">6.2.8 ignite</a></td><td> </td><td align="left" valign="top">
12480
<tr><td align="left" valign="top"><a href="#heat">6.2.9 heat</a></td><td> </td><td align="left" valign="top">
12482
<tr><td align="left" valign="top"><a href="#setfire">6.2.10 setfire</a></td><td> </td><td align="left" valign="top">
12484
<tr><td align="left" valign="top"><a href="#kill">6.2.11 kill</a></td><td> </td><td align="left" valign="top">
12486
<tr><td align="left" valign="top"><a href="#sound">6.2.12 sound</a></td><td> </td><td align="left" valign="top">
12488
<tr><td align="left" valign="top"><a href="#disconnect">6.2.13 disconnect</a></td><td> </td><td align="left" valign="top">
12493
<a name="toggle"></a>
12494
<table cellpadding="1" cellspacing="1" border="0">
12495
<tr><td valign="middle" align="left">[<a href="#Common-Messages" title="Previous section in reading order"> < </a>]</td>
12496
<td valign="middle" align="left">[<a href="#nop" title="Next section in reading order"> > </a>]</td>
12497
<td valign="middle" align="left"> </td>
12498
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
12499
<td valign="middle" align="left">[<a href="#Common-Messages" title="Up section"> Up </a>]</td>
12500
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
12501
<td valign="middle" align="left"> </td>
12502
<td valign="middle" align="left"> </td>
12503
<td valign="middle" align="left"> </td>
12504
<td valign="middle" align="left"> </td>
12505
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
12506
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
12507
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
12508
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
12510
<a name="toggle-1"></a>
12511
<h3 class="subsection">6.2.1 toggle</h3>
12513
<p>This is the default message that is always taken if no other message is provided.
12514
It toggles the <a href="#Object-State">Object State</a> quite independent of the very nature of the
12515
state. Two-stated objects like switches will toggle their state form ‘<samp>ON</samp>’
12516
to ‘<samp>OFF</samp>’ or from ‘<samp>OFF</samp>’ to ‘<samp>ON</samp>’. Door like objects will toggle
12517
their state from ‘<samp>OPEN</samp>’ to ‘<samp>CLOSED</samp>’ or from ‘<samp>CLOSED</samp>’ to
12518
‘<samp>OPEN</samp>’. Other objects like <a href="#st_005ffourswitch">st_fourswitch</a> will turn into the next
12519
orientation. Generally the object will toggle to its next state.
12521
<dl compact="compact">
12522
<dt> <b>Value:</b> -</dt>
12523
<dt> <b>Returns:</b> -</dt>
12524
<dt> <b>Support:</b> by nearly all objects which use the ‘<samp>state</samp>’ attribute</dt>
12529
<table cellpadding="1" cellspacing="1" border="0">
12530
<tr><td valign="middle" align="left">[<a href="#toggle" title="Previous section in reading order"> < </a>]</td>
12531
<td valign="middle" align="left">[<a href="#signal" title="Next section in reading order"> > </a>]</td>
12532
<td valign="middle" align="left"> </td>
12533
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
12534
<td valign="middle" align="left">[<a href="#Common-Messages" title="Up section"> Up </a>]</td>
12535
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
12536
<td valign="middle" align="left"> </td>
12537
<td valign="middle" align="left"> </td>
12538
<td valign="middle" align="left"> </td>
12539
<td valign="middle" align="left"> </td>
12540
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
12541
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
12542
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
12543
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
12545
<a name="nop-1"></a>
12546
<h3 class="subsection">6.2.2 nop</h3>
12548
<p>A dummy message that just does nothing: no operation. You may need it in cases
12549
of state dependent actions to block an otherwise sent default ‘<samp>toggle</samp>’
12550
message (see section <a href="#Object-State">Object State</a>).
12552
<dl compact="compact">
12553
<dt> <b>Value:</b> -</dt>
12554
<dt> <b>Returns:</b> -</dt>
12555
<dt> <b>Support:</b> by all objects</dt>
12559
<a name="signal"></a>
12560
<table cellpadding="1" cellspacing="1" border="0">
12561
<tr><td valign="middle" align="left">[<a href="#nop" title="Previous section in reading order"> < </a>]</td>
12562
<td valign="middle" align="left">[<a href="#on" title="Next section in reading order"> > </a>]</td>
12563
<td valign="middle" align="left"> </td>
12564
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
12565
<td valign="middle" align="left">[<a href="#Common-Messages" title="Up section"> Up </a>]</td>
12566
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
12567
<td valign="middle" align="left"> </td>
12568
<td valign="middle" align="left"> </td>
12569
<td valign="middle" align="left"> </td>
12570
<td valign="middle" align="left"> </td>
12571
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
12572
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
12573
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
12574
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
12576
<a name="signal-1"></a>
12577
<h3 class="subsection">6.2.3 signal</h3>
12579
<p>A signal message tries to set the object to the state 0 (‘<samp>OFF</samp>’,
12580
‘<samp>CLOSED</samp>’) or state 1 (‘<samp>ON</samp>’, ‘<samp>OPEN</samp>’) according to its value. This
12581
message allows you to keep the states of an action source and a receiving object
12582
in sync. Note that values like ‘<samp>true</samp>’, ‘<samp>false</samp>’ and orientation values
12583
like ‘<samp>WEST</samp>’ to ‘<samp>NORTH</samp>’ are converted to 0 and 1. This allows you to
12584
use ‘<samp>signal</samp>’ as action message on most objects.
12586
<dl compact="compact">
12587
<dt> <b>Value:</b> <code>0</code>, <code>1</code></dt>
12588
<dt> <b>Returns:</b> -</dt>
12589
<dt> <b>Support:</b> by nearly all objects which use the ‘<samp>state</samp>’ attribute</dt>
12594
<table cellpadding="1" cellspacing="1" border="0">
12595
<tr><td valign="middle" align="left">[<a href="#signal" title="Previous section in reading order"> < </a>]</td>
12596
<td valign="middle" align="left">[<a href="#off" title="Next section in reading order"> > </a>]</td>
12597
<td valign="middle" align="left"> </td>
12598
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
12599
<td valign="middle" align="left">[<a href="#Common-Messages" title="Up section"> Up </a>]</td>
12600
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
12601
<td valign="middle" align="left"> </td>
12602
<td valign="middle" align="left"> </td>
12603
<td valign="middle" align="left"> </td>
12604
<td valign="middle" align="left"> </td>
12605
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
12606
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
12607
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
12608
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
12610
<a name="on-1"></a>
12611
<h3 class="subsection">6.2.4 on</h3>
12613
<p>This message is just supported by objects that can be switched on and off. Just
12614
objects in state ‘<samp>OFF</samp>’ will be switched on. An object in state ‘<samp>ON</samp>’
12615
remains unchanged in its state.
12617
<dl compact="compact">
12618
<dt> <b>Value:</b> -</dt>
12619
<dt> <b>Returns:</b> -</dt>
12620
<dt> <b>Support:</b> by objects that can be switched on and off</dt>
12625
<table cellpadding="1" cellspacing="1" border="0">
12626
<tr><td valign="middle" align="left">[<a href="#on" title="Previous section in reading order"> < </a>]</td>
12627
<td valign="middle" align="left">[<a href="#open" title="Next section in reading order"> > </a>]</td>
12628
<td valign="middle" align="left"> </td>
12629
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
12630
<td valign="middle" align="left">[<a href="#Common-Messages" title="Up section"> Up </a>]</td>
12631
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
12632
<td valign="middle" align="left"> </td>
12633
<td valign="middle" align="left"> </td>
12634
<td valign="middle" align="left"> </td>
12635
<td valign="middle" align="left"> </td>
12636
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
12637
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
12638
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
12639
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
12641
<a name="off-1"></a>
12642
<h3 class="subsection">6.2.5 off</h3>
12644
<p>This message is just supported by objects that can be switched on and off. Just
12645
objects in state ‘<samp>ON</samp>’ will be switched off. An object in state ‘<samp>OFF</samp>’
12646
remains unchanged in its state.
12648
<dl compact="compact">
12649
<dt> <b>Value:</b> -</dt>
12650
<dt> <b>Returns:</b> -</dt>
12651
<dt> <b>Support:</b> by objects that can be switched on and off</dt>
12655
<a name="open"></a>
12656
<table cellpadding="1" cellspacing="1" border="0">
12657
<tr><td valign="middle" align="left">[<a href="#off" title="Previous section in reading order"> < </a>]</td>
12658
<td valign="middle" align="left">[<a href="#close" title="Next section in reading order"> > </a>]</td>
12659
<td valign="middle" align="left"> </td>
12660
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
12661
<td valign="middle" align="left">[<a href="#Common-Messages" title="Up section"> Up </a>]</td>
12662
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
12663
<td valign="middle" align="left"> </td>
12664
<td valign="middle" align="left"> </td>
12665
<td valign="middle" align="left"> </td>
12666
<td valign="middle" align="left"> </td>
12667
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
12668
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
12669
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
12670
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
12672
<a name="open-1"></a>
12673
<h3 class="subsection">6.2.6 open</h3>
12675
<p>This message is just supported by door like objects that can be opened and closed.
12676
Just objects in state ‘<samp>CLOSED</samp>’ will be opened. An object in state
12677
‘<samp>OPEN</samp>’ remains unchanged in its state.
12679
<dl compact="compact">
12680
<dt> <b>Value:</b> -</dt>
12681
<dt> <b>Returns:</b> -</dt>
12682
<dt> <b>Support:</b> by door like objects that can be opened and closed</dt>
12686
<a name="close"></a>
12687
<table cellpadding="1" cellspacing="1" border="0">
12688
<tr><td valign="middle" align="left">[<a href="#open" title="Previous section in reading order"> < </a>]</td>
12689
<td valign="middle" align="left">[<a href="#ignite" title="Next section in reading order"> > </a>]</td>
12690
<td valign="middle" align="left"> </td>
12691
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
12692
<td valign="middle" align="left">[<a href="#Common-Messages" title="Up section"> Up </a>]</td>
12693
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
12694
<td valign="middle" align="left"> </td>
12695
<td valign="middle" align="left"> </td>
12696
<td valign="middle" align="left"> </td>
12697
<td valign="middle" align="left"> </td>
12698
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
12699
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
12700
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
12701
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
12703
<a name="close-1"></a>
12704
<h3 class="subsection">6.2.7 close</h3>
12706
<p>This message is just supported by door like objects that can be opened and closed.
12707
Just objects in state ‘<samp>OPEN</samp>’ will be closed. An object in state
12708
‘<samp>CLOSED</samp>’ remains unchanged in its state.
12710
<dl compact="compact">
12711
<dt> <b>Value:</b> -</dt>
12712
<dt> <b>Returns:</b> -</dt>
12713
<dt> <b>Support:</b> by door like objects that can be opened and closed</dt>
12717
<a name="ignite"></a>
12718
<table cellpadding="1" cellspacing="1" border="0">
12719
<tr><td valign="middle" align="left">[<a href="#close" title="Previous section in reading order"> < </a>]</td>
12720
<td valign="middle" align="left">[<a href="#heat" title="Next section in reading order"> > </a>]</td>
12721
<td valign="middle" align="left"> </td>
12722
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
12723
<td valign="middle" align="left">[<a href="#Common-Messages" title="Up section"> Up </a>]</td>
12724
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
12725
<td valign="middle" align="left"> </td>
12726
<td valign="middle" align="left"> </td>
12727
<td valign="middle" align="left"> </td>
12728
<td valign="middle" align="left"> </td>
12729
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
12730
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
12731
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
12732
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
12734
<a name="ignite-1"></a>
12735
<h3 class="subsection">6.2.8 ignite</h3>
12737
<p>Sets fire to a floor if it is burnable (see section <a href="#Fire-Spreading">Fire Spreading</a>) or start an
12738
explosion or shattering of items like <a href="#it_005fdynamite">it_dynamite</a>, <a href="#it_005fbomb">it_bomb</a> or
12739
stones like <a href="#st_005fice">st_ice</a>, <a href="#st_005fdispenser">st_dispenser</a> and many more.
12741
<dl compact="compact">
12742
<dt> <b>Value:</b> -</dt>
12743
<dt> <b>Returns:</b> -</dt>
12744
<dt> <b>Support:</b> by all <a href="#Floor-Objects">Floor Objects</a> and explosive or shattering items and stones</dt>
12748
<a name="heat"></a>
12749
<table cellpadding="1" cellspacing="1" border="0">
12750
<tr><td valign="middle" align="left">[<a href="#ignite" title="Previous section in reading order"> < </a>]</td>
12751
<td valign="middle" align="left">[<a href="#setfire" title="Next section in reading order"> > </a>]</td>
12752
<td valign="middle" align="left"> </td>
12753
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
12754
<td valign="middle" align="left">[<a href="#Common-Messages" title="Up section"> Up </a>]</td>
12755
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
12756
<td valign="middle" align="left"> </td>
12757
<td valign="middle" align="left"> </td>
12758
<td valign="middle" align="left"> </td>
12759
<td valign="middle" align="left"> </td>
12760
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
12761
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
12762
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
12763
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
12765
<a name="heat-1"></a>
12766
<h3 class="subsection">6.2.9 heat</h3>
12768
<p>Sets fire to a floor if it is burnable (see section <a href="#Fire-Spreading">Fire Spreading</a>) or causes a
12769
<a href="#Heat_002dTransformation">Heat-Transformation</a> on a floor or other objects like <a href="#st_005fice">st_ice</a> that
12770
starts melting. Some objects do react on a heat message like on an <a href="#ignite">ignite</a>
12771
message by explosions or shattering.
12773
<dl compact="compact">
12774
<dt> <b>Value:</b> -</dt>
12775
<dt> <b>Returns:</b> -</dt>
12776
<dt> <b>Support:</b> by all <a href="#Floor-Objects">Floor Objects</a> and some other objects.</dt>
12780
<a name="setfire"></a>
12781
<table cellpadding="1" cellspacing="1" border="0">
12782
<tr><td valign="middle" align="left">[<a href="#heat" title="Previous section in reading order"> < </a>]</td>
12783
<td valign="middle" align="left">[<a href="#kill" title="Next section in reading order"> > </a>]</td>
12784
<td valign="middle" align="left"> </td>
12785
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
12786
<td valign="middle" align="left">[<a href="#Common-Messages" title="Up section"> Up </a>]</td>
12787
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
12788
<td valign="middle" align="left"> </td>
12789
<td valign="middle" align="left"> </td>
12790
<td valign="middle" align="left"> </td>
12791
<td valign="middle" align="left"> </td>
12792
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
12793
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
12794
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
12795
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
12797
<a name="setfire-1"></a>
12798
<h3 class="subsection">6.2.10 setfire</h3>
12800
<p>Sets fire to a floor if it is burnable (see section <a href="#Fire-Spreading">Fire Spreading</a>).
12802
<dl compact="compact">
12803
<dt> <b>Value:</b> -</dt>
12804
<dt> <b>Returns:</b> -</dt>
12805
<dt> <b>Support:</b> by all <a href="#Floor-Objects">Floor Objects</a></dt>
12809
<a name="kill"></a>
12810
<table cellpadding="1" cellspacing="1" border="0">
12811
<tr><td valign="middle" align="left">[<a href="#setfire" title="Previous section in reading order"> < </a>]</td>
12812
<td valign="middle" align="left">[<a href="#sound" title="Next section in reading order"> > </a>]</td>
12813
<td valign="middle" align="left"> </td>
12814
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
12815
<td valign="middle" align="left">[<a href="#Common-Messages" title="Up section"> Up </a>]</td>
12816
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
12817
<td valign="middle" align="left"> </td>
12818
<td valign="middle" align="left"> </td>
12819
<td valign="middle" align="left"> </td>
12820
<td valign="middle" align="left"> </td>
12821
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
12822
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
12823
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
12824
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
12826
<a name="kill-1"></a>
12827
<h3 class="subsection">6.2.11 kill</h3>
12829
<p>This message causes the recipient to cease to exist. You are just allowed to
12830
kill objects that are directly part of the world. Objects owned by players,
12831
being content part of a bag or otherwise owned by another object will refuse
12832
this message on behalf of their owner.
12834
<dl compact="compact">
12835
<dt> <b>Value:</b> -</dt>
12836
<dt> <b>Returns:</b> -</dt>
12837
<dt> <b>Support:</b> by all world owned objects</dt>
12841
<a name="sound"></a>
12842
<table cellpadding="1" cellspacing="1" border="0">
12843
<tr><td valign="middle" align="left">[<a href="#kill" title="Previous section in reading order"> < </a>]</td>
12844
<td valign="middle" align="left">[<a href="#disconnect" title="Next section in reading order"> > </a>]</td>
12845
<td valign="middle" align="left"> </td>
12846
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
12847
<td valign="middle" align="left">[<a href="#Common-Messages" title="Up section"> Up </a>]</td>
12848
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
12849
<td valign="middle" align="left"> </td>
12850
<td valign="middle" align="left"> </td>
12851
<td valign="middle" align="left"> </td>
12852
<td valign="middle" align="left"> </td>
12853
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
12854
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
12855
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
12856
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
12858
<a name="sound-1"></a>
12859
<h3 class="subsection">6.2.12 sound</h3>
12861
<p>This message causes the recipient to play the sound given by the first
12862
string argument value. It is played at the position of the object. The
12863
volume can be defined by a second number argument and defaults to <code>1.0</code>.
12865
<dl compact="compact">
12866
<dt> <b>Value:</b> string [, number]</dt>
12867
<dt> <b>Returns:</b> -</dt>
12868
<dt> <b>Support:</b> by all objects</dt>
12872
<a name="disconnect"></a>
12873
<table cellpadding="1" cellspacing="1" border="0">
12874
<tr><td valign="middle" align="left">[<a href="#sound" title="Previous section in reading order"> < </a>]</td>
12875
<td valign="middle" align="left">[<a href="#Common-Constants" title="Next section in reading order"> > </a>]</td>
12876
<td valign="middle" align="left"> </td>
12877
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
12878
<td valign="middle" align="left">[<a href="#Common-Messages" title="Up section"> Up </a>]</td>
12879
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
12880
<td valign="middle" align="left"> </td>
12881
<td valign="middle" align="left"> </td>
12882
<td valign="middle" align="left"> </td>
12883
<td valign="middle" align="left"> </td>
12884
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
12885
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
12886
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
12887
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
12889
<a name="disconnect-1"></a>
12890
<h3 class="subsection">6.2.13 disconnect</h3>
12892
<p>This message causes the recipient to disconnect from all <a href="#fellows">fellows</a> by
12893
cutting all <a href="#wires">wires</a> and <a href="#rubbers">rubbers</a> that are connected to it.
12895
<dl compact="compact">
12896
<dt> <b>Value:</b> -</dt>
12897
<dt> <b>Returns:</b> -</dt>
12898
<dt> <b>Support:</b> by all objects</dt>
12903
<a name="Common-Constants"></a>
12904
<table cellpadding="1" cellspacing="1" border="0">
12905
<tr><td valign="middle" align="left">[<a href="#disconnect" title="Previous section in reading order"> < </a>]</td>
12906
<td valign="middle" align="left">[<a href="#state-values" title="Next section in reading order"> > </a>]</td>
12907
<td valign="middle" align="left"> </td>
12908
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
12909
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Up section"> Up </a>]</td>
12910
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
12911
<td valign="middle" align="left"> </td>
12912
<td valign="middle" align="left"> </td>
12913
<td valign="middle" align="left"> </td>
12914
<td valign="middle" align="left"> </td>
12915
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
12916
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
12917
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
12918
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
12920
<a name="Common-Constants-1"></a>
12921
<h2 class="section">6.3 Common Constants</h2>
12923
<p>Constants for <a href="#Pseudo-Datatypes">Pseudo Datatypes</a>.
12925
<table class="menu" border="0" cellspacing="0">
12926
<tr><td align="left" valign="top"><a href="#state-values">6.3.1 state values</a></td><td> </td><td align="left" valign="top">
12928
<tr><td align="left" valign="top"><a href="#color-values">6.3.2 color values</a></td><td> </td><td align="left" valign="top">
12930
<tr><td align="left" valign="top"><a href="#actor-controllers">6.3.3 actor controllers</a></td><td> </td><td align="left" valign="top">
12932
<tr><td align="left" valign="top"><a href="#oxyd-colors">6.3.4 oxyd colors</a></td><td> </td><td align="left" valign="top">
12934
<tr><td align="left" valign="top"><a href="#orientations">6.3.5 orientations</a></td><td> </td><td align="left" valign="top">
12936
<tr><td align="left" valign="top"><a href="#direction-offsets">6.3.6 direction offsets</a></td><td> </td><td align="left" valign="top">
12938
<tr><td align="left" valign="top"><a href="#position-lists">6.3.7 position lists</a></td><td> </td><td align="left" valign="top">
12940
<tr><td align="left" valign="top"><a href="#essentialness">6.3.8 essentialness</a></td><td> </td><td align="left" valign="top">
12942
<tr><td align="left" valign="top"><a href="#meditation-types">6.3.9 meditation types</a></td><td> </td><td align="left" valign="top">
12944
<tr><td align="left" valign="top"><a href="#glasses-abilities">6.3.10 glasses abilities</a></td><td> </td><td align="left" valign="top">
12946
<tr><td align="left" valign="top"><a href="#coinslot-acceptance">6.3.11 coinslot acceptance</a></td><td> </td><td align="left" valign="top">
12948
<tr><td align="left" valign="top"><a href="#rubberband-length">6.3.12 rubberband length</a></td><td> </td><td align="left" valign="top">
12950
<tr><td align="left" valign="top"><a href="#subsoil-kind">6.3.13 subsoil kind</a></td><td> </td><td align="left" valign="top">
12952
<tr><td align="left" valign="top"><a href="#screen-scrolling">6.3.14 screen scrolling</a></td><td> </td><td align="left" valign="top">
12954
<tr><td align="left" valign="top"><a href="#map-read-directions">6.3.15 map read directions</a></td><td> </td><td align="left" valign="top">
12959
<a name="state-values"></a>
12960
<table cellpadding="1" cellspacing="1" border="0">
12961
<tr><td valign="middle" align="left">[<a href="#Common-Constants" title="Previous section in reading order"> < </a>]</td>
12962
<td valign="middle" align="left">[<a href="#color-values" title="Next section in reading order"> > </a>]</td>
12963
<td valign="middle" align="left"> </td>
12964
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
12965
<td valign="middle" align="left">[<a href="#Common-Constants" title="Up section"> Up </a>]</td>
12966
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
12967
<td valign="middle" align="left"> </td>
12968
<td valign="middle" align="left"> </td>
12969
<td valign="middle" align="left"> </td>
12970
<td valign="middle" align="left"> </td>
12971
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
12972
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
12973
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
12974
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
12976
<a name="state-values-1"></a>
12977
<h3 class="subsection">6.3.1 state values</h3>
12979
<p>Number constants for object attribute <a href="#state">state</a>. Please choose the constant
12980
that is appropriate for an object and do avoid using numbers.
12983
<li> ‘<samp>OFF</samp>’ = <code>0</code>, all switch like objects
12984
</li><li> ‘<samp>ON</samp>’ = <code>1</code>, all switch like objects
12985
</li><li> ‘<samp>CLOSED</samp>’ = <code>0</code>, all door like objects
12986
</li><li> ‘<samp>OPEN</samp>’ = <code>1</code>, all door like objects
12987
</li><li> ‘<samp>IDLE</samp>’ = <code>0</code>, other objects in the default passive state
12988
</li><li> ‘<samp>ACTIVE</samp>’ = <code>1</code>, other objects in the active state
12989
</li><li> ‘<samp>INACTIVE</samp>’ = <code>2</code>, other objects in the inactive state
12990
</li><li> ‘<samp>OXYDPAIR</samp>’ = <code>2</code>, just by <a href="#st_005foxyd">st_oxyd</a>
12991
</li><li> ‘<samp>LIGHT</samp>’ = <code>0</code>, by <a href="#st_005fdisco">st_disco</a>
12992
</li><li> ‘<samp>MEDIUM</samp>’ = <code>1</code>, by <a href="#st_005fdisco">st_disco</a>, <a href="#it_005fcrack">it_crack</a>, <a href="#it_005fextinguisher">it_extinguisher</a>
12993
</li><li> ‘<samp>DARK</samp>’ = <code>2</code>, by <a href="#st_005fdisco">st_disco</a>
12994
</li><li> ‘<samp>FLOODING</samp>’ = <code>1</code>, by <a href="#fl_005fwater">fl_water</a>, <a href="#fl_005fwood">fl_wood</a>, <a href="#fl_005fhay">fl_hay</a>, <a href="#fl_005frock">fl_rock</a>
12995
</li><li> ‘<samp>INVISIBLE</samp>’ = <code>-1</code>, by <a href="#it_005fcrack">it_crack</a>
12996
</li><li> ‘<samp>SMALL</samp>’ = <code>0</code>, by <a href="#it_005fcrack">it_crack</a>
12997
</li><li> ‘<samp>LARGE</samp>’ = <code>2</code>, by <a href="#it_005fcrack">it_crack</a>
12998
</li><li> ‘<samp>YIN</samp>’ = <code>0</code>, by <a href="#fl_005fyinyang">fl_yinyang</a> and all actors as <a href="#owner">owner</a> value
12999
</li><li> ‘<samp>YANG</samp>’ = <code>1</code>, by <a href="#fl_005fyinyang">fl_yinyang</a> and all actors as <a href="#owner">owner</a> value
13000
</li><li> ‘<samp>EMPTY</samp>’ = <code>0</code>, by <a href="#it_005fextinguisher">it_extinguisher</a>
13001
</li><li> ‘<samp>FULL</samp>’ = <code>2</code>, by <a href="#it_005fextinguisher">it_extinguisher</a>
13002
</li><li> ‘<samp>BROKEN</samp>’ = <code>1</code>, by <a href="#it_005fbottle">it_bottle</a>
13003
</li><li> ‘<samp>BREAKING</samp>’ = <code>2</code>, by <a href="#st_005fquake">st_quake</a>
13004
</li><li> ‘<samp>CW</samp>’ = <code>0</code>, clockwise, by <a href="#st_005frotator">st_rotator</a>
13005
</li><li> ‘<samp>CCW</samp>’ = <code>1</code>, counterclockwise, by <a href="#st_005frotator">st_rotator</a>
13010
<a name="color-values"></a>
13011
<table cellpadding="1" cellspacing="1" border="0">
13012
<tr><td valign="middle" align="left">[<a href="#state-values" title="Previous section in reading order"> < </a>]</td>
13013
<td valign="middle" align="left">[<a href="#actor-controllers" title="Next section in reading order"> > </a>]</td>
13014
<td valign="middle" align="left"> </td>
13015
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
13016
<td valign="middle" align="left">[<a href="#Common-Constants" title="Up section"> Up </a>]</td>
13017
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
13018
<td valign="middle" align="left"> </td>
13019
<td valign="middle" align="left"> </td>
13020
<td valign="middle" align="left"> </td>
13021
<td valign="middle" align="left"> </td>
13022
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
13023
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
13024
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
13025
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
13027
<a name="color-values-1"></a>
13028
<h3 class="subsection">6.3.2 color values</h3>
13030
<p>Number constants for attribute <a href="#color">color</a>. Please choose the constant
13031
that is appropriate for an object and do avoid using numbers. Note that objects
13032
do support a color attribute only, if it is related to a functionality. The
13033
color of <a href="#st_005foxyd">st_oxyd</a> uses another enumeration scheme due to legacy reasons,
13034
see section <a href="#oxyd-colors">oxyd colors</a>.
13037
<li> ‘<samp>BLACK</samp>’ = <code>0</code>, all black/white colored objects
13038
</li><li> ‘<samp>WHITE</samp>’ = <code>1</code>, all black/white colored objects
13039
</li><li> ‘<samp>BLUE</samp>’ = <code>2</code>, by <a href="#st_005fpuzzle">st_puzzle</a>
13040
</li><li> ‘<samp>YELLOW</samp>’ = <code>3</code>, by <a href="#st_005fpuzzle">st_puzzle</a>
13041
</li><li> ‘<samp>NOCOLOR</samp>’ = <code>nil</code>, some objects, that exist in black, white variants,
13042
too, like <a href="#st_005fswitch">st_switch</a>
13046
<a name="actor-controllers"></a>
13047
<table cellpadding="1" cellspacing="1" border="0">
13048
<tr><td valign="middle" align="left">[<a href="#color-values" title="Previous section in reading order"> < </a>]</td>
13049
<td valign="middle" align="left">[<a href="#oxyd-colors" title="Next section in reading order"> > </a>]</td>
13050
<td valign="middle" align="left"> </td>
13051
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
13052
<td valign="middle" align="left">[<a href="#Common-Constants" title="Up section"> Up </a>]</td>
13053
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
13054
<td valign="middle" align="left"> </td>
13055
<td valign="middle" align="left"> </td>
13056
<td valign="middle" align="left"> </td>
13057
<td valign="middle" align="left"> </td>
13058
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
13059
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
13060
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
13061
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
13063
<a name="actor-controllers-1"></a>
13064
<h3 class="subsection">6.3.3 actor controllers</h3>
13066
<p>Number constants for actor attribute <a href="#controllers">controllers</a>. Please choose the
13067
constant that is appropriate for an object and do avoid using numbers.
13070
<li> ‘<samp>CTRL_NONE</samp>’ = <code>0</code>, by all actors
13071
</li><li> ‘<samp>CTRL_YIN</samp>’ = <code>1</code>, by all actors
13072
</li><li> ‘<samp>CTRL_YANG</samp>’ = <code>2</code>, by all actors
13073
</li><li> ‘<samp>CTRL_YINYANG</samp>’ = <code>3</code>, by all actors
13077
<a name="oxyd-colors"></a>
13078
<table cellpadding="1" cellspacing="1" border="0">
13079
<tr><td valign="middle" align="left">[<a href="#actor-controllers" title="Previous section in reading order"> < </a>]</td>
13080
<td valign="middle" align="left">[<a href="#orientations" title="Next section in reading order"> > </a>]</td>
13081
<td valign="middle" align="left"> </td>
13082
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
13083
<td valign="middle" align="left">[<a href="#Common-Constants" title="Up section"> Up </a>]</td>
13084
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
13085
<td valign="middle" align="left"> </td>
13086
<td valign="middle" align="left"> </td>
13087
<td valign="middle" align="left"> </td>
13088
<td valign="middle" align="left"> </td>
13089
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
13090
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
13091
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
13092
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
13094
<a name="oxyd-colors-1"></a>
13095
<h3 class="subsection">6.3.4 oxyd colors</h3>
13097
<p>Number constants for <a href="#st_005foxyd">st_oxyd</a> attribute ‘<samp>oxydcolor</samp>’. Please choose the
13098
constant that is appropriate for an object and do avoid using numbers.
13101
<li> ‘<samp>OXYD_BLUE</samp>’ = <code>0</code>, by <a href="#st_005foxyd">st_oxyd</a>
13102
</li><li> ‘<samp>OXYD_RED</samp>’ = <code>1</code>, by <a href="#st_005foxyd">st_oxyd</a>
13103
</li><li> ‘<samp>OXYD_GREEN</samp>’ = <code>2</code>, by <a href="#st_005foxyd">st_oxyd</a>
13104
</li><li> ‘<samp>OXYD_YELLOW</samp>’ = <code>3</code>, by <a href="#st_005foxyd">st_oxyd</a>
13105
</li><li> ‘<samp>OXYD_CYAN</samp>’ = <code>4</code>, by <a href="#st_005foxyd">st_oxyd</a>
13106
</li><li> ‘<samp>OXYD_PURPLE</samp>’ = <code>5</code>, by <a href="#st_005foxyd">st_oxyd</a>
13107
</li><li> ‘<samp>OXYD_WHITE</samp>’ = <code>6</code>, by <a href="#st_005foxyd">st_oxyd</a>
13108
</li><li> ‘<samp>OXYD_BLACK</samp>’ = <code>7</code>, by <a href="#st_005foxyd">st_oxyd</a>
13109
</li><li> ‘<samp>OXYD_GRAY</samp>’ = <code>8</code>, by <a href="#st_005foxyd">st_oxyd</a>
13110
</li><li> ‘<samp>OXYD_ORANGE</samp>’ = <code>9</code>, by <a href="#st_005foxyd">st_oxyd</a>
13111
</li><li> ‘<samp>OXYD_PINE</samp>’ = <code>10</code>, by <a href="#st_005foxyd">st_oxyd</a>
13112
</li><li> ‘<samp>OXYD_BROWN</samp>’ = <code>11</code>, by <a href="#st_005foxyd">st_oxyd</a>
13113
</li><li> ‘<samp>OXYD_AUTO</samp>’ = <code>-1</code>, by <a href="#st_005foxyd">st_oxyd</a>
13114
</li><li> ‘<samp>OXYD_FAKE</samp>’ = <code>-2</code>, by <a href="#st_005foxyd">st_oxyd</a>
13115
</li><li> ‘<samp>OXYD_QUAKE</samp>’ = <code>-3</code>, by <a href="#st_005foxyd">st_oxyd</a>
13116
</li><li> ‘<samp>OXYD_BOLD</samp>’ = <code>-4</code>, by <a href="#st_005foxyd">st_oxyd</a>
13121
<a name="orientations"></a>
13122
<table cellpadding="1" cellspacing="1" border="0">
13123
<tr><td valign="middle" align="left">[<a href="#oxyd-colors" title="Previous section in reading order"> < </a>]</td>
13124
<td valign="middle" align="left">[<a href="#direction-offsets" title="Next section in reading order"> > </a>]</td>
13125
<td valign="middle" align="left"> </td>
13126
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
13127
<td valign="middle" align="left">[<a href="#Common-Constants" title="Up section"> Up </a>]</td>
13128
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
13129
<td valign="middle" align="left"> </td>
13130
<td valign="middle" align="left"> </td>
13131
<td valign="middle" align="left"> </td>
13132
<td valign="middle" align="left"> </td>
13133
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
13134
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
13135
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
13136
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
13138
<a name="orientations-1"></a>
13139
<h3 class="subsection">6.3.5 orientations</h3>
13141
<p>Number constants for attributes ‘<samp>orientation</samp>’ or ‘<samp>slope</samp>’. Please
13142
choose the constant that is appropriate for an object and do avoid using numbers.
13145
<li> ‘<samp>RANDOMDIR</samp>’ = <code>-2</code>, by <a href="#st_005fmirror">st_mirror</a>
13146
</li><li> ‘<samp>NODIR</samp>’ = <code>-1</code>, by <a href="#fl_005fslope">fl_slope</a>
13147
</li><li> ‘<samp>WEST</samp>’ = <code>0</code>, by all objects with 4 orientations
13148
</li><li> ‘<samp>SOUTH</samp>’ = <code>1</code>, by all objects with 4 orientations
13149
</li><li> ‘<samp>EAST</samp>’ = <code>2</code>, by all objects with 4 orientations
13150
</li><li> ‘<samp>NORTH</samp>’ = <code>3</code>, by all objects with 4 orientations
13151
</li><li> ‘<samp>NORTHWEST</samp>’ = <code>4</code>, by all objects with 8 orientations
13152
</li><li> ‘<samp>SOUTHWEST</samp>’ = <code>5</code>, by all objects with 8 orientations
13153
</li><li> ‘<samp>SOUTHEAST</samp>’ = <code>6</code>, by all objects with 8 orientations
13154
</li><li> ‘<samp>NORTHEAST</samp>’ = <code>7</code>, by all objects with 8 orientations
13157
<p>Just for <a href="#st_005fmirror">st_mirror</a> another alternative orientation notation exists:
13160
<li> ‘<samp>BACKSLASH</samp>’ = <code>0</code>, by <a href="#st_005fmirror">st_mirror</a>
13161
</li><li> ‘<samp>HORIZONTAL</samp>’ = <code>1</code>, by <a href="#st_005fmirror">st_mirror</a>
13162
</li><li> ‘<samp>SLASH</samp>’ = <code>2</code>, by <a href="#st_005fmirror">st_mirror</a>
13163
</li><li> ‘<samp>VERTICAL</samp>’ = <code>3</code>, by <a href="#st_005fmirror">st_mirror</a>
13167
<a name="direction-offsets"></a>
13168
<table cellpadding="1" cellspacing="1" border="0">
13169
<tr><td valign="middle" align="left">[<a href="#orientations" title="Previous section in reading order"> < </a>]</td>
13170
<td valign="middle" align="left">[<a href="#position-lists" title="Next section in reading order"> > </a>]</td>
13171
<td valign="middle" align="left"> </td>
13172
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
13173
<td valign="middle" align="left">[<a href="#Common-Constants" title="Up section"> Up </a>]</td>
13174
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
13175
<td valign="middle" align="left"> </td>
13176
<td valign="middle" align="left"> </td>
13177
<td valign="middle" align="left"> </td>
13178
<td valign="middle" align="left"> </td>
13179
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
13180
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
13181
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
13182
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
13184
<a name="direction-offsets-1"></a>
13185
<h3 class="subsection">6.3.6 direction offsets</h3>
13187
<p>Position constants as vectorial direction offsets. Please choose the constant
13188
that is appropriate for a calculation and do avoid using the trivial positions
13192
<li> ‘<samp>N</samp>’ = <code>po(0, -1)</code>
13193
</li><li> ‘<samp>E</samp>’ = <code>po(1, 0)</code>
13194
</li><li> ‘<samp>S</samp>’ = <code>po(0, 1)</code>
13195
</li><li> ‘<samp>W</samp>’ = <code>po(-1, 0)</code>
13196
</li><li> ‘<samp>NE</samp>’ = <code>N + E</code>
13197
</li><li> ‘<samp>NW</samp>’ = <code>N + W</code>
13198
</li><li> ‘<samp>SE</samp>’ = <code>S + E</code>
13199
</li><li> ‘<samp>SW</samp>’ = <code>S + W</code>
13200
</li><li> ‘<samp>NNE</samp>’ = <code>N + NE</code>, by <a href="#st_005fchess">st_chess</a>
13201
</li><li> ‘<samp>ENE</samp>’ = <code>E + NE</code>, by <a href="#st_005fchess">st_chess</a>
13202
</li><li> ‘<samp>ESE</samp>’ = <code>E + SE</code>, by <a href="#st_005fchess">st_chess</a>
13203
</li><li> ‘<samp>SSE</samp>’ = <code>S + SE</code>, by <a href="#st_005fchess">st_chess</a>
13204
</li><li> ‘<samp>SSW</samp>’ = <code>S + SW</code>, by <a href="#st_005fchess">st_chess</a>
13205
</li><li> ‘<samp>WSW</samp>’ = <code>W + SW</code>, by <a href="#st_005fchess">st_chess</a>
13206
</li><li> ‘<samp>WNW</samp>’ = <code>W + NW</code>, by <a href="#st_005fchess">st_chess</a>
13207
</li><li> ‘<samp>NNW</samp>’ = <code>N + NW</code>, by <a href="#st_005fchess">st_chess</a>
13211
<a name="position-lists"></a>
13212
<table cellpadding="1" cellspacing="1" border="0">
13213
<tr><td valign="middle" align="left">[<a href="#direction-offsets" title="Previous section in reading order"> < </a>]</td>
13214
<td valign="middle" align="left">[<a href="#essentialness" title="Next section in reading order"> > </a>]</td>
13215
<td valign="middle" align="left"> </td>
13216
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
13217
<td valign="middle" align="left">[<a href="#Common-Constants" title="Up section"> Up </a>]</td>
13218
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
13219
<td valign="middle" align="left"> </td>
13220
<td valign="middle" align="left"> </td>
13221
<td valign="middle" align="left"> </td>
13222
<td valign="middle" align="left"> </td>
13223
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
13224
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
13225
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
13226
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
13228
<a name="position-lists-1"></a>
13229
<h3 class="subsection">6.3.7 position lists</h3>
13231
<p>Position list constants. Please choose the constant that is appropriate for a
13232
calculation and do avoid using the trivial position lists instead.
13235
<li> ‘<samp>NEIGHBORS_4</samp>’ = <code>W .. S .. E .. N</code>
13236
</li><li> ‘<samp>NEIGHBORS_8</samp>’ = <code>NEIGHBORS_4 .. NW .. SW ..SE .. NE</code>
13237
</li><li> ‘<samp>NEIGHBORS_CHESS</samp>’ = <code>NNE .. ENE .. ESE .. SSE .. SSW .. WSW .. WNW .. NNW</code>
13241
<a name="essentialness"></a>
13242
<table cellpadding="1" cellspacing="1" border="0">
13243
<tr><td valign="middle" align="left">[<a href="#position-lists" title="Previous section in reading order"> < </a>]</td>
13244
<td valign="middle" align="left">[<a href="#meditation-types" title="Next section in reading order"> > </a>]</td>
13245
<td valign="middle" align="left"> </td>
13246
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
13247
<td valign="middle" align="left">[<a href="#Common-Constants" title="Up section"> Up </a>]</td>
13248
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
13249
<td valign="middle" align="left"> </td>
13250
<td valign="middle" align="left"> </td>
13251
<td valign="middle" align="left"> </td>
13252
<td valign="middle" align="left"> </td>
13253
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
13254
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
13255
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
13256
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
13258
<a name="essentialness-1"></a>
13259
<h3 class="subsection">6.3.8 essentialness</h3>
13261
<p>Number constants for attribute <a href="#essential">essential</a>. Please choose the constant that
13262
is appropriate for an object and do avoid using numbers.
13265
<li> ‘<samp>DISPENSABLE</samp>’ = <code>0</code>, by all actors and <a href="#it_005fmeditation">it_meditation</a>
13266
</li><li> ‘<samp>INDISPENSABLE</samp>’ = <code>1</code>, by all actors and <a href="#it_005fmeditation">it_meditation</a>
13267
</li><li> ‘<samp>PERKIND</samp>’ = <code>2</code>, by all actors
13271
<a name="meditation-types"></a>
13272
<table cellpadding="1" cellspacing="1" border="0">
13273
<tr><td valign="middle" align="left">[<a href="#essentialness" title="Previous section in reading order"> < </a>]</td>
13274
<td valign="middle" align="left">[<a href="#glasses-abilities" title="Next section in reading order"> > </a>]</td>
13275
<td valign="middle" align="left"> </td>
13276
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
13277
<td valign="middle" align="left">[<a href="#Common-Constants" title="Up section"> Up </a>]</td>
13278
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
13279
<td valign="middle" align="left"> </td>
13280
<td valign="middle" align="left"> </td>
13281
<td valign="middle" align="left"> </td>
13282
<td valign="middle" align="left"> </td>
13283
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
13284
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
13285
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
13286
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
13288
<a name="meditation-types-1"></a>
13289
<h3 class="subsection">6.3.9 meditation types</h3>
13291
<p>Number constants for <a href="#it_005fmeditation">it_meditation</a> attribute <a href="#state">state</a>. Please choose
13292
the constant that is appropriate for an object and do avoid using numbers.
13295
<li> ‘<samp>MEDITATION_CALDERA</samp>’ = <code>-3</code>, by <a href="#it_005fmeditation">it_meditation</a>
13296
</li><li> ‘<samp>MEDITATION_HOLLOW</samp>’ = <code>-2</code>, by <a href="#it_005fmeditation">it_meditation</a>
13297
</li><li> ‘<samp>MEDITATION_DENT</samp>’ = <code>-1</code>, by <a href="#it_005fmeditation">it_meditation</a>
13298
</li><li> ‘<samp>MEDITATION_BUMP</samp>’ = <code>1</code>, by <a href="#it_005fmeditation">it_meditation</a>
13299
</li><li> ‘<samp>MEDITATION_HILL</samp>’ = <code>2</code>, by <a href="#it_005fmeditation">it_meditation</a>
13300
</li><li> ‘<samp>MEDITATION_VOLCANO</samp>’ = <code>3</code>, by <a href="#it_005fmeditation">it_meditation</a>
13304
<a name="glasses-abilities"></a>
13305
<table cellpadding="1" cellspacing="1" border="0">
13306
<tr><td valign="middle" align="left">[<a href="#meditation-types" title="Previous section in reading order"> < </a>]</td>
13307
<td valign="middle" align="left">[<a href="#coinslot-acceptance" title="Next section in reading order"> > </a>]</td>
13308
<td valign="middle" align="left"> </td>
13309
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
13310
<td valign="middle" align="left">[<a href="#Common-Constants" title="Up section"> Up </a>]</td>
13311
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
13312
<td valign="middle" align="left"> </td>
13313
<td valign="middle" align="left"> </td>
13314
<td valign="middle" align="left"> </td>
13315
<td valign="middle" align="left"> </td>
13316
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
13317
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
13318
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
13319
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
13321
<a name="glasses-abilities-1"></a>
13322
<h3 class="subsection">6.3.10 glasses abilities</h3>
13324
<p>Number constants for <a href="#it_005fglasses">it_glasses</a> attribute <a href="#state">state</a> and global variable
13325
<a href="#ExtralifeGlasses">ExtralifeGlasses</a>. Please use sums of the constants that are appropriate
13326
for your glasses and do avoid using numbers.
13329
<li> ‘<samp>SPOT_NOTHING</samp>’ = <code>0</code>, by <a href="#it_005fglasses">it_glasses</a>
13330
</li><li> ‘<samp>SPOT_DEATH</samp>’ = <code>1</code>, by <a href="#it_005fglasses">it_glasses</a>
13331
</li><li> ‘<samp>SPOT_HOLLOW</samp>’ = <code>2</code>, by <a href="#it_005fglasses">it_glasses</a>
13332
</li><li> ‘<samp>SPOT_ACTORIMPULSE</samp>’ = <code>4</code>, by <a href="#it_005fglasses">it_glasses</a>
13333
</li><li> ‘<samp>SPOT_SENSOR</samp>’ = <code>8</code>, by <a href="#it_005fglasses">it_glasses</a>
13334
</li><li> ‘<samp>SPOT_LIGHTPASSENGER</samp>’ = <code>16</code>, by <a href="#it_005fglasses">it_glasses</a>
13335
</li><li> ‘<samp>SPOT_TRAP</samp>’ = <code>32</code>, by <a href="#it_005fglasses">it_glasses</a>
13339
<a name="coinslot-acceptance"></a>
13340
<table cellpadding="1" cellspacing="1" border="0">
13341
<tr><td valign="middle" align="left">[<a href="#glasses-abilities" title="Previous section in reading order"> < </a>]</td>
13342
<td valign="middle" align="left">[<a href="#rubberband-length" title="Next section in reading order"> > </a>]</td>
13343
<td valign="middle" align="left"> </td>
13344
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
13345
<td valign="middle" align="left">[<a href="#Common-Constants" title="Up section"> Up </a>]</td>
13346
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
13347
<td valign="middle" align="left"> </td>
13348
<td valign="middle" align="left"> </td>
13349
<td valign="middle" align="left"> </td>
13350
<td valign="middle" align="left"> </td>
13351
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
13352
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
13353
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
13354
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
13356
<a name="coinslot-acceptance-1"></a>
13357
<h3 class="subsection">6.3.11 coinslot acceptance</h3>
13359
<p>Number constants for <a href="#st_005fcoinslot">st_coinslot</a> attributes ‘<samp>interval_*</samp>’. Please
13360
choose the constant that is appropriate for the coinslot and do avoid using
13364
<li> ‘<samp>COIN_IGNORE</samp>’ = <code>-1</code>, by <a href="#st_005fcoinslot">st_coinslot</a>
13365
</li><li> ‘<samp>COIN_REJECT</samp>’ = <code>-2</code>, by <a href="#st_005fcoinslot">st_coinslot</a>
13369
<a name="rubberband-length"></a>
13370
<table cellpadding="1" cellspacing="1" border="0">
13371
<tr><td valign="middle" align="left">[<a href="#coinslot-acceptance" title="Previous section in reading order"> < </a>]</td>
13372
<td valign="middle" align="left">[<a href="#subsoil-kind" title="Next section in reading order"> > </a>]</td>
13373
<td valign="middle" align="left"> </td>
13374
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
13375
<td valign="middle" align="left">[<a href="#Common-Constants" title="Up section"> Up </a>]</td>
13376
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
13377
<td valign="middle" align="left"> </td>
13378
<td valign="middle" align="left"> </td>
13379
<td valign="middle" align="left"> </td>
13380
<td valign="middle" align="left"> </td>
13381
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
13382
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
13383
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
13384
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
13386
<a name="rubberband-length-1"></a>
13387
<h3 class="subsection">6.3.12 rubberband length</h3>
13389
<p>Number constant for <a href="#it_005frubberband">it_rubberband</a>, <a href="#st_005frubberband">st_rubberband</a> and <a href="#ot_005frubberband">ot_rubberband</a>
13390
attribute ‘<samp>length</samp>’. Please choose the constant that is appropriate for the
13391
rubberband length and do avoid using numbers.
13394
<li> ‘<samp>AUTOLENGTH</samp>’ = <code>-1</code>, by <a href="#it_005frubberband">it_rubberband</a>, <a href="#st_005frubberband">st_rubberband</a> and <a href="#ot_005frubberband">ot_rubberband</a>
13398
<a name="subsoil-kind"></a>
13399
<table cellpadding="1" cellspacing="1" border="0">
13400
<tr><td valign="middle" align="left">[<a href="#rubberband-length" title="Previous section in reading order"> < </a>]</td>
13401
<td valign="middle" align="left">[<a href="#screen-scrolling" title="Next section in reading order"> > </a>]</td>
13402
<td valign="middle" align="left"> </td>
13403
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
13404
<td valign="middle" align="left">[<a href="#Common-Constants" title="Up section"> Up </a>]</td>
13405
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
13406
<td valign="middle" align="left"> </td>
13407
<td valign="middle" align="left"> </td>
13408
<td valign="middle" align="left"> </td>
13409
<td valign="middle" align="left"> </td>
13410
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
13411
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
13412
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
13413
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
13415
<a name="subsoil-kind-1"></a>
13416
<h3 class="subsection">6.3.13 subsoil kind</h3>
13418
<p>Number constants for the global attribute <a href="#SubSoil">SubSoil</a>. Please
13419
choose the constant that is appropriate for the SubSoil and do avoid using
13423
<li> ‘<samp>SUBSOIL_ABYSS</samp>’ = <code>0</code>, by <a href="#it_005fexplosion">it_explosion</a>
13424
</li><li> ‘<samp>SUBSOIL_WATER</samp>’ = <code>1</code>, by <a href="#it_005fexplosion">it_explosion</a>
13425
</li><li> ‘<samp>SUBSOIL_AUTO</samp>’ = <code>2</code>, by <a href="#it_005fexplosion">it_explosion</a>
13429
<a name="screen-scrolling"></a>
13430
<table cellpadding="1" cellspacing="1" border="0">
13431
<tr><td valign="middle" align="left">[<a href="#subsoil-kind" title="Previous section in reading order"> < </a>]</td>
13432
<td valign="middle" align="left">[<a href="#map-read-directions" title="Next section in reading order"> > </a>]</td>
13433
<td valign="middle" align="left"> </td>
13434
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
13435
<td valign="middle" align="left">[<a href="#Common-Constants" title="Up section"> Up </a>]</td>
13436
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
13437
<td valign="middle" align="left"> </td>
13438
<td valign="middle" align="left"> </td>
13439
<td valign="middle" align="left"> </td>
13440
<td valign="middle" align="left"> </td>
13441
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
13442
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
13443
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
13444
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
13446
<a name="screen-scrolling-1"></a>
13447
<h3 class="subsection">6.3.14 screen scrolling</h3>
13449
<p>Constants for screen scrolling global attributes <a href="#FollowMethod">FollowMethod</a> and
13450
<a href="#FollowAction">FollowAction</a>. Please choose the constants that are appropriate for
13451
screen scrolling and do avoid using numbers or position values.
13454
<li> ‘<samp>FOLLOW_NO</samp>’ = <code>0</code>, by global <a href="#FollowMethod">FollowMethod</a>
13455
</li><li> ‘<samp>FOLLOW_SCROLL</samp>’ = <code>1</code>, by global <a href="#FollowMethod">FollowMethod</a>
13456
</li><li> ‘<samp>FOLLOW_FLIP</samp>’ = <code>2</code>, by global <a href="#FollowMethod">FollowMethod</a>
13460
<li> ‘<samp>FOLLOW_FULLSCREEN</samp>’ = <code>po(19, 12)</code>, by global <a href="#FollowAction">FollowAction</a>
13461
</li><li> ‘<samp>FOLLOW_HALFSCREEN</samp>’ = <code>po(9.5, 6)</code>, by global <a href="#FollowAction">FollowAction</a>
13465
<a name="map-read-directions"></a>
13466
<table cellpadding="1" cellspacing="1" border="0">
13467
<tr><td valign="middle" align="left">[<a href="#screen-scrolling" title="Previous section in reading order"> < </a>]</td>
13468
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Next section in reading order"> > </a>]</td>
13469
<td valign="middle" align="left"> </td>
13470
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
13471
<td valign="middle" align="left">[<a href="#Common-Constants" title="Up section"> Up </a>]</td>
13472
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
13473
<td valign="middle" align="left"> </td>
13474
<td valign="middle" align="left"> </td>
13475
<td valign="middle" align="left"> </td>
13476
<td valign="middle" align="left"> </td>
13477
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
13478
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
13479
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
13480
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
13482
<a name="map-read-directions-1"></a>
13483
<h3 class="subsection">6.3.15 map read directions</h3>
13485
<p>Constants for map read directions (see <a href="#drawMap">drawMap</a>) and map transformations (see
13486
<a href="#Rotating-and-Mirroring-Maps">Rotating and Mirroring Maps</a> and <a href="#Map-Transformation">Map Transformation</a>). They
13487
are not numbers, to allow advanced operations on them when libmap is loaded, see
13488
<a href="#Map-Transformation-Composition-and-Powers">Map Transformation Composition and Powers</a>.
13491
<li> ‘<samp>MAP_IDENT</samp>’ = no transformation
13492
</li><li> ‘<samp>MAP_ROT_CW</samp>’ = rotate map 90 degrees clockwise
13493
</li><li> ‘<samp>MAP_ROT_180</samp>’ = rotate map 180 degrees
13494
</li><li> ‘<samp>MAP_ROT_CCW</samp>’ = rotate map 90 degrees counter-clockwise
13495
</li><li> ‘<samp>MAP_FLIP_BACKSLASH</samp>’ = flip upper-left and lower-right corners
13496
</li><li> ‘<samp>MAP_FLIP_HORIZONTAL</samp>’ = flip right and left
13497
</li><li> ‘<samp>MAP_FLIP_SLASH</samp>’ = flip upper-right and lower-left corners
13498
</li><li> ‘<samp>MAP_FLIP_VERTICAL</samp>’ = flip up and down
13501
<p>Because map transformations are not numbers, you may not safe them as
13502
attributes of objects. Instead, you have to use ‘<samp>index</samp>’ and
13503
‘<samp>MAP_ALL</samp>’, see <a href="#Map-Transformation-Index-and-MAP_005fALL">Map Transformation Index and MAP_ALL</a>.
13506
<a name="Global-Attributes"></a>
13507
<table cellpadding="1" cellspacing="1" border="0">
13508
<tr><td valign="middle" align="left">[<a href="#map-read-directions" title="Previous section in reading order"> < </a>]</td>
13509
<td valign="middle" align="left">[<a href="#ActorimpulseStrength" title="Next section in reading order"> > </a>]</td>
13510
<td valign="middle" align="left"> </td>
13511
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
13512
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Up section"> Up </a>]</td>
13513
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
13514
<td valign="middle" align="left"> </td>
13515
<td valign="middle" align="left"> </td>
13516
<td valign="middle" align="left"> </td>
13517
<td valign="middle" align="left"> </td>
13518
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
13519
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
13520
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
13521
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
13523
<a name="Global-Attributes-1"></a>
13524
<h2 class="section">6.4 Global Attributes</h2>
13526
<table class="menu" border="0" cellspacing="0">
13527
<tr><td align="left" valign="top"><a href="#ActorimpulseStrength">6.4.1 ActorimpulseStrength</a></td><td> </td><td align="left" valign="top">
13529
<tr><td align="left" valign="top"><a href="#AllowSingleOxyds">6.4.2 AllowSingleOxyds</a></td><td> </td><td align="left" valign="top">
13531
<tr><td align="left" valign="top"><a href="#AllowSuicide">6.4.3 AllowSuicide</a></td><td> </td><td align="left" valign="top">
13533
<tr><td align="left" valign="top"><a href="#AutoRespawn">6.4.4 AutoRespawn</a></td><td> </td><td align="left" valign="top">
13535
<tr><td align="left" valign="top"><a href="#ConserveLevel">6.4.5 ConserveLevel</a></td><td> </td><td align="left" valign="top">
13537
<tr><td align="left" valign="top"><a href="#CrackSpreading">6.4.6 CrackSpreading</a></td><td> </td><td align="left" valign="top">
13539
<tr><td align="left" valign="top"><a href="#CreatingPreview">6.4.7 CreatingPreview</a></td><td> </td><td align="left" valign="top">
13541
<tr><td align="left" valign="top"><a href="#ElectricStrength">6.4.8 ElectricStrength</a></td><td> </td><td align="left" valign="top">
13543
<tr><td align="left" valign="top"><a href="#ExtralifeGlasses">6.4.9 ExtralifeGlasses</a></td><td> </td><td align="left" valign="top">
13545
<tr><td align="left" valign="top"><a href="#FallenPuzzle">6.4.10 FallenPuzzle</a></td><td> </td><td align="left" valign="top">
13547
<tr><td align="left" valign="top"><a href="#FollowAction">6.4.11 FollowAction</a></td><td> </td><td align="left" valign="top">
13549
<tr><td align="left" valign="top"><a href="#FollowGrid">6.4.12 FollowGrid</a></td><td> </td><td align="left" valign="top">
13551
<tr><td align="left" valign="top"><a href="#FollowMethod">6.4.13 FollowMethod</a></td><td> </td><td align="left" valign="top">
13553
<tr><td align="left" valign="top"><a href="#FollowThreshold">6.4.14 FollowThreshold</a></td><td> </td><td align="left" valign="top">
13555
<tr><td align="left" valign="top"><a href="#Fragility">6.4.15 Fragility</a></td><td> </td><td align="left" valign="top">
13557
<tr><td align="left" valign="top"><a href="#FrictionStrength">6.4.16 FrictionStrength</a></td><td> </td><td align="left" valign="top">
13559
<tr><td align="left" valign="top"><a href="#GlobalForce">6.4.17 GlobalForce</a></td><td> </td><td align="left" valign="top">
13561
<tr><td align="left" valign="top"><a href="#Height">6.4.18 Height</a></td><td> </td><td align="left" valign="top">
13563
<tr><td align="left" valign="top"><a href="#InfiniteReincarnation">6.4.19 InfiniteReincarnation</a></td><td> </td><td align="left" valign="top">
13565
<tr><td align="left" valign="top"><a href="#IsDifficult">6.4.20 IsDifficult</a></td><td> </td><td align="left" valign="top">
13567
<tr><td align="left" valign="top"><a href="#MagnetRange">6.4.21 MagnetRange</a></td><td> </td><td align="left" valign="top">
13569
<tr><td align="left" valign="top"><a href="#MagnetStrength">6.4.22 MagnetStrength</a></td><td> </td><td align="left" valign="top">
13571
<tr><td align="left" valign="top"><a href="#MaxOxydColor">6.4.23 MaxOxydColor</a></td><td> </td><td align="left" valign="top">
13573
<tr><td align="left" valign="top"><a href="#MeditationStrength">6.4.24 MeditationStrength</a></td><td> </td><td align="left" valign="top">
13575
<tr><td align="left" valign="top"><a href="#ProvideExtralifes">6.4.25 ProvideExtralifes</a></td><td> </td><td align="left" valign="top">
13577
<tr><td align="left" valign="top"><a href="#RubberViolationStrength">6.4.26 RubberViolationStrength</a></td><td> </td><td align="left" valign="top">
13579
<tr><td align="left" valign="top"><a href="#ShowMoves">6.4.27 ShowMoves</a></td><td> </td><td align="left" valign="top">
13581
<tr><td align="left" valign="top"><a href="#SlopeStrength">6.4.28 SlopeStrength</a></td><td> </td><td align="left" valign="top">
13583
<tr><td align="left" valign="top"><a href="#SublevelNumber">6.4.29 SublevelNumber</a></td><td> </td><td align="left" valign="top">
13585
<tr><td align="left" valign="top"><a href="#SublevelTitle">6.4.30 SublevelTitle</a></td><td> </td><td align="left" valign="top">
13587
<tr><td align="left" valign="top"><a href="#SubSoil">6.4.31 SubSoil</a></td><td> </td><td align="left" valign="top">
13589
<tr><td align="left" valign="top"><a href="#SurviveFinish">6.4.32 SurviveFinish</a></td><td> </td><td align="left" valign="top">
13591
<tr><td align="left" valign="top"><a href="#SwampSinkTime">6.4.33 SwampSinkTime</a></td><td> </td><td align="left" valign="top">
13593
<tr><td align="left" valign="top"><a href="#WaterSinkTime">6.4.34 WaterSinkTime</a></td><td> </td><td align="left" valign="top">
13595
<tr><td align="left" valign="top"><a href="#Width">6.4.35 Width</a></td><td> </td><td align="left" valign="top">
13597
<tr><td align="left" valign="top"><a href="#WormholeRange">6.4.36 WormholeRange</a></td><td> </td><td align="left" valign="top">
13599
<tr><td align="left" valign="top"><a href="#WormholeStrength">6.4.37 WormholeStrength</a></td><td> </td><td align="left" valign="top">
13604
<a name="ActorimpulseStrength"></a>
13605
<table cellpadding="1" cellspacing="1" border="0">
13606
<tr><td valign="middle" align="left">[<a href="#Global-Attributes" title="Previous section in reading order"> < </a>]</td>
13607
<td valign="middle" align="left">[<a href="#AllowSingleOxyds" title="Next section in reading order"> > </a>]</td>
13608
<td valign="middle" align="left"> </td>
13609
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
13610
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
13611
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
13612
<td valign="middle" align="left"> </td>
13613
<td valign="middle" align="left"> </td>
13614
<td valign="middle" align="left"> </td>
13615
<td valign="middle" align="left"> </td>
13616
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
13617
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
13618
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
13619
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
13621
<a name="ActorimpulseStrength-1"></a>
13622
<h3 class="subsection">6.4.1 ActorimpulseStrength</h3>
13624
<p>A global scalar default factor for the actorimpulse stone bumping force. This
13625
global value is only used if no object specific value is set.
13627
<dl compact="compact">
13628
<dt> <b>Type:</b> number</dt>
13629
<dt> <b>Values:</b> float number</dt>
13630
<dt> <b>Default:</b> <code>+200.0</code></dt>
13631
<dt> <b>Access:</b> read/write</dt>
13632
<dt> <b>Support:</b> <a href="#st_005factorimpulse">st_actorimpulse</a></dt>
13636
<a name="AllowSingleOxyds"></a>
13637
<table cellpadding="1" cellspacing="1" border="0">
13638
<tr><td valign="middle" align="left">[<a href="#ActorimpulseStrength" title="Previous section in reading order"> < </a>]</td>
13639
<td valign="middle" align="left">[<a href="#AllowSuicide" title="Next section in reading order"> > </a>]</td>
13640
<td valign="middle" align="left"> </td>
13641
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
13642
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
13643
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
13644
<td valign="middle" align="left"> </td>
13645
<td valign="middle" align="left"> </td>
13646
<td valign="middle" align="left"> </td>
13647
<td valign="middle" align="left"> </td>
13648
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
13649
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
13650
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
13651
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
13653
<a name="AllowSingleOxyds-1"></a>
13654
<h3 class="subsection">6.4.2 AllowSingleOxyds</h3>
13656
<p>A global variable that enables the existence of single unmatched <a href="#st_005foxyd">st_oxyd</a>
13657
stones. Setting this variable to <code>true</code> allows you to set uneven numbers
13658
of oxyd stones for fixed colors. If a level deletes or adds oxyd stones during
13659
runtime a <code>true</code> value avoids possible problems due to temporary uneven
13660
oxyd stone numbers. The default <code>false</code> value causes an error message on
13661
detection of uneven oxyd numbers.
13663
<dl compact="compact">
13664
<dt> <b>Type:</b> bool</dt>
13665
<dt> <b>Values:</b> <code>true</code>, <code>false</code></dt>
13666
<dt> <b>Default:</b> <code>false</code></dt>
13667
<dt> <b>Access:</b> read/write</dt>
13668
<dt> <b>Support:</b> <a href="#st_005foxyd">st_oxyd</a></dt>
13672
<a name="AllowSuicide"></a>
13673
<table cellpadding="1" cellspacing="1" border="0">
13674
<tr><td valign="middle" align="left">[<a href="#AllowSingleOxyds" title="Previous section in reading order"> < </a>]</td>
13675
<td valign="middle" align="left">[<a href="#AutoRespawn" title="Next section in reading order"> > </a>]</td>
13676
<td valign="middle" align="left"> </td>
13677
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
13678
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
13679
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
13680
<td valign="middle" align="left"> </td>
13681
<td valign="middle" align="left"> </td>
13682
<td valign="middle" align="left"> </td>
13683
<td valign="middle" align="left"> </td>
13684
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
13685
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
13686
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
13687
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
13689
<a name="AllowSuicide-1"></a>
13690
<h3 class="subsection">6.4.3 AllowSuicide</h3>
13692
<p>A global variable that enables the user to commit suicide with all owned
13693
actors by pressing ‘<samp>F3</samp>’. As this legacy feature can cause unexpected
13694
shortcuts, you can deny this freedom. A single actor suicide as committed by
13695
activation of an <a href="#it_005fspoon">it_spoon</a> is not affected by this global variable.
13697
<dl compact="compact">
13698
<dt> <b>Type:</b> bool</dt>
13699
<dt> <b>Values:</b> <code>true</code>, <code>false</code></dt>
13700
<dt> <b>Default:</b> <code>true</code></dt>
13701
<dt> <b>Access:</b> read/write</dt>
13702
<dt> <b>Support:</b> no object</dt>
13706
<a name="AutoRespawn"></a>
13707
<table cellpadding="1" cellspacing="1" border="0">
13708
<tr><td valign="middle" align="left">[<a href="#AllowSuicide" title="Previous section in reading order"> < </a>]</td>
13709
<td valign="middle" align="left">[<a href="#ConserveLevel" title="Next section in reading order"> > </a>]</td>
13710
<td valign="middle" align="left"> </td>
13711
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
13712
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
13713
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
13714
<td valign="middle" align="left"> </td>
13715
<td valign="middle" align="left"> </td>
13716
<td valign="middle" align="left"> </td>
13717
<td valign="middle" align="left"> </td>
13718
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
13719
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
13720
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
13721
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
13723
<a name="AutoRespawn-1"></a>
13724
<h3 class="subsection">6.4.4 AutoRespawn</h3>
13726
<p>A global variable that determines, if in absence of an <a href="#it_005fflag">it_flag</a> drop given
13727
respawn position, the last recorded secure actor position should be taken
13728
instead of the starting position, in case the actor dies and is resurrected.
13730
<p>The recorded auto respawn position will be appropriate for common actor deaths
13731
like sinking in <a href="#fl_005fwater">fl_water</a>, falling into <a href="#fl_005fabyss">fl_abyss</a>, hitting of
13732
<a href="#st_005fdeath">st_death</a>, slipping from an <a href="#it_005fstrip">it_strip</a>, being hit by an
13733
<a href="#it_005flaserbeam">it_laserbeam</a>. Even a jump into one these lethal destinations resurrects
13734
the actor onto the position from where the actor started its jump. There is no
13735
danger of being resurrected on floors without <a href="#adhesion-_0028floor_0029">adhesion (floor)</a>.
13737
<p>The usage of <a href="#it_005fflag">it_flag</a> in combination with AutoRespawn is fully supported.
13738
On drop of a flag, the flag position remains the valid respawn position until
13739
a flag is picked up. After a pickup of the flag, what delete the flag defined
13740
position the AutoRespawn position gets active until a flag is dropped again.
13742
<p>Deaths caused by actor collisions, <a href="#it_005fcrack">it_crack</a> and floor shattering
13743
explosions can lead to leathal AutoRespawn positions. Either avoid setting
13744
AutoRespawn to <code>true</code> in such cases or provide an <a href="#it_005fflag">it_flag</a> in such
13747
<p>Shortcuts introduced by AutoRespawn are unlikely, but not generally impossible.
13749
<dl compact="compact">
13750
<dt> <b>Type:</b> bool</dt>
13751
<dt> <b>Values:</b> <code>true</code>, <code>false</code></dt>
13752
<dt> <b>Default:</b> <code>false</code></dt>
13753
<dt> <b>Access:</b> read/write</dt>
13754
<dt> <b>Support:</b> <a href="#ac_005fmarble">ac_marble</a>, <a href="#ac_005fpearl">ac_pearl</a></dt>
13758
<a name="ConserveLevel"></a>
13759
<table cellpadding="1" cellspacing="1" border="0">
13760
<tr><td valign="middle" align="left">[<a href="#AutoRespawn" title="Previous section in reading order"> < </a>]</td>
13761
<td valign="middle" align="left">[<a href="#CrackSpreading" title="Next section in reading order"> > </a>]</td>
13762
<td valign="middle" align="left"> </td>
13763
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
13764
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
13765
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
13766
<td valign="middle" align="left"> </td>
13767
<td valign="middle" align="left"> </td>
13768
<td valign="middle" align="left"> </td>
13769
<td valign="middle" align="left"> </td>
13770
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
13771
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
13772
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
13773
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
13775
<a name="ConserveLevel-1"></a>
13776
<h3 class="subsection">6.4.5 ConserveLevel</h3>
13778
<p>A global variable that determines if a dead actor will be resurrected in case of
13779
<a href="#it_005fextralife">it_extralife</a>s in the gamer’s inventory.
13781
<p>If <code>true</code>, dead actors attached to a player will be resurrected as long as
13782
extralifes are available. If a player has no living actor to control or is
13783
missing the actor’s <a href="#essential">essential</a> constraints, the player is
13784
dead. The level may still continue if a second player is alive. If the gamer has
13785
an <a href="#it_005fyinyang">it_yinyang</a> in his inventory in single user mode, the control switches
13786
to the second player. If all players are dead, a new level game is started.
13788
<p>If the conserve mode is <code>false</code>, no actors will be resurrected. As soon as
13789
the player is dead and the control cannot switch to another player, all dead
13790
actors are resurrected by using extralifes, and the level is restarted without
13791
finishing the level game.
13793
<p>Use <code>false</code> if the level can either be not solved in case of resurrected
13794
actors or would provide a major shortcut. In all other cases, mode <code>true</code>
13795
with proper usage of actors <a href="#essential">essential</a> constraints will be preferable.
13797
<dl compact="compact">
13798
<dt> <b>Type:</b> bool</dt>
13799
<dt> <b>Values:</b> <code>true</code>, <code>false</code></dt>
13800
<dt> <b>Default:</b> <code>true</code></dt>
13801
<dt> <b>Access:</b> read/write</dt>
13802
<dt> <b>Support:</b> no objects</dt>
13806
<a name="CrackSpreading"></a>
13807
<table cellpadding="1" cellspacing="1" border="0">
13808
<tr><td valign="middle" align="left">[<a href="#ConserveLevel" title="Previous section in reading order"> < </a>]</td>
13809
<td valign="middle" align="left">[<a href="#CreatingPreview" title="Next section in reading order"> > </a>]</td>
13810
<td valign="middle" align="left"> </td>
13811
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
13812
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
13813
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
13814
<td valign="middle" align="left"> </td>
13815
<td valign="middle" align="left"> </td>
13816
<td valign="middle" align="left"> </td>
13817
<td valign="middle" align="left"> </td>
13818
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
13819
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
13820
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
13821
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
13823
<a name="CrackSpreading-1"></a>
13824
<h3 class="subsection">6.4.6 CrackSpreading</h3>
13826
<p>A global default value denoting the probability that a brittle floor plate, that
13827
is a floor with an <a href="#it_005fcrack">it_crack</a> on top, causes direct neighboring floors to
13828
either be marked with an invisible crack or to toggle such invisible cracks to
13829
a small visible cracks. A value of <code>1.0</code> ensures that the crack spreads to
13830
the direct neighbors, a value of <code>0.0</code> prohibits the spreading to neighbor
13831
grids. Note that even if crack spreading is prohibited, existing cracks on
13832
neighbor grids may continue disintegrating due to their <a href="#Fragility">Fragility</a>. For
13833
more details see <a href="#it_005fcrack">it_crack</a>.
13835
<dl compact="compact">
13836
<dt> <b>Type:</b> number</dt>
13837
<dt> <b>Values:</b> float number between <code>0.0</code> and <code>1.0</code></dt>
13838
<dt> <b>Default:</b> <code>0.5</code></dt>
13839
<dt> <b>Access:</b> read/write</dt>
13840
<dt> <b>Support:</b> <a href="#it_005fcrack">it_crack</a></dt>
13844
<a name="CreatingPreview"></a>
13845
<table cellpadding="1" cellspacing="1" border="0">
13846
<tr><td valign="middle" align="left">[<a href="#CrackSpreading" title="Previous section in reading order"> < </a>]</td>
13847
<td valign="middle" align="left">[<a href="#ElectricStrength" title="Next section in reading order"> > </a>]</td>
13848
<td valign="middle" align="left"> </td>
13849
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
13850
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
13851
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
13852
<td valign="middle" align="left"> </td>
13853
<td valign="middle" align="left"> </td>
13854
<td valign="middle" align="left"> </td>
13855
<td valign="middle" align="left"> </td>
13856
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
13857
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
13858
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
13859
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
13861
<a name="CreatingPreview-1"></a>
13862
<h3 class="subsection">6.4.7 CreatingPreview</h3>
13864
<p>A global read only variable that indicates if the current level load is just for
13865
creating a preview thumbnail of the level or a real game play. If ‘<samp>true</samp>’,
13866
you can, e.g., change the start-position of the main actor to display another
13867
part of the level in the preview, or hide objects from it. When changing the
13868
initial position, it might be advantageous to also set the
13869
<a href="#Display-Follow-Strategy">Display Follow Strategy</a> to permanent smooth scrolling:
13871
<table><tr><td> </td><td><pre class="example">if wo["CreatingPreview"] then
13872
wo["FollowGrid"] = false
13873
wo["FollowMethod"] = FOLLOW_SCROLL
13875
</pre></td></tr></table>
13877
<dl compact="compact">
13878
<dt> <b>Type:</b> bool</dt>
13879
<dt> <b>Values:</b> <code>true</code>, <code>false</code></dt>
13880
<dt> <b>Default:</b> <code>false</code></dt>
13881
<dt> <b>Access:</b> read only</dt>
13882
<dt> <b>Support:</b> object independent</dt>
13886
<a name="ElectricStrength"></a>
13887
<table cellpadding="1" cellspacing="1" border="0">
13888
<tr><td valign="middle" align="left">[<a href="#CreatingPreview" title="Previous section in reading order"> < </a>]</td>
13889
<td valign="middle" align="left">[<a href="#ExtralifeGlasses" title="Next section in reading order"> > </a>]</td>
13890
<td valign="middle" align="left"> </td>
13891
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
13892
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
13893
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
13894
<td valign="middle" align="left"> </td>
13895
<td valign="middle" align="left"> </td>
13896
<td valign="middle" align="left"> </td>
13897
<td valign="middle" align="left"> </td>
13898
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
13899
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
13900
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
13901
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
13903
<a name="ElectricStrength-1"></a>
13904
<h3 class="subsection">6.4.8 ElectricStrength</h3>
13906
<p>A global scalar default factor for electrical forces. Positive numbers result in
13907
attracting forces for opposite charges and repelling forces for equal signed
13908
charges. Where as negative numbers result in repelling forces for opposite
13909
charges and attracting forces for equal signed charges. This global value is
13910
always multiplied by the charge load of the affected actors. The actor’s charge
13911
load usually results from hits of <a href="#st_005fcharge">st_charge</a>.
13913
<dl compact="compact">
13914
<dt> <b>Type:</b> number</dt>
13915
<dt> <b>Values:</b> float number</dt>
13916
<dt> <b>Default:</b> <code>15.0</code></dt>
13917
<dd><p>Positive number are attracting, negative numbers are repelling.
13919
<dt> <b>Access:</b> read/write</dt>
13920
<dt> <b>Support:</b> <a href="#Actor-Objects">Actor Objects</a></dt>
13924
<a name="ExtralifeGlasses"></a>
13925
<table cellpadding="1" cellspacing="1" border="0">
13926
<tr><td valign="middle" align="left">[<a href="#ElectricStrength" title="Previous section in reading order"> < </a>]</td>
13927
<td valign="middle" align="left">[<a href="#FallenPuzzle" title="Next section in reading order"> > </a>]</td>
13928
<td valign="middle" align="left"> </td>
13929
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
13930
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
13931
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
13932
<td valign="middle" align="left"> </td>
13933
<td valign="middle" align="left"> </td>
13934
<td valign="middle" align="left"> </td>
13935
<td valign="middle" align="left"> </td>
13936
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
13937
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
13938
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
13939
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
13941
<a name="ExtralifeGlasses-1"></a>
13942
<h3 class="subsection">6.4.9 ExtralifeGlasses</h3>
13944
<p>A global variable that defines the <a href="#it_005fglasses">it_glasses</a> type that is generated on
13945
the laser light conversion of an <a href="#it_005fextralife">it_extralife</a>
13947
<dl compact="compact">
13948
<dt> <b>Type:</b> number</dt>
13949
<dt> <b>Values:</b> positive integer number</dt>
13950
<dd><p>A sum out of the constants ‘<samp>SPOT_DEATH</samp>’, ‘<samp>SPOT_HOLLOW</samp>’,
13951
‘<samp>SPOT_ACTORIMPULSE</samp>’, ‘<samp>SPOT_SENSOR</samp>’, ‘<samp>SPOT_LIGHTPASSENGER</samp>’,
13952
‘<samp>SPOT_TRAP</samp>’
13954
<dt> <b>Default:</b> <code>SPOT_DEATH + SPOT_HOLLOW + SPOT_LIGHTPASSENGER</code></dt>
13955
<dt> <b>Access:</b> read/write</dt>
13956
<dt> <b>Support:</b> <a href="#it_005fextralife">it_extralife</a></dt>
13960
<a name="FallenPuzzle"></a>
13961
<table cellpadding="1" cellspacing="1" border="0">
13962
<tr><td valign="middle" align="left">[<a href="#ExtralifeGlasses" title="Previous section in reading order"> < </a>]</td>
13963
<td valign="middle" align="left">[<a href="#FollowAction" title="Next section in reading order"> > </a>]</td>
13964
<td valign="middle" align="left"> </td>
13965
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
13966
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
13967
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
13968
<td valign="middle" align="left"> </td>
13969
<td valign="middle" align="left"> </td>
13970
<td valign="middle" align="left"> </td>
13971
<td valign="middle" align="left"> </td>
13972
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
13973
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
13974
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
13975
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
13977
<a name="FallenPuzzle-1"></a>
13978
<h3 class="subsection">6.4.10 FallenPuzzle</h3>
13980
<p>A global object replacement kind for <a href="#st_005fpuzzle">st_puzzle</a>s fallen into <a href="#fl_005fwater">fl_water</a>
13981
or <a href="#fl_005fabyss">fl_abyss</a>. Besides any floor kind you can use any key of a tile
13982
declaration preceeded by an equal sign <code>'='</code>. By this second method you
13983
can use attributed floor kinds with special values for friction and adhesion.
13985
<p>Additionally you can set this global ‘<samp>FallenPuzzle</samp>’ attribute to
13986
<code>"it_pipe"</code> or <code>"it_stip"</code>. In both cases fallen puzzle objects will
13987
be replaced by items of the given class with the identical connections as the
13988
fallen puzzle stones. Just in case that an item of the given class is already
13989
present at one of the affected grid positions the connections of these will be
13990
adjusted in a special way. An existing <code>"it_pipe"</code> remains unchanged, but
13991
an <code>"it_stip"</code> will add the connections of the fallen puzzle to its own
13994
<dl compact="compact">
13995
<dt> <b>Type:</b> string</dt>
13996
<dt> <b>Values:</b> any floor object kind, <code>"it_strip"</code>, <code>"it_pipe"</code> or <code>"=key"</code>, with key being a valid tile key</dt>
13997
<dt> <b>Default:</b> <code>"fl_gray"</code></dt>
13998
<dt> <b>Access:</b> read/write</dt>
13999
<dt> <b>Support:</b> <a href="#st_005fpuzzle">st_puzzle</a></dt>
14003
<a name="FollowAction"></a>
14004
<table cellpadding="1" cellspacing="1" border="0">
14005
<tr><td valign="middle" align="left">[<a href="#FallenPuzzle" title="Previous section in reading order"> < </a>]</td>
14006
<td valign="middle" align="left">[<a href="#FollowGrid" title="Next section in reading order"> > </a>]</td>
14007
<td valign="middle" align="left"> </td>
14008
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
14009
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
14010
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
14011
<td valign="middle" align="left"> </td>
14012
<td valign="middle" align="left"> </td>
14013
<td valign="middle" align="left"> </td>
14014
<td valign="middle" align="left"> </td>
14015
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
14016
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
14017
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
14018
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
14020
<a name="FollowAction-1"></a>
14021
<h3 class="subsection">6.4.11 FollowAction</h3>
14023
<p>A global variable that describes the action of the display on relocation. This
14024
attribute is introduced for future extensions, but is currently just partially
14025
supported. Just the values listed below are used. Please use this attribute
14026
just as explained in <a href="#Display-Follow-Strategy">Display Follow Strategy</a>.
14028
<dl compact="compact">
14029
<dt> <b>Type:</b> number or position</dt>
14030
<dt> <b>Values:</b> <code>0</code>, <code>FOLLOW_FULLSCREEN</code>, <code>HALFSCREEN</code></dt>
14031
<dd><p>The distance of display readjustment. Positions are used to supply different
14032
values for x and y. The value ‘<samp>{19, 12}</samp>’ is a standard full screen move.
14033
The value ‘<samp>{9.5, 6}</samp>’ is a standard half screen move. A value ‘<samp>0</samp>’
14034
is a minimal smooth move or the default value for grid based moves.
14036
<dt> <b>Default:</b> <code>{19, 12}</code></dt>
14037
<dd><p>Actually the default is mode based (see section <a href="#Display-Follow-Strategy">Display Follow Strategy</a>).
14039
<dt> <b>Access:</b> read/write</dt>
14040
<dt> <b>Support:</b> no objects</dt>
14045
<a name="FollowGrid"></a>
14046
<table cellpadding="1" cellspacing="1" border="0">
14047
<tr><td valign="middle" align="left">[<a href="#FollowAction" title="Previous section in reading order"> < </a>]</td>
14048
<td valign="middle" align="left">[<a href="#FollowMethod" title="Next section in reading order"> > </a>]</td>
14049
<td valign="middle" align="left"> </td>
14050
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
14051
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
14052
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
14053
<td valign="middle" align="left"> </td>
14054
<td valign="middle" align="left"> </td>
14055
<td valign="middle" align="left"> </td>
14056
<td valign="middle" align="left"> </td>
14057
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
14058
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
14059
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
14060
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
14062
<a name="FollowGrid-1"></a>
14063
<h3 class="subsection">6.4.12 FollowGrid</h3>
14065
<p>A global variable that determines if the display is fixed in its static
14066
positions to grids or if it can be scrolled to any pixel position
14067
(see section <a href="#Display-Follow-Strategy">Display Follow Strategy</a>).
14069
<dl compact="compact">
14070
<dt> <b>Type:</b> bool</dt>
14071
<dt> <b>Values:</b> <code>true</code>, <code>false</code></dt>
14072
<dt> <b>Default:</b> <code>true</code></dt>
14073
<dt> <b>Access:</b> read/write</dt>
14074
<dt> <b>Support:</b> no objects</dt>
14078
<a name="FollowMethod"></a>
14079
<table cellpadding="1" cellspacing="1" border="0">
14080
<tr><td valign="middle" align="left">[<a href="#FollowGrid" title="Previous section in reading order"> < </a>]</td>
14081
<td valign="middle" align="left">[<a href="#FollowThreshold" title="Next section in reading order"> > </a>]</td>
14082
<td valign="middle" align="left"> </td>
14083
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
14084
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
14085
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
14086
<td valign="middle" align="left"> </td>
14087
<td valign="middle" align="left"> </td>
14088
<td valign="middle" align="left"> </td>
14089
<td valign="middle" align="left"> </td>
14090
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
14091
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
14092
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
14093
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
14095
<a name="FollowMethod-1"></a>
14096
<h3 class="subsection">6.4.13 FollowMethod</h3>
14098
<p>A global variable that describes the method how the display moves, either not
14099
at all, by pixelwise scrolling, or by flipping to another screen or region
14100
(see section <a href="#Display-Follow-Strategy">Display Follow Strategy</a>).
14102
<dl compact="compact">
14103
<dt> <b>Type:</b> number</dt>
14104
<dt> <b>Values:</b> <code>FOLLOW_NO</code>, <code>FOLLOW_SCROLL</code>, <code>FOLLOW_FLIP</code></dt>
14105
<dt> <b>Default:</b> <code>FOLLOW_FLIP</code></dt>
14106
<dt> <b>Access:</b> read/write</dt>
14107
<dt> <b>Support:</b> no objects</dt>
14111
<a name="FollowThreshold"></a>
14112
<table cellpadding="1" cellspacing="1" border="0">
14113
<tr><td valign="middle" align="left">[<a href="#FollowMethod" title="Previous section in reading order"> < </a>]</td>
14114
<td valign="middle" align="left">[<a href="#Fragility" title="Next section in reading order"> > </a>]</td>
14115
<td valign="middle" align="left"> </td>
14116
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
14117
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
14118
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
14119
<td valign="middle" align="left"> </td>
14120
<td valign="middle" align="left"> </td>
14121
<td valign="middle" align="left"> </td>
14122
<td valign="middle" align="left"> </td>
14123
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
14124
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
14125
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
14126
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
14128
<a name="FollowThreshold-1"></a>
14129
<h3 class="subsection">6.4.14 FollowThreshold</h3>
14131
<p>A global variable that describes the threshold at which a crossing active marble
14132
triggers the display to relocate. It is given as the distance to the screen
14133
boundary (see section <a href="#Display-Follow-Strategy">Display Follow Strategy</a>).
14135
<dl compact="compact">
14136
<dt> <b>Type:</b> number or position</dt>
14137
<dt> <b>Values:</b> 0 or positive number, or a pair of two positive numbers</dt>
14138
<dd><p>The distance from the screen boundary at which the displays readjusts. Positions
14139
are used to supply different values for x and y. All values need to be less
14140
than half of the screen size.
14142
<dt> <b>Default:</b> <code>0.5</code></dt>
14143
<dt> <b>Access:</b> read/write</dt>
14144
<dt> <b>Support:</b> no objects</dt>
14148
<a name="Fragility"></a>
14149
<table cellpadding="1" cellspacing="1" border="0">
14150
<tr><td valign="middle" align="left">[<a href="#FollowThreshold" title="Previous section in reading order"> < </a>]</td>
14151
<td valign="middle" align="left">[<a href="#FrictionStrength" title="Next section in reading order"> > </a>]</td>
14152
<td valign="middle" align="left"> </td>
14153
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
14154
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
14155
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
14156
<td valign="middle" align="left"> </td>
14157
<td valign="middle" align="left"> </td>
14158
<td valign="middle" align="left"> </td>
14159
<td valign="middle" align="left"> </td>
14160
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
14161
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
14162
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
14163
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
14165
<a name="Fragility-1"></a>
14166
<h3 class="subsection">6.4.15 Fragility</h3>
14168
<p>A global default value denoting the probability that a brittle floor plate, that
14169
is a floor with an <a href="#it_005fcrack">it_crack</a> on top, continues to disintegrate on events
14170
like an actor entering, passing a neighboring <a href="#it_005fcrack">it_crack</a>, nearby explosions
14171
or fire heating. A value of <code>1.0</code> ensures that the crack continues to
14172
disintegrates on these events, a value of <code>0.0</code> prohibits visible cracks
14173
to get larger. This default is superseded by <a href="#fragility-_0028floor_0029">fragility (floor)</a> and
14174
<a href="#it_005fcrack">it_crack</a> specific values.
14176
<dl compact="compact">
14177
<dt> <b>Type:</b> number</dt>
14178
<dt> <b>Values:</b> float number between <code>0.0</code> and <code>1.0</code></dt>
14179
<dt> <b>Default:</b> <code>1.0</code></dt>
14180
<dt> <b>Access:</b> read/write</dt>
14181
<dt> <b>Support:</b> <a href="#it_005fcrack">it_crack</a> and <a href="#Floor-Objects">Floor Objects</a></dt>
14185
<a name="FrictionStrength"></a>
14186
<table cellpadding="1" cellspacing="1" border="0">
14187
<tr><td valign="middle" align="left">[<a href="#Fragility" title="Previous section in reading order"> < </a>]</td>
14188
<td valign="middle" align="left">[<a href="#GlobalForce" title="Next section in reading order"> > </a>]</td>
14189
<td valign="middle" align="left"> </td>
14190
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
14191
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
14192
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
14193
<td valign="middle" align="left"> </td>
14194
<td valign="middle" align="left"> </td>
14195
<td valign="middle" align="left"> </td>
14196
<td valign="middle" align="left"> </td>
14197
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
14198
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
14199
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
14200
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
14202
<a name="FrictionStrength-1"></a>
14203
<h3 class="subsection">6.4.16 FrictionStrength</h3>
14205
<p>A global scalar default factor for floor friction values. This global value is
14206
always multiplied by the floor specific friction on calculation of the friction
14207
force applied to actors.
14209
<dl compact="compact">
14210
<dt> <b>Type:</b> number</dt>
14211
<dt> <b>Values:</b> float number</dt>
14212
<dt> <b>Default:</b> <code>1.0</code></dt>
14213
<dt> <b>Access:</b> read/write</dt>
14214
<dt> <b>Support:</b> all floors</dt>
14218
<a name="GlobalForce"></a>
14219
<table cellpadding="1" cellspacing="1" border="0">
14220
<tr><td valign="middle" align="left">[<a href="#FrictionStrength" title="Previous section in reading order"> < </a>]</td>
14221
<td valign="middle" align="left">[<a href="#Height" title="Next section in reading order"> > </a>]</td>
14222
<td valign="middle" align="left"> </td>
14223
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
14224
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
14225
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
14226
<td valign="middle" align="left"> </td>
14227
<td valign="middle" align="left"> </td>
14228
<td valign="middle" align="left"> </td>
14229
<td valign="middle" align="left"> </td>
14230
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
14231
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
14232
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
14233
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
14235
<a name="GlobalForce-1"></a>
14236
<h3 class="subsection">6.4.17 GlobalForce</h3>
14238
<p>A global constant force that is added to every actor on every grid. The force
14239
is given as a vector constant by a value of type <a href="#Position">Position</a>.
14241
<dl compact="compact">
14242
<dt> <b>Type:</b> <a href="#Position">Position</a></dt>
14243
<dt> <b>Values:</b> pair of float numbers</dt>
14244
<dt> <b>Default:</b> <code>po(0.0, 0.0)</code></dt>
14245
<dt> <b>Access:</b> read/write</dt>
14246
<dt> <b>Support:</b> all floors</dt>
14250
<a name="Height"></a>
14251
<table cellpadding="1" cellspacing="1" border="0">
14252
<tr><td valign="middle" align="left">[<a href="#GlobalForce" title="Previous section in reading order"> < </a>]</td>
14253
<td valign="middle" align="left">[<a href="#InfiniteReincarnation" title="Next section in reading order"> > </a>]</td>
14254
<td valign="middle" align="left"> </td>
14255
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
14256
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
14257
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
14258
<td valign="middle" align="left"> </td>
14259
<td valign="middle" align="left"> </td>
14260
<td valign="middle" align="left"> </td>
14261
<td valign="middle" align="left"> </td>
14262
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
14263
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
14264
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
14265
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
14267
<a name="Height-1"></a>
14268
<h3 class="subsection">6.4.18 Height</h3>
14270
<p>A global read only variable reports the height of the world in grid units.
14271
This is set by the initial world constructor call
14272
(see section <a href="#World-Creation">World Creation</a>).
14274
<dl compact="compact">
14275
<dt> <b>Type:</b> number</dt>
14276
<dt> <b>Values:</b> positive integer number</dt>
14277
<dt> <b>Default:</b> <code>?</code></dt>
14278
<dt> <b>Access:</b> read only</dt>
14279
<dt> <b>Support:</b> object independent</dt>
14283
<a name="InfiniteReincarnation"></a>
14284
<table cellpadding="1" cellspacing="1" border="0">
14285
<tr><td valign="middle" align="left">[<a href="#Height" title="Previous section in reading order"> < </a>]</td>
14286
<td valign="middle" align="left">[<a href="#IsDifficult" title="Next section in reading order"> > </a>]</td>
14287
<td valign="middle" align="left"> </td>
14288
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
14289
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
14290
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
14291
<td valign="middle" align="left"> </td>
14292
<td valign="middle" align="left"> </td>
14293
<td valign="middle" align="left"> </td>
14294
<td valign="middle" align="left"> </td>
14295
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
14296
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
14297
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
14298
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
14300
<a name="InfiniteReincarnation-1"></a>
14301
<h3 class="subsection">6.4.19 InfiniteReincarnation</h3>
14303
<p>A global variable that switches off the <a href="#it_005fextralife">it_extralife</a> consumption on
14304
resurrection of a dead actor. Usually the number of extralifes is counted,
14305
the items are explicitly set or an <a href="#st_005fdispenser">st_dispenser</a> for extralifes is located
14306
at strategic positions. The main purpose of this flag is the support of easy
14307
modes for very lethal levels, that should give the user the opportunity to
14308
exercise difficult patterns. Usage of this flag for the regular difficult mode
14311
<dl compact="compact">
14312
<dt> <b>Type:</b> bool</dt>
14313
<dt> <b>Values:</b> <code>true</code>, <code>false</code></dt>
14314
<dt> <b>Default:</b> <code>false</code></dt>
14315
<dt> <b>Access:</b> read/write</dt>
14316
<dt> <b>Support:</b> object independent</dt>
14320
<a name="IsDifficult"></a>
14321
<table cellpadding="1" cellspacing="1" border="0">
14322
<tr><td valign="middle" align="left">[<a href="#InfiniteReincarnation" title="Previous section in reading order"> < </a>]</td>
14323
<td valign="middle" align="left">[<a href="#MagnetRange" title="Next section in reading order"> > </a>]</td>
14324
<td valign="middle" align="left"> </td>
14325
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
14326
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
14327
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
14328
<td valign="middle" align="left"> </td>
14329
<td valign="middle" align="left"> </td>
14330
<td valign="middle" align="left"> </td>
14331
<td valign="middle" align="left"> </td>
14332
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
14333
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
14334
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
14335
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
14337
<a name="IsDifficult-1"></a>
14338
<h3 class="subsection">6.4.20 IsDifficult</h3>
14340
<p>A global read only variable that defines the current difficulty mode selected
14341
by the user. All differences of easy and difficult mode within the level should
14342
be coded solely in dependence of this flag. If a level that supports an easy
14343
mode the author needs to declare it in the XML header in the element
14344
<a href="#g_t_003cmodes_003e"><modes></a>.
14346
<dl compact="compact">
14347
<dt> <b>Type:</b> bool</dt>
14348
<dt> <b>Values:</b> <code>true</code>, <code>false</code></dt>
14349
<dt> <b>Default:</b> <code>true</code></dt>
14350
<dt> <b>Access:</b> read only</dt>
14351
<dt> <b>Support:</b> object independent</dt>
14355
<a name="MagnetRange"></a>
14356
<table cellpadding="1" cellspacing="1" border="0">
14357
<tr><td valign="middle" align="left">[<a href="#IsDifficult" title="Previous section in reading order"> < </a>]</td>
14358
<td valign="middle" align="left">[<a href="#MagnetStrength" title="Next section in reading order"> > </a>]</td>
14359
<td valign="middle" align="left"> </td>
14360
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
14361
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
14362
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
14363
<td valign="middle" align="left"> </td>
14364
<td valign="middle" align="left"> </td>
14365
<td valign="middle" align="left"> </td>
14366
<td valign="middle" align="left"> </td>
14367
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
14368
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
14369
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
14370
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
14372
<a name="MagnetRange-1"></a>
14373
<h3 class="subsection">6.4.21 MagnetRange</h3>
14375
<p>A global default distance up to which magnets apply forces to actors. This
14376
global value is only used if no object specific value is set.
14378
<dl compact="compact">
14379
<dt> <b>Type:</b> number</dt>
14380
<dt> <b>Values:</b> positive float number or zero</dt>
14381
<dt> <b>Default:</b> <code>10.0</code></dt>
14382
<dt> <b>Access:</b> read/write</dt>
14383
<dt> <b>Support:</b> <a href="#it_005fmagnet">it_magnet</a></dt>
14387
<a name="MagnetStrength"></a>
14388
<table cellpadding="1" cellspacing="1" border="0">
14389
<tr><td valign="middle" align="left">[<a href="#MagnetRange" title="Previous section in reading order"> < </a>]</td>
14390
<td valign="middle" align="left">[<a href="#MaxOxydColor" title="Next section in reading order"> > </a>]</td>
14391
<td valign="middle" align="left"> </td>
14392
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
14393
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
14394
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
14395
<td valign="middle" align="left"> </td>
14396
<td valign="middle" align="left"> </td>
14397
<td valign="middle" align="left"> </td>
14398
<td valign="middle" align="left"> </td>
14399
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
14400
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
14401
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
14402
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
14404
<a name="MagnetStrength-1"></a>
14405
<h3 class="subsection">6.4.22 MagnetStrength</h3>
14407
<p>A global scalar default factor for magnet forces. Positive numbers are
14408
attracting forces where as negative numbers are repelling forces. This global
14409
value is only used if no object specific value is set.
14411
<dl compact="compact">
14412
<dt> <b>Type:</b> number</dt>
14413
<dt> <b>Values:</b> float number</dt>
14414
<dt> <b>Default:</b> <code>30.0</code></dt>
14415
<dd><p>Positive number are attracting, negative numbers are repelling.
14417
<dt> <b>Access:</b> read/write</dt>
14418
<dt> <b>Support:</b> <a href="#it_005fmagnet">it_magnet</a></dt>
14422
<a name="MaxOxydColor"></a>
14423
<table cellpadding="1" cellspacing="1" border="0">
14424
<tr><td valign="middle" align="left">[<a href="#MagnetStrength" title="Previous section in reading order"> < </a>]</td>
14425
<td valign="middle" align="left">[<a href="#MeditationStrength" title="Next section in reading order"> > </a>]</td>
14426
<td valign="middle" align="left"> </td>
14427
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
14428
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
14429
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
14430
<td valign="middle" align="left"> </td>
14431
<td valign="middle" align="left"> </td>
14432
<td valign="middle" align="left"> </td>
14433
<td valign="middle" align="left"> </td>
14434
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
14435
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
14436
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
14437
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
14439
<a name="MaxOxydColor-1"></a>
14440
<h3 class="subsection">6.4.23 MaxOxydColor</h3>
14442
<p>A global variable that limits the number of colors assigned to autocolored
14443
<a href="#st_005foxyd">st_oxyd</a>. Be careful with increasing this value beyond its default.
14445
<dl compact="compact">
14446
<dt> <b>Type:</b> number</dt>
14447
<dt> <b>Values:</b> <code>OXYD_BLUE</code>, ... <code>OXYD_BROWN</code></dt>
14448
<dt> <b>Default:</b> <code>OXYD_BLACK</code></dt>
14449
<dt> <b>Access:</b> read/write</dt>
14450
<dt> <b>Support:</b> <a href="#st_005foxyd">st_oxyd</a></dt>
14454
<a name="MeditationStrength"></a>
14455
<table cellpadding="1" cellspacing="1" border="0">
14456
<tr><td valign="middle" align="left">[<a href="#MaxOxydColor" title="Previous section in reading order"> < </a>]</td>
14457
<td valign="middle" align="left">[<a href="#ProvideExtralifes" title="Next section in reading order"> > </a>]</td>
14458
<td valign="middle" align="left"> </td>
14459
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
14460
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
14461
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
14462
<td valign="middle" align="left"> </td>
14463
<td valign="middle" align="left"> </td>
14464
<td valign="middle" align="left"> </td>
14465
<td valign="middle" align="left"> </td>
14466
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
14467
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
14468
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
14469
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
14471
<a name="MeditationStrength-1"></a>
14472
<h3 class="subsection">6.4.24 MeditationStrength</h3>
14474
<p>A global scalar default factor for <a href="#it_005fmeditation">it_meditation</a> slope forces. Positive
14475
numbers are downhill forces that let actors roll into dents and hollows and roll
14476
down from hills and bumps.
14478
<dl compact="compact">
14479
<dt> <b>Type:</b> number</dt>
14480
<dt> <b>Values:</b> float number</dt>
14481
<dt> <b>Default:</b> <code>1.0</code></dt>
14482
<dt> <b>Access:</b> read/write</dt>
14483
<dt> <b>Support:</b> <a href="#it_005fmeditation">it_meditation</a></dt>
14487
<a name="ProvideExtralifes"></a>
14488
<table cellpadding="1" cellspacing="1" border="0">
14489
<tr><td valign="middle" align="left">[<a href="#MeditationStrength" title="Previous section in reading order"> < </a>]</td>
14490
<td valign="middle" align="left">[<a href="#RubberViolationStrength" title="Next section in reading order"> > </a>]</td>
14491
<td valign="middle" align="left"> </td>
14492
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
14493
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
14494
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
14495
<td valign="middle" align="left"> </td>
14496
<td valign="middle" align="left"> </td>
14497
<td valign="middle" align="left"> </td>
14498
<td valign="middle" align="left"> </td>
14499
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
14500
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
14501
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
14502
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
14504
<a name="ProvideExtralifes-1"></a>
14505
<h3 class="subsection">6.4.25 ProvideExtralifes</h3>
14507
<p>A global variable that causes two <a href="#it_005fextralife">it_extralife</a>s to be added to both player
14508
inventories on start of a new level. Set it to ‘<samp>false</samp>’ if a gamer could
14509
misuse these items. It is important to set this attribute before the world is
14510
created (see section <a href="#World-Creation">World Creation</a>).
14512
<dl compact="compact">
14513
<dt> <b>Type:</b> bool</dt>
14514
<dt> <b>Values:</b> <code>true</code>, <code>false</code></dt>
14515
<dt> <b>Default:</b> <code>true</code></dt>
14516
<dt> <b>Access:</b> read/write</dt>
14517
<dt> <b>Support:</b> object independent</dt>
14521
<a name="RubberViolationStrength"></a>
14522
<table cellpadding="1" cellspacing="1" border="0">
14523
<tr><td valign="middle" align="left">[<a href="#ProvideExtralifes" title="Previous section in reading order"> < </a>]</td>
14524
<td valign="middle" align="left">[<a href="#ShowMoves" title="Next section in reading order"> > </a>]</td>
14525
<td valign="middle" align="left"> </td>
14526
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
14527
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
14528
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
14529
<td valign="middle" align="left"> </td>
14530
<td valign="middle" align="left"> </td>
14531
<td valign="middle" align="left"> </td>
14532
<td valign="middle" align="left"> </td>
14533
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
14534
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
14535
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
14536
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
14538
<a name="RubberViolationStrength-1"></a>
14539
<h3 class="subsection">6.4.26 RubberViolationStrength</h3>
14541
<p>A global scalar default factor for the <a href="#ot_005frubberband">ot_rubberband</a> force that is applied
14542
to actors if the length of the rubberband exceeds the given min or max limits.
14543
This can happen due to extraordinary events like actor warping, actor
14544
resurrection, moving anchor stones or simply new rubberbands that are created
14545
with off limit length.
14547
<dl compact="compact">
14548
<dt> <b>Type:</b> number</dt>
14549
<dt> <b>Values:</b> positive float number</dt>
14550
<dt> <b>Default:</b> <code>50.0</code></dt>
14551
<dt> <b>Access:</b> read/write</dt>
14552
<dt> <b>Support:</b> <a href="#ot_005frubberband">ot_rubberband</a></dt>
14556
<a name="ShowMoves"></a>
14557
<table cellpadding="1" cellspacing="1" border="0">
14558
<tr><td valign="middle" align="left">[<a href="#RubberViolationStrength" title="Previous section in reading order"> < </a>]</td>
14559
<td valign="middle" align="left">[<a href="#SlopeStrength" title="Next section in reading order"> > </a>]</td>
14560
<td valign="middle" align="left"> </td>
14561
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
14562
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
14563
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
14564
<td valign="middle" align="left"> </td>
14565
<td valign="middle" align="left"> </td>
14566
<td valign="middle" align="left"> </td>
14567
<td valign="middle" align="left"> </td>
14568
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
14569
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
14570
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
14571
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
14573
<a name="ShowMoves-1"></a>
14574
<h3 class="subsection">6.4.27 ShowMoves</h3>
14576
<p>A global variable that enables or disables the display of the stone push
14577
counter besides the level time. It is mainly used in Sokoban like levels.
14579
<dl compact="compact">
14580
<dt> <b>Type:</b> bool</dt>
14581
<dt> <b>Values:</b> <code>true</code>, <code>false</code></dt>
14582
<dt> <b>Default:</b> <code>false</code></dt>
14583
<dt> <b>Access:</b> read/write</dt>
14584
<dt> <b>Support:</b> object independent</dt>
14588
<a name="SlopeStrength"></a>
14589
<table cellpadding="1" cellspacing="1" border="0">
14590
<tr><td valign="middle" align="left">[<a href="#ShowMoves" title="Previous section in reading order"> < </a>]</td>
14591
<td valign="middle" align="left">[<a href="#SublevelNumber" title="Next section in reading order"> > </a>]</td>
14592
<td valign="middle" align="left"> </td>
14593
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
14594
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
14595
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
14596
<td valign="middle" align="left"> </td>
14597
<td valign="middle" align="left"> </td>
14598
<td valign="middle" align="left"> </td>
14599
<td valign="middle" align="left"> </td>
14600
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
14601
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
14602
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
14603
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
14605
<a name="SlopeStrength-1"></a>
14606
<h3 class="subsection">6.4.28 SlopeStrength</h3>
14608
<p>A global scalar default factor for <a href="#fl_005fslope">fl_slope</a> floor gradient forces. This
14609
global value is used if no slope object specific strength factor is supplied.
14611
<dl compact="compact">
14612
<dt> <b>Type:</b> number</dt>
14613
<dt> <b>Values:</b> float number</dt>
14614
<dt> <b>Default:</b> <code>25.0</code></dt>
14615
<dt> <b>Access:</b> read/write</dt>
14616
<dt> <b>Support:</b> <a href="#fl_005fslope">fl_slope</a></dt>
14620
<a name="SublevelNumber"></a>
14621
<table cellpadding="1" cellspacing="1" border="0">
14622
<tr><td valign="middle" align="left">[<a href="#SlopeStrength" title="Previous section in reading order"> < </a>]</td>
14623
<td valign="middle" align="left">[<a href="#SublevelTitle" title="Next section in reading order"> > </a>]</td>
14624
<td valign="middle" align="left"> </td>
14625
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
14626
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
14627
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
14628
<td valign="middle" align="left"> </td>
14629
<td valign="middle" align="left"> </td>
14630
<td valign="middle" align="left"> </td>
14631
<td valign="middle" align="left"> </td>
14632
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
14633
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
14634
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
14635
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
14637
<a name="SublevelNumber-1"></a>
14638
<h3 class="subsection">6.4.29 SublevelNumber</h3>
14640
<p>A global variable that is only used by <a href="#Multilevel-Files">Multilevel Files</a>. It contains the
14641
number of the sublevel that should be loaded and played. The number is preset
14642
to a value between <code>1</code> and the ‘<samp>quantity</samp>’ given in the
14643
<a href="#Info-metadata">Info metadata</a>.
14645
<dl compact="compact">
14646
<dt> <b>Type:</b> int</dt>
14647
<dt> <b>Values:</b> positive integer numbers</dt>
14648
<dt> <b>Default:</b> <code>1</code></dt>
14649
<dt> <b>Access:</b> read only</dt>
14650
<dt> <b>Support:</b> no objects</dt>
14654
<a name="SublevelTitle"></a>
14655
<table cellpadding="1" cellspacing="1" border="0">
14656
<tr><td valign="middle" align="left">[<a href="#SublevelNumber" title="Previous section in reading order"> < </a>]</td>
14657
<td valign="middle" align="left">[<a href="#SubSoil" title="Next section in reading order"> > </a>]</td>
14658
<td valign="middle" align="left"> </td>
14659
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
14660
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
14661
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
14662
<td valign="middle" align="left"> </td>
14663
<td valign="middle" align="left"> </td>
14664
<td valign="middle" align="left"> </td>
14665
<td valign="middle" align="left"> </td>
14666
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
14667
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
14668
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
14669
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
14671
<a name="SublevelTitle-1"></a>
14672
<h3 class="subsection">6.4.30 SublevelTitle</h3>
14674
<p>A global variable that is only used by <a href="#Multilevel-Files">Multilevel Files</a>. If the sublevel
14675
provides an individual title this variable must be set on level load to the
14676
title string. An empty string value causes an auto generated title based on
14677
the title given in the <a href="#g_t_003cidentity_003e"><identity></a> element and the <a href="#SublevelNumber">SublevelNumber</a>.
14679
<dl compact="compact">
14680
<dt> <b>Type:</b> string</dt>
14681
<dt> <b>Values:</b> any string</dt>
14682
<dt> <b>Default:</b> <code>""</code></dt>
14683
<dt> <b>Access:</b> read/write</dt>
14684
<dt> <b>Support:</b> no objects</dt>
14688
<a name="SubSoil"></a>
14689
<table cellpadding="1" cellspacing="1" border="0">
14690
<tr><td valign="middle" align="left">[<a href="#SublevelTitle" title="Previous section in reading order"> < </a>]</td>
14691
<td valign="middle" align="left">[<a href="#SurviveFinish" title="Next section in reading order"> > </a>]</td>
14692
<td valign="middle" align="left"> </td>
14693
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
14694
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
14695
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
14696
<td valign="middle" align="left"> </td>
14697
<td valign="middle" align="left"> </td>
14698
<td valign="middle" align="left"> </td>
14699
<td valign="middle" align="left"> </td>
14700
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
14701
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
14702
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
14703
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
14705
<a name="SubSoil-1"></a>
14706
<h3 class="subsection">6.4.31 SubSoil</h3>
14708
<p>A global variable that defines the subsoil which replaces a floor on its
14709
physical destruction. <a href="#it_005fbomb">it_bomb</a>s and <a href="#ot_005fcannonball">ot_cannonball</a>s can cause
14710
<a href="#it_005fexplosion">it_explosion</a>_debris which in turn dissolves the floor to the base
14711
subsoil. The special value <code>SUBSOIL_AUTO</code> determines the subsoil based
14712
on the surrounding floors. Any <a href="#fl_005fwater">fl_water</a> on a direct neighboring floor
14713
causes the floor to be replaced by water, too. Otherwise the default
14714
<a href="#fl_005fabyss">fl_abyss</a> will be used as replacement.
14716
<dl compact="compact">
14717
<dt> <b>Type:</b> int</dt>
14718
<dt> <b>Values:</b> <code>SUBSOIL_ABYSS</code>, <code>SUBSOIL_WATER</code>, <code>SUBSOIL_AUTO</code></dt>
14719
<dt> <b>Default:</b> <code>SUBSOIL_ABYSS</code></dt>
14720
<dt> <b>Access:</b> read/write</dt>
14721
<dt> <b>Support:</b> <a href="#it_005fexplosion">it_explosion</a></dt>
14725
<a name="SurviveFinish"></a>
14726
<table cellpadding="1" cellspacing="1" border="0">
14727
<tr><td valign="middle" align="left">[<a href="#SubSoil" title="Previous section in reading order"> < </a>]</td>
14728
<td valign="middle" align="left">[<a href="#SwampSinkTime" title="Next section in reading order"> > </a>]</td>
14729
<td valign="middle" align="left"> </td>
14730
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
14731
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
14732
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
14733
<td valign="middle" align="left"> </td>
14734
<td valign="middle" align="left"> </td>
14735
<td valign="middle" align="left"> </td>
14736
<td valign="middle" align="left"> </td>
14737
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
14738
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
14739
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
14740
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
14742
<a name="SurviveFinish-1"></a>
14743
<h3 class="subsection">6.4.32 SurviveFinish</h3>
14745
<p>A global variable that defines if the essential actors have to survive the
14746
finish of the game (see section <a href="#Ending-Conditions">Ending Conditions</a>). With this attribute set to
14747
‘<samp>false</samp>’ a gamer can sacrifice an essential actor to finish the level in the
14748
same step in some subtle cases.
14750
<dl compact="compact">
14751
<dt> <b>Type:</b> bool</dt>
14752
<dt> <b>Values:</b> <code>true</code>, <code>false</code></dt>
14753
<dt> <b>Default:</b> <code>true</code></dt>
14754
<dt> <b>Access:</b> read/write</dt>
14755
<dt> <b>Support:</b> object independent</dt>
14759
<a name="SwampSinkTime"></a>
14760
<table cellpadding="1" cellspacing="1" border="0">
14761
<tr><td valign="middle" align="left">[<a href="#SurviveFinish" title="Previous section in reading order"> < </a>]</td>
14762
<td valign="middle" align="left">[<a href="#WaterSinkTime" title="Next section in reading order"> > </a>]</td>
14763
<td valign="middle" align="left"> </td>
14764
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
14765
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
14766
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
14767
<td valign="middle" align="left"> </td>
14768
<td valign="middle" align="left"> </td>
14769
<td valign="middle" align="left"> </td>
14770
<td valign="middle" align="left"> </td>
14771
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
14772
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
14773
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
14774
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
14776
<a name="SwampSinkTime-1"></a>
14777
<h3 class="subsection">6.4.33 SwampSinkTime</h3>
14779
<p>A global default for the time it takes a static actor to sink in <a href="#fl_005fswamp">fl_swamp</a>.
14780
Fast moving actors will need slightly more time than static actors.
14782
<dl compact="compact">
14783
<dt> <b>Type:</b> number or <code>nil</code></dt>
14784
<dt> <b>Values:</b> positive float number or zero or <code>nil</code></dt>
14785
<dd><p>Sink time in seconds or ‘<samp>nil</samp>’ for an infinite time aka not sinking. Time
14786
values smaller than approximately 0.7 ms will be rounded down to 0 ms.
14788
<dt> <b>Default:</b> <code>1.75</code></dt>
14789
<dt> <b>Access:</b> read/write</dt>
14790
<dt> <b>Support:</b> <a href="#fl_005fswamp">fl_swamp</a></dt>
14794
<a name="WaterSinkTime"></a>
14795
<table cellpadding="1" cellspacing="1" border="0">
14796
<tr><td valign="middle" align="left">[<a href="#SwampSinkTime" title="Previous section in reading order"> < </a>]</td>
14797
<td valign="middle" align="left">[<a href="#Width" title="Next section in reading order"> > </a>]</td>
14798
<td valign="middle" align="left"> </td>
14799
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
14800
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
14801
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
14802
<td valign="middle" align="left"> </td>
14803
<td valign="middle" align="left"> </td>
14804
<td valign="middle" align="left"> </td>
14805
<td valign="middle" align="left"> </td>
14806
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
14807
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
14808
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
14809
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
14811
<a name="WaterSinkTime-1"></a>
14812
<h3 class="subsection">6.4.34 WaterSinkTime</h3>
14814
<p>A global default for the time it takes an actor to sink in <a href="#fl_005fwater">fl_water</a>.
14816
<dl compact="compact">
14817
<dt> <b>Type:</b> number or <code>nil</code></dt>
14818
<dt> <b>Values:</b> positive float number or zero or <code>nil</code></dt>
14819
<dd><p>Sink time in seconds or ‘<samp>nil</samp>’ for an infinite time aka not sinking. Time
14820
values smaller than approximately 0.7 ms will be rounded down to 0 ms.
14822
<dt> <b>Default:</b> <code>0.0</code></dt>
14823
<dt> <b>Access:</b> read/write</dt>
14824
<dt> <b>Support:</b> <a href="#fl_005fwater">fl_water</a></dt>
14828
<a name="Width"></a>
14829
<table cellpadding="1" cellspacing="1" border="0">
14830
<tr><td valign="middle" align="left">[<a href="#WaterSinkTime" title="Previous section in reading order"> < </a>]</td>
14831
<td valign="middle" align="left">[<a href="#WormholeRange" title="Next section in reading order"> > </a>]</td>
14832
<td valign="middle" align="left"> </td>
14833
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
14834
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
14835
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
14836
<td valign="middle" align="left"> </td>
14837
<td valign="middle" align="left"> </td>
14838
<td valign="middle" align="left"> </td>
14839
<td valign="middle" align="left"> </td>
14840
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
14841
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
14842
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
14843
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
14845
<a name="Width-1"></a>
14846
<h3 class="subsection">6.4.35 Width</h3>
14848
<p>A global read only variable reports the width of the world in grid units.
14849
This is set by the initial world constructor call
14850
(see section <a href="#World-Creation">World Creation</a>).
14852
<dl compact="compact">
14853
<dt> <b>Type:</b> number</dt>
14854
<dt> <b>Values:</b> positive integer number</dt>
14855
<dt> <b>Default:</b> <code>?</code></dt>
14856
<dt> <b>Access:</b> read only</dt>
14857
<dt> <b>Support:</b> object independent</dt>
14862
<a name="WormholeRange"></a>
14863
<table cellpadding="1" cellspacing="1" border="0">
14864
<tr><td valign="middle" align="left">[<a href="#Width" title="Previous section in reading order"> < </a>]</td>
14865
<td valign="middle" align="left">[<a href="#WormholeStrength" title="Next section in reading order"> > </a>]</td>
14866
<td valign="middle" align="left"> </td>
14867
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
14868
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
14869
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
14870
<td valign="middle" align="left"> </td>
14871
<td valign="middle" align="left"> </td>
14872
<td valign="middle" align="left"> </td>
14873
<td valign="middle" align="left"> </td>
14874
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
14875
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
14876
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
14877
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
14879
<a name="WormholeRange-1"></a>
14880
<h3 class="subsection">6.4.36 WormholeRange</h3>
14882
<p>A global default distance up to which wormholes apply forces to actors. This
14883
global value is only used if no object specific value is set.
14885
<dl compact="compact">
14886
<dt> <b>Type:</b> number</dt>
14887
<dt> <b>Values:</b> positive float number or zero</dt>
14888
<dt> <b>Default:</b> <code>10.0</code></dt>
14889
<dt> <b>Access:</b> read/write</dt>
14890
<dt> <b>Support:</b> <a href="#it_005fwormhole">it_wormhole</a></dt>
14894
<a name="WormholeStrength"></a>
14895
<table cellpadding="1" cellspacing="1" border="0">
14896
<tr><td valign="middle" align="left">[<a href="#WormholeRange" title="Previous section in reading order"> < </a>]</td>
14897
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next section in reading order"> > </a>]</td>
14898
<td valign="middle" align="left"> </td>
14899
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
14900
<td valign="middle" align="left">[<a href="#Global-Attributes" title="Up section"> Up </a>]</td>
14901
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Next chapter"> >> </a>]</td>
14902
<td valign="middle" align="left"> </td>
14903
<td valign="middle" align="left"> </td>
14904
<td valign="middle" align="left"> </td>
14905
<td valign="middle" align="left"> </td>
14906
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
14907
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
14908
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
14909
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
14911
<a name="WormholeStrength-1"></a>
14912
<h3 class="subsection">6.4.37 WormholeStrength</h3>
14914
<p>A global scalar default factor for wormhole forces. Positive numbers are
14915
attracting forces where as negative numbers are repelling forces. This global
14916
value is only used if no object specific value is set.
14918
<dl compact="compact">
14919
<dt> <b>Type:</b> number</dt>
14920
<dt> <b>Values:</b> float number</dt>
14921
<dt> <b>Default:</b> <code>30.0</code></dt>
14922
<dd><p>Positive number are attracting, negative numbers are repelling.
14924
<dt> <b>Access:</b> read/write</dt>
14925
<dt> <b>Support:</b> <a href="#it_005fwormhole">it_wormhole</a></dt>
14930
<a name="Floor-Objects"></a>
14931
<table cellpadding="1" cellspacing="1" border="0">
14932
<tr><td valign="middle" align="left">[<a href="#WormholeStrength" title="Previous section in reading order"> < </a>]</td>
14933
<td valign="middle" align="left">[<a href="#Floor-Overview" title="Next section in reading order"> > </a>]</td>
14934
<td valign="middle" align="left"> </td>
14935
<td valign="middle" align="left">[<a href="#Common-Attributes-and-Messages" title="Beginning of this chapter or previous chapter"> << </a>]</td>
14936
<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up </a>]</td>
14937
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
14938
<td valign="middle" align="left"> </td>
14939
<td valign="middle" align="left"> </td>
14940
<td valign="middle" align="left"> </td>
14941
<td valign="middle" align="left"> </td>
14942
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
14943
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
14944
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
14945
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
14947
<a name="Floor-Objects-1"></a>
14948
<h1 class="chapter">7. Floor Objects</h1>
14950
<table class="menu" border="0" cellspacing="0">
14951
<tr><td align="left" valign="top"><a href="#Floor-Overview">7.1 Floor Overview</a></td><td> </td><td align="left" valign="top">
14953
<tr><td align="left" valign="top"><a href="#Floor-Attributes">7.2 Floor Attributes</a></td><td> </td><td align="left" valign="top">
14955
<tr><td align="left" valign="top"><a href="#Standard-Floors">7.3 Standard Floors</a></td><td> </td><td align="left" valign="top">
14957
<tr><td align="left" valign="top"><a href="#Special-Floors">7.4 Special Floors</a></td><td> </td><td align="left" valign="top">
14962
<a name="Floor-Overview"></a>
14963
<table cellpadding="1" cellspacing="1" border="0">
14964
<tr><td valign="middle" align="left">[<a href="#Floor-Objects" title="Previous section in reading order"> < </a>]</td>
14965
<td valign="middle" align="left">[<a href="#Floor-Attributes" title="Next section in reading order"> > </a>]</td>
14966
<td valign="middle" align="left"> </td>
14967
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
14968
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Up section"> Up </a>]</td>
14969
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
14970
<td valign="middle" align="left"> </td>
14971
<td valign="middle" align="left"> </td>
14972
<td valign="middle" align="left"> </td>
14973
<td valign="middle" align="left"> </td>
14974
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
14975
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
14976
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
14977
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
14979
<a name="Floor-Overview-1"></a>
14980
<h2 class="section">7.1 Floor Overview</h2>
14983
<tr><td width="8%"><img src="images/fl_abyss.png" alt="images/fl_abyss"></td><td width="25%"><a href="#fl_005fabyss">fl_abyss</a></td><td width="8%"><img src="images/fl_adhesionless.png" alt="images/fl_adhesionless"></td><td width="25%"><a href="#fl_005fadhesionless">fl_adhesionless</a></td><td width="9%"><img src="images/fl_aquamarine.png" alt="images/fl_aquamarine"></td><td width="25%"><a href="#fl_005faquamarine">fl_aquamarine</a></td></tr>
14984
<tr><td width="8%"><img src="images/fl_bast.png" alt="images/fl_bast"></td><td width="25%"><a href="#fl_005fbast">fl_bast</a></td><td width="8%"><img src="images/fl_bluegray.png" alt="images/fl_bluegray"></td><td width="25%"><a href="#fl_005fbluegray">fl_bluegray</a></td><td width="9%"><img src="images/fl_bluegreen.png" alt="images/fl_bluegreen"></td><td width="25%"><a href="#fl_005fbluegreen">fl_bluegreen</a></td></tr>
14985
<tr><td width="8%"><img src="images/fl_blueslab.png" alt="images/fl_blueslab"></td><td width="25%"><a href="#fl_005fblueslab">fl_blueslab</a></td><td width="8%"><img src="images/fl_brick.png" alt="images/fl_brick"></td><td width="25%"><a href="#fl_005fbrick">fl_brick</a></td><td width="9%"><img src="images/fl_bridge_bw_closed.png" alt="images/fl_bridge_bw_closed"></td><td width="25%"><a href="#fl_005fbridge">fl_bridge</a>_bw</td></tr>
14986
<tr><td width="8%"><img src="images/fl_bridge_gc_closed.png" alt="images/fl_bridge_gc_closed"></td><td width="25%"><a href="#fl_005fbridge">fl_bridge</a>_gc</td><td width="8%"><img src="images/fl_bright.png" alt="images/fl_bright"></td><td width="25%"><a href="#fl_005fbright">fl_bright</a></td><td width="9%"><img src="images/fl_concrete.png" alt="images/fl_concrete"></td><td width="25%"><a href="#fl_005fconcrete">fl_concrete</a></td></tr>
14987
<tr><td width="8%"><img src="images/fl_darkgray.png" alt="images/fl_darkgray"></td><td width="25%"><a href="#fl_005fdarkgray">fl_darkgray</a></td><td width="8%"><img src="images/fl_dark.png" alt="images/fl_dark"></td><td width="25%"><a href="#fl_005fdark">fl_dark</a></td><td width="9%"><img src="images/fl_dunes.png" alt="images/fl_dunes"></td><td width="25%"><a href="#fl_005fdunes">fl_dunes</a></td></tr>
14988
<tr><td width="8%"><img src="images/fl_fake_trigger.png" alt="images/fl_fake_trigger"></td><td width="25%"><a href="#fl_005ffake">fl_fake</a>_trigger</td><td width="8%"><img src="images/fl_gravel.png" alt="images/fl_gravel"></td><td width="25%"><a href="#fl_005fgravel">fl_gravel</a></td><td width="9%"><img src="images/fl_gray.png" alt="images/fl_gray"></td><td width="25%"><a href="#fl_005fgray">fl_gray</a></td></tr>
14989
<tr><td width="8%"><img src="images/fl_hay.png" alt="images/fl_hay"></td><td width="25%"><a href="#fl_005fhay">fl_hay</a></td><td width="8%"><img src="images/fl_himalaya.png" alt="images/fl_himalaya"></td><td width="25%"><a href="#fl_005fhimalaya">fl_himalaya</a></td><td width="9%"><img src="images/fl_ice.png" alt="images/fl_ice"></td><td width="25%"><a href="#fl_005fice">fl_ice</a></td></tr>
14990
<tr><td width="8%"><img src="images/fl_inverse_gray.png" alt="images/fl_inverse_gray"></td><td width="25%"><a href="#fl_005finverse">fl_inverse</a>_gray</td><td width="8%"><img src="images/fl_inverse_white.png" alt="images/fl_inverse_white"></td><td width="25%"><a href="#fl_005finverse">fl_inverse</a>_white</td><td width="9%"><img src="images/fl_ivory.png" alt="images/fl_ivory"></td><td width="25%"><a href="#fl_005fivory">fl_ivory</a></td></tr>
14991
<tr><td width="8%"><img src="images/fl_lawn.png" alt="images/fl_lawn"></td><td width="25%"><a href="#fl_005flawn">fl_lawn</a></td><td width="8%"><img src="images/fl_marble.png" alt="images/fl_marble"></td><td width="25%"><a href="#fl_005fmarble">fl_marble</a></td><td width="9%"><img src="images/fl_metal.png" alt="images/fl_metal"></td><td width="25%"><a href="#fl_005fmetal">fl_metal</a></td></tr>
14992
<tr><td width="8%"><img src="images/fl_mortar.png" alt="images/fl_mortar"></td><td width="25%"><a href="#fl_005fmortar">fl_mortar</a></td><td width="8%"><img src="images/fl_pinkbumps.png" alt="images/fl_pinkbumps"></td><td width="25%"><a href="#fl_005fpinkbumps">fl_pinkbumps</a></td><td width="9%"><img src="images/fl_plank.png" alt="images/fl_plank"></td><td width="25%"><a href="#fl_005fplank">fl_plank</a></td></tr>
14993
<tr><td width="8%"><img src="images/fl_platinum.png" alt="images/fl_platinum"></td><td width="25%"><a href="#fl_005fplatinum">fl_platinum</a></td><td width="8%"><img src="images/fl_red.png" alt="images/fl_red"></td><td width="25%"><a href="#fl_005fred">fl_red</a></td><td width="9%"><img src="images/fl_redslab.png" alt="images/fl_redslab"></td><td width="25%"><a href="#fl_005fredslab">fl_redslab</a></td></tr>
14994
<tr><td width="8%"><img src="images/fl_rock.png" alt="images/fl_rock"></td><td width="25%"><a href="#fl_005frock">fl_rock</a></td><td width="8%"><img src="images/fl_rough.png" alt="images/fl_rough"></td><td width="25%"><a href="#fl_005frough">fl_rough</a></td><td width="9%"><img src="images/fl_sahara.png" alt="images/fl_sahara"></td><td width="25%"><a href="#fl_005fsahara">fl_sahara</a></td></tr>
14995
<tr><td width="8%"><img src="images/fl_samba.png" alt="images/fl_samba"></td><td width="25%"><a href="#fl_005fsamba">fl_samba</a></td><td width="8%"><img src="images/fl_sand.png" alt="images/fl_sand"></td><td width="25%"><a href="#fl_005fsand">fl_sand</a></td><td width="9%"><img src="images/fl_scales_brick.png" alt="images/fl_scales_brick"></td><td width="25%"><a href="#fl_005fscales">fl_scales</a>_brick</td></tr>
14996
<tr><td width="8%"><img src="images/fl_scales_bridge_bw_closed.png" alt="images/fl_scales_bridge_bw_closed"></td><td width="25%"><a href="#fl_005fscales">fl_scales</a>_bridgewood</td><td width="8%"><img src="images/fl_scales_concrete.png" alt="images/fl_scales_concrete"></td><td width="25%"><a href="#fl_005fscales">fl_scales</a>_concrete</td><td width="9%"><img src="images/fl_scales_darkgray.png" alt="images/fl_scales_darkgray"></td><td width="25%"><a href="#fl_005fscales">fl_scales</a>_darkgray</td></tr>
14997
<tr><td width="8%"><img src="images/fl_scales_gray.png" alt="images/fl_scales_gray"></td><td width="25%"><a href="#fl_005fscales">fl_scales</a>_gray</td><td width="8%"><img src="images/fl_scales_platinum.png" alt="images/fl_scales_platinum"></td><td width="25%"><a href="#fl_005fscales">fl_scales</a>_platinum</td><td width="9%"><img src="images/fl_slope_f.png" alt="images/fl_slope_f"></td><td width="25%"><a href="#fl_005fslope">fl_slope</a></td></tr>
14998
<tr><td width="8%"><img src="images/fl_slope.png" alt="images/fl_slope"></td><td width="25%"><a href="#fl_005fslope">fl_slope</a>_ps</td><td width="8%"><img src="images/fl_slope_c.png" alt="images/fl_slope_c"></td><td width="25%"><a href="#fl_005fslope">fl_slope</a>_ise</td><td width="9%"><img src="images/fl_slope_b.png" alt="images/fl_slope_b"></td><td width="25%"><a href="#fl_005fslope">fl_slope</a>_ose</td></tr>
14999
<tr><td width="8%"><img src="images/fl_space.png" alt="images/fl_space"></td><td width="25%"><a href="#fl_005fspace">fl_space</a></td><td width="8%"><img src="images/fl_stone.png" alt="images/fl_stone"></td><td width="25%"><a href="#fl_005fstone">fl_stone</a></td><td width="9%"><img src="images/fl_swamp.png" alt="images/fl_swamp"></td><td width="25%"><a href="#fl_005fswamp">fl_swamp</a></td></tr>
15000
<tr><td width="8%"><img src="images/fl_thief.png" alt="images/fl_thief"></td><td width="25%"><a href="#fl_005fthief">fl_thief</a></td><td width="8%"><img src="images/fl_thief_capture.png" alt="images/fl_thief_capture"></td><td width="25%"><a href="#fl_005fthief">fl_thief</a></td><td width="9%"><img src="images/fl_thief_drunken.png" alt="images/fl_thief_drunken"></td><td width="25%"><a href="#fl_005fthief">fl_thief</a></td></tr>
15001
<tr><td width="8%"><img src="images/fl_tigris.png" alt="images/fl_tigris"></td><td width="25%"><a href="#fl_005ftigris">fl_tigris</a></td><td width="8%"><img src="images/fl_water.png" alt="images/fl_water"></td><td width="25%"><a href="#fl_005fwater">fl_water</a></td><td width="9%"><img src="images/fl_white.png" alt="images/fl_white"></td><td width="25%"><a href="#fl_005fwhite">fl_white</a></td></tr>
15002
<tr><td width="8%"><img src="images/fl_wood.png" alt="images/fl_wood"></td><td width="25%"><a href="#fl_005fwood">fl_wood</a></td><td width="8%"><img src="images/fl_woven.png" alt="images/fl_woven"></td><td width="25%"><a href="#fl_005fwoven">fl_woven</a></td><td width="9%"><img src="images/fl_yinyang_yang.png" alt="images/fl_yinyang_yang"></td><td width="25%"><a href="#fl_005fyinyang">fl_yinyang</a>_yang</td></tr>
15003
<tr><td width="8%"><img src="images/fl_yinyang_yin.png" alt="images/fl_yinyang_yin"></td><td width="25%"><a href="#fl_005fyinyang">fl_yinyang</a>_yin</td></tr>
15007
<a name="Floor-Attributes"></a>
15008
<table cellpadding="1" cellspacing="1" border="0">
15009
<tr><td valign="middle" align="left">[<a href="#Floor-Overview" title="Previous section in reading order"> < </a>]</td>
15010
<td valign="middle" align="left">[<a href="#adhesion-_0028floor_0029" title="Next section in reading order"> > </a>]</td>
15011
<td valign="middle" align="left"> </td>
15012
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
15013
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Up section"> Up </a>]</td>
15014
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
15015
<td valign="middle" align="left"> </td>
15016
<td valign="middle" align="left"> </td>
15017
<td valign="middle" align="left"> </td>
15018
<td valign="middle" align="left"> </td>
15019
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
15020
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
15021
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
15022
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
15024
<a name="Floor-Attributes-1"></a>
15025
<h2 class="section">7.2 Floor Attributes</h2>
15027
<table class="menu" border="0" cellspacing="0">
15028
<tr><td align="left" valign="top"><a href="#adhesion-_0028floor_0029">7.2.1 adhesion (floor)</a></td><td> </td><td align="left" valign="top"> Effectiveness of mousemotion
15030
<tr><td align="left" valign="top"><a href="#burnable">7.2.2 burnable</a></td><td> </td><td align="left" valign="top"> -
15032
<tr><td align="left" valign="top"><a href="#eternal">7.2.3 eternal</a></td><td> </td><td align="left" valign="top"> -
15034
<tr><td align="left" valign="top"><a href="#faces-_0028floor_0029">7.2.4 faces (floor)</a></td><td> </td><td align="left" valign="top"> Framing Configuration
15036
<tr><td align="left" valign="top"><a href="#fastfire">7.2.5 fastfire</a></td><td> </td><td align="left" valign="top"> -
15038
<tr><td align="left" valign="top"><a href="#floodable">7.2.6 floodable</a></td><td> </td><td align="left" valign="top"> Flood Affinity
15040
<tr><td align="left" valign="top"><a href="#force_005fx">7.2.7 force_x</a></td><td> </td><td align="left" valign="top"> Constant Force
15042
<tr><td align="left" valign="top"><a href="#force_005fy">7.2.8 force_y</a></td><td> </td><td align="left" valign="top"> Constant Force
15044
<tr><td align="left" valign="top"><a href="#fragility-_0028floor_0029">7.2.9 fragility (floor)</a></td><td> </td><td align="left" valign="top"> Crack
15046
<tr><td align="left" valign="top"><a href="#freeze_005fcheck-_0028floor_0029">7.2.10 freeze_check (floor)</a></td><td> </td><td align="left" valign="top"> Freeze Checking
15048
<tr><td align="left" valign="top"><a href="#friction-_0028floor_0029">7.2.11 friction (floor)</a></td><td> </td><td align="left" valign="top"> Decelerating friction force factor
15050
<tr><td align="left" valign="top"><a href="#ignitable">7.2.12 ignitable</a></td><td> </td><td align="left" valign="top"> -
15052
<tr><td align="left" valign="top"><a href="#indestructible">7.2.13 indestructible</a></td><td> </td><td align="left" valign="top"> System Flag for destruction resistance
15054
<tr><td align="left" valign="top"><a href="#initfire">7.2.14 initfire</a></td><td> </td><td align="left" valign="top"> -
15056
<tr><td align="left" valign="top"><a href="#noash">7.2.15 noash</a></td><td> </td><td align="left" valign="top"> -
15058
<tr><td align="left" valign="top"><a href="#push_005fdirections">7.2.16 push_directions</a></td><td> </td><td align="left" valign="top"> Puzzle Shuffle Hint
15060
<tr><td align="left" valign="top"><a href="#secure">7.2.17 secure</a></td><td> </td><td align="left" valign="top"> -
15062
<tr><td align="left" valign="top"><a href="#texture">7.2.18 texture</a></td><td> </td><td align="left" valign="top"> Graphical Image Texture
15068
<a name="adhesion-_0028floor_0029"></a>
15069
<table cellpadding="1" cellspacing="1" border="0">
15070
<tr><td valign="middle" align="left">[<a href="#Floor-Attributes" title="Previous section in reading order"> < </a>]</td>
15071
<td valign="middle" align="left">[<a href="#burnable" title="Next section in reading order"> > </a>]</td>
15072
<td valign="middle" align="left"> </td>
15073
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
15074
<td valign="middle" align="left">[<a href="#Floor-Attributes" title="Up section"> Up </a>]</td>
15075
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
15076
<td valign="middle" align="left"> </td>
15077
<td valign="middle" align="left"> </td>
15078
<td valign="middle" align="left"> </td>
15079
<td valign="middle" align="left"> </td>
15080
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
15081
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
15082
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
15083
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
15085
<a name="adhesion-_0028floor_0029-1"></a>
15086
<h3 class="subsection">7.2.1 adhesion (floor)</h3>
15088
<p>The responsiveness of an actor on mouse movements. It is a scalar factor to
15089
the accelerating force applied to an actor. Note that the actor itself
15090
has another scalar <a href="#adhesion-_0028actor_0029">adhesion (actor)</a> factor. The adhesion may take negative
15091
values, too. Such values correspond to inverse forces.
15093
<dl compact="compact">
15094
<dt> <b>Type:</b> number</dt>
15095
<dt> <b>Values:</b> float number</dt>
15096
<dt> <b>Default:</b> <code>0.0</code></dt>
15097
<dt> <b>Access:</b> read/write</dt>
15101
<a name="burnable"></a>
15102
<table cellpadding="1" cellspacing="1" border="0">
15103
<tr><td valign="middle" align="left">[<a href="#adhesion-_0028floor_0029" title="Previous section in reading order"> < </a>]</td>
15104
<td valign="middle" align="left">[<a href="#eternal" title="Next section in reading order"> > </a>]</td>
15105
<td valign="middle" align="left"> </td>
15106
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
15107
<td valign="middle" align="left">[<a href="#Floor-Attributes" title="Up section"> Up </a>]</td>
15108
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
15109
<td valign="middle" align="left"> </td>
15110
<td valign="middle" align="left"> </td>
15111
<td valign="middle" align="left"> </td>
15112
<td valign="middle" align="left"> </td>
15113
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
15114
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
15115
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
15116
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
15118
<a name="burnable-1"></a>
15119
<h3 class="subsection">7.2.2 burnable</h3>
15121
<p>Determines whether the floor starts to burn when a fire is nearby and the item
15122
on the floor allows it to burn. See section <a href="#Fire-Spreading">Fire Spreading</a> for details.
15124
<dl compact="compact">
15125
<dt> <b>Type:</b> boolean</dt>
15126
<dt> <b>Values:</b> <code>false</code>, <code>true</code></dt>
15127
<dt> <b>Default:</b> <code>false</code></dt>
15128
<dt> <b>Access:</b> read/write</dt>
15132
<a name="eternal"></a>
15133
<table cellpadding="1" cellspacing="1" border="0">
15134
<tr><td valign="middle" align="left">[<a href="#burnable" title="Previous section in reading order"> < </a>]</td>
15135
<td valign="middle" align="left">[<a href="#faces-_0028floor_0029" title="Next section in reading order"> > </a>]</td>
15136
<td valign="middle" align="left"> </td>
15137
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
15138
<td valign="middle" align="left">[<a href="#Floor-Attributes" title="Up section"> Up </a>]</td>
15139
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
15140
<td valign="middle" align="left"> </td>
15141
<td valign="middle" align="left"> </td>
15142
<td valign="middle" align="left"> </td>
15143
<td valign="middle" align="left"> </td>
15144
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
15145
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
15146
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
15147
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
15149
<a name="eternal-1"></a>
15150
<h3 class="subsection">7.2.3 eternal</h3>
15152
<p>Determines whether a fire keeps on burning unlimited, until an external cause
15153
stops it. See section <a href="#Fire-Spreading">Fire Spreading</a> for details.
15155
<dl compact="compact">
15156
<dt> <b>Type:</b> boolean</dt>
15157
<dt> <b>Values:</b> <code>false</code>, <code>true</code></dt>
15158
<dt> <b>Default:</b> <code>false</code></dt>
15159
<dt> <b>Access:</b> read/write</dt>
15163
<a name="faces-_0028floor_0029"></a>
15164
<table cellpadding="1" cellspacing="1" border="0">
15165
<tr><td valign="middle" align="left">[<a href="#eternal" title="Previous section in reading order"> < </a>]</td>
15166
<td valign="middle" align="left">[<a href="#fastfire" title="Next section in reading order"> > </a>]</td>
15167
<td valign="middle" align="left"> </td>
15168
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
15169
<td valign="middle" align="left">[<a href="#Floor-Attributes" title="Up section"> Up </a>]</td>
15170
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
15171
<td valign="middle" align="left"> </td>
15172
<td valign="middle" align="left"> </td>
15173
<td valign="middle" align="left"> </td>
15174
<td valign="middle" align="left"> </td>
15175
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
15176
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
15177
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
15178
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
15180
<a name="faces-_0028floor_0029-1"></a>
15181
<h3 class="subsection">7.2.4 faces (floor)</h3>
15183
<p>Describes if a floor is framed.
15185
<p>Currently a floor is either not framed at all or framed on all sides. The frame
15186
attribute can not be directly accessed and modified on most floors. Append the
15187
string <code>"_framed"</code> to a given floor name to yield the all side framed
15190
<dl compact="compact">
15191
<dt> <b>Type:</b> string or nil</dt>
15192
<dt> <b>Values:</b> <code>nil</code>, <code>"nesw"</code></dt>
15193
<dt> <b>Default:</b> <code>nil</code></dt>
15194
<dt> <b>Access:</b> none - with a few exceptions</dt>
15198
<a name="fastfire"></a>
15199
<table cellpadding="1" cellspacing="1" border="0">
15200
<tr><td valign="middle" align="left">[<a href="#faces-_0028floor_0029" title="Previous section in reading order"> < </a>]</td>
15201
<td valign="middle" align="left">[<a href="#floodable" title="Next section in reading order"> > </a>]</td>
15202
<td valign="middle" align="left"> </td>
15203
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
15204
<td valign="middle" align="left">[<a href="#Floor-Attributes" title="Up section"> Up </a>]</td>
15205
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
15206
<td valign="middle" align="left"> </td>
15207
<td valign="middle" align="left"> </td>
15208
<td valign="middle" align="left"> </td>
15209
<td valign="middle" align="left"> </td>
15210
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
15211
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
15212
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
15213
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
15215
<a name="fastfire-1"></a>
15216
<h3 class="subsection">7.2.5 fastfire</h3>
15218
<p>When set to <code>true</code>, fire will spread faster than usual, with the same
15219
speed as if <a href="#it_005fburnable">it_burnable</a>[_oil] would be on it. See section <a href="#Flood-Spreading">Flood Spreading</a> for
15222
<dl compact="compact">
15223
<dt> <b>Type:</b> boolean</dt>
15224
<dt> <b>Values:</b> <code>false</code>, <code>true</code></dt>
15225
<dt> <b>Default:</b> <code>false</code></dt>
15226
<dt> <b>Access:</b> read/write</dt>
15230
<a name="floodable"></a>
15231
<table cellpadding="1" cellspacing="1" border="0">
15232
<tr><td valign="middle" align="left">[<a href="#fastfire" title="Previous section in reading order"> < </a>]</td>
15233
<td valign="middle" align="left">[<a href="#force_005fx" title="Next section in reading order"> > </a>]</td>
15234
<td valign="middle" align="left"> </td>
15235
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
15236
<td valign="middle" align="left">[<a href="#Floor-Attributes" title="Up section"> Up </a>]</td>
15237
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
15238
<td valign="middle" align="left"> </td>
15239
<td valign="middle" align="left"> </td>
15240
<td valign="middle" align="left"> </td>
15241
<td valign="middle" align="left"> </td>
15242
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
15243
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
15244
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
15245
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
15247
<a name="floodable-1"></a>
15248
<h3 class="subsection">7.2.6 floodable</h3>
15250
<p>Determines whether a floor can be flooded by <a href="#fl_005fwater">fl_water</a> from a neighboring
15251
floor. See section <a href="#Flood-Spreading">Flood Spreading</a> for details.
15253
<dl compact="compact">
15254
<dt> <b>Type:</b> boolean</dt>
15255
<dt> <b>Values:</b> <code>false</code>, <code>true</code></dt>
15256
<dt> <b>Default:</b> <code>false</code></dt>
15257
<dt> <b>Access:</b> read/write</dt>
15261
<a name="force_005fx"></a>
15262
<table cellpadding="1" cellspacing="1" border="0">
15263
<tr><td valign="middle" align="left">[<a href="#floodable" title="Previous section in reading order"> < </a>]</td>
15264
<td valign="middle" align="left">[<a href="#force_005fy" title="Next section in reading order"> > </a>]</td>
15265
<td valign="middle" align="left"> </td>
15266
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
15267
<td valign="middle" align="left">[<a href="#Floor-Attributes" title="Up section"> Up </a>]</td>
15268
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
15269
<td valign="middle" align="left"> </td>
15270
<td valign="middle" align="left"> </td>
15271
<td valign="middle" align="left"> </td>
15272
<td valign="middle" align="left"> </td>
15273
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
15274
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
15275
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
15276
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
15278
<a name="force_005fx-1"></a>
15279
<h3 class="subsection">7.2.7 force_x</h3>
15281
<p>A constant floor specific force into east direction applied additionally to all
15282
other forces to all actors on the floor.
15284
<dl compact="compact">
15285
<dt> <b>Type:</b> number</dt>
15286
<dt> <b>Values:</b> float number</dt>
15287
<dt> <b>Default:</b> <code>0.0</code></dt>
15288
<dt> <b>Access:</b> read/write</dt>
15292
<a name="force_005fy"></a>
15293
<table cellpadding="1" cellspacing="1" border="0">
15294
<tr><td valign="middle" align="left">[<a href="#force_005fx" title="Previous section in reading order"> < </a>]</td>
15295
<td valign="middle" align="left">[<a href="#fragility-_0028floor_0029" title="Next section in reading order"> > </a>]</td>
15296
<td valign="middle" align="left"> </td>
15297
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
15298
<td valign="middle" align="left">[<a href="#Floor-Attributes" title="Up section"> Up </a>]</td>
15299
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
15300
<td valign="middle" align="left"> </td>
15301
<td valign="middle" align="left"> </td>
15302
<td valign="middle" align="left"> </td>
15303
<td valign="middle" align="left"> </td>
15304
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
15305
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
15306
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
15307
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
15309
<a name="force_005fy-1"></a>
15310
<h3 class="subsection">7.2.8 force_y</h3>
15312
<p>A constant floor specific force into south direction applied additionally to all
15313
other forces to all actors on the floor.
15315
<dl compact="compact">
15316
<dt> <b>Type:</b> number</dt>
15317
<dt> <b>Values:</b> float number</dt>
15318
<dt> <b>Default:</b> <code>0.0</code></dt>
15319
<dt> <b>Access:</b> read/write</dt>
15323
<a name="fragility-_0028floor_0029"></a>
15324
<table cellpadding="1" cellspacing="1" border="0">
15325
<tr><td valign="middle" align="left">[<a href="#force_005fy" title="Previous section in reading order"> < </a>]</td>
15326
<td valign="middle" align="left">[<a href="#freeze_005fcheck-_0028floor_0029" title="Next section in reading order"> > </a>]</td>
15327
<td valign="middle" align="left"> </td>
15328
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
15329
<td valign="middle" align="left">[<a href="#Floor-Attributes" title="Up section"> Up </a>]</td>
15330
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
15331
<td valign="middle" align="left"> </td>
15332
<td valign="middle" align="left"> </td>
15333
<td valign="middle" align="left"> </td>
15334
<td valign="middle" align="left"> </td>
15335
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
15336
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
15337
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
15338
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
15340
<a name="fragility-_0028floor_0029-1"></a>
15341
<h3 class="subsection">7.2.9 fragility (floor)</h3>
15343
<p>A value denoting the probability that a brittle floor plate, that is a floor
15344
with an <a href="#it_005fcrack">it_crack</a> on top, continues to disintegrate on events like an actor
15345
entering, passing a neighboring <a href="#it_005fcrack">it_crack</a>, nearby explosions or fire
15346
heating. A value of <code>1.0</code> ensures that the crack continues to disintegrate
15347
on these events, a value of <code>0.0</code> prohibits visible cracks to get larger.
15348
This value is defaulted by <a href="#Fragility">Fragility</a> and superseded by <a href="#it_005fcrack">it_crack</a>
15351
<dl compact="compact">
15352
<dt> <b>Type:</b> number</dt>
15353
<dt> <b>Values:</b> float numbers between <code>0.0</code> and <code>1.0</code></dt>
15354
<dt> <b>Default:</b> <code>1.0</code></dt>
15355
<dt> <b>Access:</b> read/write</dt>
15359
<a name="freeze_005fcheck-_0028floor_0029"></a>
15360
<table cellpadding="1" cellspacing="1" border="0">
15361
<tr><td valign="middle" align="left">[<a href="#fragility-_0028floor_0029" title="Previous section in reading order"> < </a>]</td>
15362
<td valign="middle" align="left">[<a href="#friction-_0028floor_0029" title="Next section in reading order"> > </a>]</td>
15363
<td valign="middle" align="left"> </td>
15364
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
15365
<td valign="middle" align="left">[<a href="#Floor-Attributes" title="Up section"> Up </a>]</td>
15366
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
15367
<td valign="middle" align="left"> </td>
15368
<td valign="middle" align="left"> </td>
15369
<td valign="middle" align="left"> </td>
15370
<td valign="middle" align="left"> </td>
15371
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
15372
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
15373
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
15374
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
15376
<a name="freeze_005fcheck-_0028floor_0029-1"></a>
15377
<h3 class="subsection">7.2.10 freeze_check (floor)</h3>
15379
<p>If <code>true</code>, allows for <a href="#Freeze-Checking">Freeze Checking</a> on this floor tile. Note that
15380
Freeze Checking only works with those (movable) stones that have additionally set
15381
<code>freeze_check = true</code> on their own, see <a href="#freeze_005fcheck-_0028stone_0029">freeze_check (stone)</a>.
15383
<dl compact="compact">
15384
<dt> <b>Type:</b> boolean</dt>
15385
<dt> <b>Values:</b> <code>false</code>, <code>true</code></dt>
15386
<dt> <b>Default:</b> <code>false</code></dt>
15387
<dt> <b>Access:</b> read/write</dt>
15391
<a name="friction-_0028floor_0029"></a>
15392
<table cellpadding="1" cellspacing="1" border="0">
15393
<tr><td valign="middle" align="left">[<a href="#freeze_005fcheck-_0028floor_0029" title="Previous section in reading order"> < </a>]</td>
15394
<td valign="middle" align="left">[<a href="#ignitable" title="Next section in reading order"> > </a>]</td>
15395
<td valign="middle" align="left"> </td>
15396
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
15397
<td valign="middle" align="left">[<a href="#Floor-Attributes" title="Up section"> Up </a>]</td>
15398
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
15399
<td valign="middle" align="left"> </td>
15400
<td valign="middle" align="left"> </td>
15401
<td valign="middle" align="left"> </td>
15402
<td valign="middle" align="left"> </td>
15403
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
15404
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
15405
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
15406
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
15408
<a name="friction-_0028floor_0029-1"></a>
15409
<h3 class="subsection">7.2.11 friction (floor)</h3>
15411
<p>see section <a href="#friction">friction</a>.
15413
<dl compact="compact">
15414
<dt> <b>Type:</b> number</dt>
15415
<dt> <b>Values:</b> float number</dt>
15416
<dt> <b>Default:</b> <code>0.0</code></dt>
15417
<dt> <b>Access:</b> read/write</dt>
15421
<a name="ignitable"></a>
15422
<table cellpadding="1" cellspacing="1" border="0">
15423
<tr><td valign="middle" align="left">[<a href="#friction-_0028floor_0029" title="Previous section in reading order"> < </a>]</td>
15424
<td valign="middle" align="left">[<a href="#indestructible" title="Next section in reading order"> > </a>]</td>
15425
<td valign="middle" align="left"> </td>
15426
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
15427
<td valign="middle" align="left">[<a href="#Floor-Attributes" title="Up section"> Up </a>]</td>
15428
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
15429
<td valign="middle" align="left"> </td>
15430
<td valign="middle" align="left"> </td>
15431
<td valign="middle" align="left"> </td>
15432
<td valign="middle" align="left"> </td>
15433
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
15434
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
15435
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
15436
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
15438
<a name="ignitable-1"></a>
15439
<h3 class="subsection">7.2.12 ignitable</h3>
15441
<p>When <code>true</code>, and the item on the floor allows it to burn, it will start
15442
burning on nearby explosions. See section <a href="#Fire-Spreading">Fire Spreading</a> for details.
15444
<dl compact="compact">
15445
<dt> <b>Type:</b> boolean</dt>
15446
<dt> <b>Values:</b> <code>false</code>, <code>true</code></dt>
15447
<dt> <b>Default:</b> <code>false</code></dt>
15448
<dt> <b>Access:</b> read/write</dt>
15452
<a name="indestructible"></a>
15453
<table cellpadding="1" cellspacing="1" border="0">
15454
<tr><td valign="middle" align="left">[<a href="#ignitable" title="Previous section in reading order"> < </a>]</td>
15455
<td valign="middle" align="left">[<a href="#initfire" title="Next section in reading order"> > </a>]</td>
15456
<td valign="middle" align="left"> </td>
15457
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
15458
<td valign="middle" align="left">[<a href="#Floor-Attributes" title="Up section"> Up </a>]</td>
15459
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
15460
<td valign="middle" align="left"> </td>
15461
<td valign="middle" align="left"> </td>
15462
<td valign="middle" align="left"> </td>
15463
<td valign="middle" align="left"> </td>
15464
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
15465
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
15466
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
15467
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
15469
<a name="indestructible-1"></a>
15470
<h3 class="subsection">7.2.13 indestructible</h3>
15472
<p>Most floors can dissolve to <a href="#fl_005fabyss">fl_abyss</a> or <a href="#fl_005fwater">fl_water</a> on destruction
15473
by explosions, fire, <a href="#ot_005fcannonball">ot_cannonball</a> hits, <a href="#it_005fcrack">it_crack</a>, <a href="#it_005ftrap">it_trap</a>,
15474
etc. But a few like <a href="#fl_005fabyss">fl_abyss</a>, <a href="#fl_005fwater">fl_water</a> and <a href="#fl_005fswamp">fl_swamp</a> are
15475
indestructible by all these events.
15477
<dl compact="compact">
15478
<dt> <b>Type:</b> boolean</dt>
15479
<dt> <b>Values:</b> <code>false</code>, <code>true</code></dt>
15480
<dt> <b>Default:</b> <code>false</code></dt>
15481
<dt> <b>Access:</b> none</dt>
15485
<a name="initfire"></a>
15486
<table cellpadding="1" cellspacing="1" border="0">
15487
<tr><td valign="middle" align="left">[<a href="#indestructible" title="Previous section in reading order"> < </a>]</td>
15488
<td valign="middle" align="left">[<a href="#noash" title="Next section in reading order"> > </a>]</td>
15489
<td valign="middle" align="left"> </td>
15490
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
15491
<td valign="middle" align="left">[<a href="#Floor-Attributes" title="Up section"> Up </a>]</td>
15492
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
15493
<td valign="middle" align="left"> </td>
15494
<td valign="middle" align="left"> </td>
15495
<td valign="middle" align="left"> </td>
15496
<td valign="middle" align="left"> </td>
15497
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
15498
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
15499
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
15500
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
15502
<a name="initfire-1"></a>
15503
<h3 class="subsection">7.2.14 initfire</h3>
15505
<p>When set to <code>true</code>, the floor will start to burn after level
15506
initialization. See section <a href="#Fire-Spreading">Fire Spreading</a> for details.
15508
<dl compact="compact">
15509
<dt> <b>Type:</b> boolean</dt>
15510
<dt> <b>Values:</b> <code>false</code>, <code>true</code></dt>
15511
<dt> <b>Default:</b> <code>false</code></dt>
15512
<dt> <b>Access:</b> read/write</dt>
15516
<a name="noash"></a>
15517
<table cellpadding="1" cellspacing="1" border="0">
15518
<tr><td valign="middle" align="left">[<a href="#initfire" title="Previous section in reading order"> < </a>]</td>
15519
<td valign="middle" align="left">[<a href="#push_005fdirections" title="Next section in reading order"> > </a>]</td>
15520
<td valign="middle" align="left"> </td>
15521
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
15522
<td valign="middle" align="left">[<a href="#Floor-Attributes" title="Up section"> Up </a>]</td>
15523
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
15524
<td valign="middle" align="left"> </td>
15525
<td valign="middle" align="left"> </td>
15526
<td valign="middle" align="left"> </td>
15527
<td valign="middle" align="left"> </td>
15528
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
15529
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
15530
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
15531
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
15533
<a name="noash-1"></a>
15534
<h3 class="subsection">7.2.15 noash</h3>
15536
<p>Determines whether <a href="#it_005fburnable">it_burnable</a>_ash is put onto the floor after a fire
15537
stops. Ash stops a floor from re-igniting, so <code>noash = true</code> will allow a
15538
floor to start burning a second time, unless the item on it or its
15539
<code>burnable</code>-attribute deny fire. See section <a href="#Fire-Spreading">Fire Spreading</a> for details.
15541
<p><a href="#fl_005fabyss">fl_abyss</a> is the only floor with <code>noash = true</code> by default, because
15542
ash falls into the abyss. Note however, that <a href="#fl_005fabyss">fl_abyss</a> isn’t burnable by
15545
<dl compact="compact">
15546
<dt> <b>Type:</b> boolean</dt>
15547
<dt> <b>Values:</b> <code>false</code>, <code>true</code></dt>
15548
<dt> <b>Default:</b> <code>false</code></dt>
15549
<dt> <b>Access:</b> read/write</dt>
15553
<a name="push_005fdirections"></a>
15554
<table cellpadding="1" cellspacing="1" border="0">
15555
<tr><td valign="middle" align="left">[<a href="#noash" title="Previous section in reading order"> < </a>]</td>
15556
<td valign="middle" align="left">[<a href="#secure" title="Next section in reading order"> > </a>]</td>
15557
<td valign="middle" align="left"> </td>
15558
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
15559
<td valign="middle" align="left">[<a href="#Floor-Attributes" title="Up section"> Up </a>]</td>
15560
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
15561
<td valign="middle" align="left"> </td>
15562
<td valign="middle" align="left"> </td>
15563
<td valign="middle" align="left"> </td>
15564
<td valign="middle" align="left"> </td>
15565
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
15566
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
15567
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
15568
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
15570
<a name="push_005fdirections-1"></a>
15571
<h3 class="subsection">7.2.16 push_directions</h3>
15573
<p>A hint for the resolver <a href="#res_002epuzzle">res.puzzle</a> for shuffling of a puzzle. A floor
15574
marked with this attribute guarantees that an adjacent puzzle row or column
15575
can be push rotated into the listed directions by the user.
15577
<dl compact="compact">
15578
<dt> <b>Type:</b> string or nil</dt>
15579
<dt> <b>Values:</b> <code>nil</code>, <code>"nesw"</code></dt>
15580
<dt> <b>Default:</b> <code>nil</code></dt>
15581
<dt> <b>Access:</b> read/write</dt>
15585
<a name="secure"></a>
15586
<table cellpadding="1" cellspacing="1" border="0">
15587
<tr><td valign="middle" align="left">[<a href="#push_005fdirections" title="Previous section in reading order"> < </a>]</td>
15588
<td valign="middle" align="left">[<a href="#texture" title="Next section in reading order"> > </a>]</td>
15589
<td valign="middle" align="left"> </td>
15590
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
15591
<td valign="middle" align="left">[<a href="#Floor-Attributes" title="Up section"> Up </a>]</td>
15592
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
15593
<td valign="middle" align="left"> </td>
15594
<td valign="middle" align="left"> </td>
15595
<td valign="middle" align="left"> </td>
15596
<td valign="middle" align="left"> </td>
15597
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
15598
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
15599
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
15600
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
15602
<a name="secure-1"></a>
15603
<h3 class="subsection">7.2.17 secure</h3>
15605
<p>Ensures that a nearby fire eventually ignites this floor. See section <a href="#Fire-Spreading">Fire Spreading</a>
15608
<dl compact="compact">
15609
<dt> <b>Type:</b> boolean</dt>
15610
<dt> <b>Values:</b> <code>false</code>, <code>true</code></dt>
15611
<dt> <b>Default:</b> <code>false</code></dt>
15612
<dt> <b>Access:</b> read/write</dt>
15616
<a name="texture"></a>
15617
<table cellpadding="1" cellspacing="1" border="0">
15618
<tr><td valign="middle" align="left">[<a href="#secure" title="Previous section in reading order"> < </a>]</td>
15619
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Next section in reading order"> > </a>]</td>
15620
<td valign="middle" align="left"> </td>
15621
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
15622
<td valign="middle" align="left">[<a href="#Floor-Attributes" title="Up section"> Up </a>]</td>
15623
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
15624
<td valign="middle" align="left"> </td>
15625
<td valign="middle" align="left"> </td>
15626
<td valign="middle" align="left"> </td>
15627
<td valign="middle" align="left"> </td>
15628
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
15629
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
15630
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
15631
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
15633
<a name="texture-1"></a>
15634
<h3 class="subsection">7.2.18 texture</h3>
15636
<p>Many floors do provide several textures - graphical image variations that are
15637
without any influence on the physical engine. Most floors do select a random
15638
texture in their default variant. This generates areas without unintended
15639
optical effects. But on some floors you can select the textures by means
15640
of variant kind names to create your own graphical floor layout.
15642
<dl compact="compact">
15643
<dt> <b>Type:</b> integer number or string</dt>
15644
<dt> <b>Values:</b> integer number or string</dt>
15645
<dt> <b>Default:</b> <code>1</code></dt>
15646
<dt> <b>Access:</b> currently none - just by variants kind string on some floors</dt>
15650
<a name="Standard-Floors"></a>
15651
<table cellpadding="1" cellspacing="1" border="0">
15652
<tr><td valign="middle" align="left">[<a href="#texture" title="Previous section in reading order"> < </a>]</td>
15653
<td valign="middle" align="left">[<a href="#fl_005fadhesionless" title="Next section in reading order"> > </a>]</td>
15654
<td valign="middle" align="left"> </td>
15655
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
15656
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Up section"> Up </a>]</td>
15657
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
15658
<td valign="middle" align="left"> </td>
15659
<td valign="middle" align="left"> </td>
15660
<td valign="middle" align="left"> </td>
15661
<td valign="middle" align="left"> </td>
15662
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
15663
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
15664
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
15665
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
15667
<a name="Standard-Floors-1"></a>
15668
<h2 class="section">7.3 Standard Floors</h2>
15670
<table class="menu" border="0" cellspacing="0">
15671
<tr><td align="left" valign="top"><a href="#fl_005fadhesionless">7.3.1 fl_adhesionless</a></td><td> </td><td align="left" valign="top"> Floor without adhesion but friction
15673
<tr><td align="left" valign="top"><a href="#fl_005faquamarine">7.3.2 fl_aquamarine</a></td><td> </td><td align="left" valign="top"> Aquamarine floor with low friction
15675
<tr><td align="left" valign="top"><a href="#fl_005fbast">7.3.3 fl_bast</a></td><td> </td><td align="left" valign="top"> Brown woven bast with black background
15677
<tr><td align="left" valign="top"><a href="#fl_005fbluegray">7.3.4 fl_bluegray</a></td><td> </td><td align="left" valign="top"> Light blue gray floor
15679
<tr><td align="left" valign="top"><a href="#fl_005fbluegreen">7.3.5 fl_bluegreen</a></td><td> </td><td align="left" valign="top"> Dark blue green floor
15681
<tr><td align="left" valign="top"><a href="#fl_005fblueslab">7.3.6 fl_blueslab</a></td><td> </td><td align="left" valign="top"> Dark blue marbled slab
15683
<tr><td align="left" valign="top"><a href="#fl_005fbrick">7.3.7 fl_brick</a></td><td> </td><td align="left" valign="top"> Floor composed of small red bricks
15685
<tr><td align="left" valign="top"><a href="#fl_005fbright">7.3.8 fl_bright</a></td><td> </td><td align="left" valign="top"> Nearly white floor
15687
<tr><td align="left" valign="top"><a href="#fl_005fconcrete">7.3.9 fl_concrete</a></td><td> </td><td align="left" valign="top"> Granular gray concrete
15689
<tr><td align="left" valign="top"><a href="#fl_005fdark">7.3.10 fl_dark</a></td><td> </td><td align="left" valign="top"> Nearly black floor
15691
<tr><td align="left" valign="top"><a href="#fl_005fdarkgray">7.3.11 fl_darkgray</a></td><td> </td><td align="left" valign="top"> Cold gray floor
15693
<tr><td align="left" valign="top"><a href="#fl_005fdunes">7.3.12 fl_dunes</a></td><td> </td><td align="left" valign="top"> Brown granular dunes
15695
<tr><td align="left" valign="top"><a href="#fl_005fgravel">7.3.13 fl_gravel</a></td><td> </td><td align="left" valign="top"> Dark gray, granular floor
15697
<tr><td align="left" valign="top"><a href="#fl_005fgray">7.3.14 fl_gray</a></td><td> </td><td align="left" valign="top"> Gray with some brown spots
15699
<tr><td align="left" valign="top"><a href="#fl_005fhimalaya">7.3.15 fl_himalaya</a></td><td> </td><td align="left" valign="top"> Blue purple marbled floor
15701
<tr><td align="left" valign="top"><a href="#fl_005fivory">7.3.16 fl_ivory</a></td><td> </td><td align="left" valign="top"> Warm pearl white floor
15703
<tr><td align="left" valign="top"><a href="#fl_005flawn">7.3.17 fl_lawn</a></td><td> </td><td align="left" valign="top"> Grass in several textures
15705
<tr><td align="left" valign="top"><a href="#fl_005fmarble">7.3.18 fl_marble</a></td><td> </td><td align="left" valign="top"> Light red brown marbled floor
15707
<tr><td align="left" valign="top"><a href="#fl_005fmetal">7.3.19 fl_metal</a></td><td> </td><td align="left" valign="top"> Metal floor in several textures
15709
<tr><td align="left" valign="top"><a href="#fl_005fmortar">7.3.20 fl_mortar</a></td><td> </td><td align="left" valign="top"> Rough white floor with gray wrinkles
15711
<tr><td align="left" valign="top"><a href="#fl_005fpinkbumps">7.3.21 fl_pinkbumps</a></td><td> </td><td align="left" valign="top"> Pink floor with white bumps
15713
<tr><td align="left" valign="top"><a href="#fl_005fplank">7.3.22 fl_plank</a></td><td> </td><td align="left" valign="top"> Small diagonal planks
15715
<tr><td align="left" valign="top"><a href="#fl_005fplatinum">7.3.23 fl_platinum</a></td><td> </td><td align="left" valign="top"> Warm light gray floor
15717
<tr><td align="left" valign="top"><a href="#fl_005fred">7.3.24 fl_red</a></td><td> </td><td align="left" valign="top"> Warm red floor with low friction
15719
<tr><td align="left" valign="top"><a href="#fl_005fredslab">7.3.25 fl_redslab</a></td><td> </td><td align="left" valign="top"> Dark red marbled slab
15721
<tr><td align="left" valign="top"><a href="#fl_005frough">7.3.26 fl_rough</a></td><td> </td><td align="left" valign="top"> Rough warm white floor
15723
<tr><td align="left" valign="top"><a href="#fl_005fsahara">7.3.27 fl_sahara</a></td><td> </td><td align="left" valign="top"> Bright yellow sandstone floor
15725
<tr><td align="left" valign="top"><a href="#fl_005fsamba">7.3.28 fl_samba</a></td><td> </td><td align="left" valign="top"> Grey bleached wooden floor
15727
<tr><td align="left" valign="top"><a href="#fl_005fsand">7.3.29 fl_sand</a></td><td> </td><td align="left" valign="top"> Granular orange gray sand floor
15729
<tr><td align="left" valign="top"><a href="#fl_005fspace">7.3.30 fl_space</a></td><td> </td><td align="left" valign="top"> Black space with a few sparkling stars
15731
<tr><td align="left" valign="top"><a href="#fl_005fstone">7.3.31 fl_stone</a></td><td> </td><td align="left" valign="top"> Granular brown gray floor
15733
<tr><td align="left" valign="top"><a href="#fl_005ftigris">7.3.32 fl_tigris</a></td><td> </td><td align="left" valign="top"> Red sandstone floor
15735
<tr><td align="left" valign="top"><a href="#fl_005fwhite">7.3.33 fl_white</a></td><td> </td><td align="left" valign="top"> Pure white floor
15737
<tr><td align="left" valign="top"><a href="#fl_005fwoven">7.3.34 fl_woven</a></td><td> </td><td align="left" valign="top"> White black woven floor
15741
<a name="fl_005fadhesionless"></a>
15742
<table cellpadding="1" cellspacing="1" border="0">
15743
<tr><td valign="middle" align="left">[<a href="#Standard-Floors" title="Previous section in reading order"> < </a>]</td>
15744
<td valign="middle" align="left">[<a href="#fl_005faquamarine" title="Next section in reading order"> > </a>]</td>
15745
<td valign="middle" align="left"> </td>
15746
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
15747
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
15748
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
15749
<td valign="middle" align="left"> </td>
15750
<td valign="middle" align="left"> </td>
15751
<td valign="middle" align="left"> </td>
15752
<td valign="middle" align="left"> </td>
15753
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
15754
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
15755
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
15756
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
15758
<a name="fl_005fadhesionless-1"></a>
15759
<h3 class="subsection">7.3.1 fl_adhesionless</h3>
15760
<a name="index-fl_005fadhesionless"></a>
15762
<p>Orange velvet that offers no adhesion but causes friction.
15764
<dl compact="compact">
15765
<dt> <b>Attributes:</b></dt>
15766
<dd><dl compact="compact">
15767
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 0.0 See section <a href="#adhesion">adhesion</a></dt>
15768
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 2.5 See section <a href="#friction">friction</a></dt>
15769
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: true See section <a href="#burnable">burnable</a></dt>
15773
<dt> <b>Variants:</b></dt>
15774
<dd><dl compact="compact">
15775
<dt> <img src="images/fl_adhesionless.png" alt="images/fl_adhesionless"><p> <b>fl_adhesionless</b>
15782
<a name="fl_005faquamarine"></a>
15783
<table cellpadding="1" cellspacing="1" border="0">
15784
<tr><td valign="middle" align="left">[<a href="#fl_005fadhesionless" title="Previous section in reading order"> < </a>]</td>
15785
<td valign="middle" align="left">[<a href="#fl_005fbast" title="Next section in reading order"> > </a>]</td>
15786
<td valign="middle" align="left"> </td>
15787
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
15788
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
15789
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
15790
<td valign="middle" align="left"> </td>
15791
<td valign="middle" align="left"> </td>
15792
<td valign="middle" align="left"> </td>
15793
<td valign="middle" align="left"> </td>
15794
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
15795
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
15796
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
15797
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
15799
<a name="fl_005faquamarine-1"></a>
15800
<h3 class="subsection">7.3.2 fl_aquamarine</h3>
15801
<a name="index-fl_005faquamarine"></a>
15803
<p>Aquamarine floor with low friction.
15805
<dl compact="compact">
15806
<dt> <b>Attributes:</b></dt>
15807
<dd><dl compact="compact">
15808
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 1.0 See section <a href="#adhesion">adhesion</a></dt>
15809
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 0.4 See section <a href="#friction">friction</a></dt>
15810
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: true See section <a href="#burnable">burnable</a></dt>
15814
<dt> <b>Variants:</b></dt>
15815
<dd><dl compact="compact">
15816
<dt> <img src="images/fl_aquamarine.png" alt="images/fl_aquamarine"><p> <b>fl_aquamarine</b>
15818
<dt> <img src="images/fl_aquamarine_framed.png" alt="images/fl_aquamarine_framed"><p> <b>fl_aquamarine_framed</b>
15825
<a name="fl_005fbast"></a>
15826
<table cellpadding="1" cellspacing="1" border="0">
15827
<tr><td valign="middle" align="left">[<a href="#fl_005faquamarine" title="Previous section in reading order"> < </a>]</td>
15828
<td valign="middle" align="left">[<a href="#fl_005fbluegray" title="Next section in reading order"> > </a>]</td>
15829
<td valign="middle" align="left"> </td>
15830
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
15831
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
15832
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
15833
<td valign="middle" align="left"> </td>
15834
<td valign="middle" align="left"> </td>
15835
<td valign="middle" align="left"> </td>
15836
<td valign="middle" align="left"> </td>
15837
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
15838
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
15839
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
15840
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
15842
<a name="fl_005fbast-1"></a>
15843
<h3 class="subsection">7.3.3 fl_bast</h3>
15844
<a name="index-fl_005fbast"></a>
15846
<p>Brown woven bast with black background.
15848
<p>When burnt, <code>fl_bast</code> will become <a href="#fl_005fabyss">fl_abyss</a>.
15850
<dl compact="compact">
15851
<dt> <b>Attributes:</b></dt>
15852
<dd><dl compact="compact">
15853
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 2.5 See section <a href="#adhesion">adhesion</a></dt>
15854
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 1.5 See section <a href="#friction">friction</a></dt>
15855
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: true See section <a href="#burnable">burnable</a></dt>
15859
<dt> <b>Variants:</b></dt>
15860
<dd><dl compact="compact">
15861
<dt> <img src="images/fl_bast.png" alt="images/fl_bast"><p> <b>fl_bast</b>
15863
<dt> <img src="images/fl_bast_framed.png" alt="images/fl_bast_framed"><p> <b>fl_bast_framed</b>
15870
<a name="fl_005fbluegray"></a>
15871
<table cellpadding="1" cellspacing="1" border="0">
15872
<tr><td valign="middle" align="left">[<a href="#fl_005fbast" title="Previous section in reading order"> < </a>]</td>
15873
<td valign="middle" align="left">[<a href="#fl_005fbluegreen" title="Next section in reading order"> > </a>]</td>
15874
<td valign="middle" align="left"> </td>
15875
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
15876
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
15877
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
15878
<td valign="middle" align="left"> </td>
15879
<td valign="middle" align="left"> </td>
15880
<td valign="middle" align="left"> </td>
15881
<td valign="middle" align="left"> </td>
15882
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
15883
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
15884
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
15885
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
15887
<a name="fl_005fbluegray-1"></a>
15888
<h3 class="subsection">7.3.4 fl_bluegray</h3>
15889
<a name="index-fl_005fbluegray"></a>
15891
<p>Light blue gray floor, visually indistinguishable from <a href="#fl_005fthief">fl_thief</a>.
15893
<dl compact="compact">
15894
<dt> <b>Attributes:</b></dt>
15895
<dd><dl compact="compact">
15896
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 1.5 See section <a href="#adhesion">adhesion</a></dt>
15897
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 4.5 See section <a href="#friction">friction</a></dt>
15898
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: true See section <a href="#burnable">burnable</a></dt>
15902
<dt> <b>Variants:</b></dt>
15903
<dd><dl compact="compact">
15904
<dt> <img src="images/fl_bluegray.png" alt="images/fl_bluegray"><p> <b>fl_bluegray</b>
15906
<dt> <img src="images/fl_bluegray_framed.png" alt="images/fl_bluegray_framed"><p> <b>fl_bluegray_framed</b>
15913
<a name="fl_005fbluegreen"></a>
15914
<table cellpadding="1" cellspacing="1" border="0">
15915
<tr><td valign="middle" align="left">[<a href="#fl_005fbluegray" title="Previous section in reading order"> < </a>]</td>
15916
<td valign="middle" align="left">[<a href="#fl_005fblueslab" title="Next section in reading order"> > </a>]</td>
15917
<td valign="middle" align="left"> </td>
15918
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
15919
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
15920
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
15921
<td valign="middle" align="left"> </td>
15922
<td valign="middle" align="left"> </td>
15923
<td valign="middle" align="left"> </td>
15924
<td valign="middle" align="left"> </td>
15925
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
15926
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
15927
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
15928
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
15930
<a name="fl_005fbluegreen-1"></a>
15931
<h3 class="subsection">7.3.5 fl_bluegreen</h3>
15932
<a name="index-fl_005fbluegreen"></a>
15934
<p>Dark blue green floor.
15936
<dl compact="compact">
15937
<dt> <b>Attributes:</b></dt>
15938
<dd><dl compact="compact">
15939
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 2.0 See section <a href="#adhesion">adhesion</a></dt>
15940
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 6.0 See section <a href="#friction">friction</a></dt>
15941
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: true See section <a href="#burnable">burnable</a></dt>
15945
<dt> <b>Variants:</b></dt>
15946
<dd><dl compact="compact">
15947
<dt> <img src="images/fl_bluegreen.png" alt="images/fl_bluegreen"><p> <b>fl_bluegreen</b>
15949
<dt> <img src="images/fl_bluegreen_framed.png" alt="images/fl_bluegreen_framed"><p> <b>fl_bluegreen_framed</b>
15956
<a name="fl_005fblueslab"></a>
15957
<table cellpadding="1" cellspacing="1" border="0">
15958
<tr><td valign="middle" align="left">[<a href="#fl_005fbluegreen" title="Previous section in reading order"> < </a>]</td>
15959
<td valign="middle" align="left">[<a href="#fl_005fbrick" title="Next section in reading order"> > </a>]</td>
15960
<td valign="middle" align="left"> </td>
15961
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
15962
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
15963
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
15964
<td valign="middle" align="left"> </td>
15965
<td valign="middle" align="left"> </td>
15966
<td valign="middle" align="left"> </td>
15967
<td valign="middle" align="left"> </td>
15968
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
15969
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
15970
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
15971
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
15973
<a name="fl_005fblueslab-1"></a>
15974
<h3 class="subsection">7.3.6 fl_blueslab</h3>
15975
<a name="index-fl_005fblueslab"></a>
15977
<p>Dark blue slab like floor, that is marbled with black. A matching floor is
15978
<a href="#fl_005fredslab">fl_redslab</a>.
15980
<dl compact="compact">
15981
<dt> <b>Attributes:</b></dt>
15982
<dd><dl compact="compact">
15983
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 2.0 See section <a href="#adhesion">adhesion</a></dt>
15984
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 7.0 See section <a href="#friction">friction</a></dt>
15985
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: true See section <a href="#burnable">burnable</a></dt>
15989
<dt> <b>Variants:</b></dt>
15990
<dd><dl compact="compact">
15991
<dt> <img src="images/fl_blueslab.png" alt="images/fl_blueslab"><p> <b>fl_blueslab</b>
15993
<dt> <img src="images/fl_blueslab_framed.png" alt="images/fl_blueslab_framed"><p> <b>fl_blueslab_framed</b>
16000
<a name="fl_005fbrick"></a>
16001
<table cellpadding="1" cellspacing="1" border="0">
16002
<tr><td valign="middle" align="left">[<a href="#fl_005fblueslab" title="Previous section in reading order"> < </a>]</td>
16003
<td valign="middle" align="left">[<a href="#fl_005fbright" title="Next section in reading order"> > </a>]</td>
16004
<td valign="middle" align="left"> </td>
16005
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
16006
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
16007
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
16008
<td valign="middle" align="left"> </td>
16009
<td valign="middle" align="left"> </td>
16010
<td valign="middle" align="left"> </td>
16011
<td valign="middle" align="left"> </td>
16012
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
16013
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
16014
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
16015
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
16017
<a name="fl_005fbrick-1"></a>
16018
<h3 class="subsection">7.3.7 fl_brick</h3>
16019
<a name="index-fl_005fbrick"></a>
16021
<p>Floor composed of small red bricks.
16023
<dl compact="compact">
16024
<dt> <b>Attributes:</b></dt>
16025
<dd><dl compact="compact">
16026
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 2.0 See section <a href="#adhesion">adhesion</a></dt>
16027
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 3.5 See section <a href="#friction">friction</a></dt>
16028
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: false See section <a href="#burnable">burnable</a></dt>
16032
<dt> <b>Variants:</b></dt>
16033
<dd><dl compact="compact">
16034
<dt> <img src="images/fl_brick.png" alt="images/fl_brick"><p> <b>fl_brick</b>
16036
<dt> <img src="images/fl_brick_framed.png" alt="images/fl_brick_framed"><p> <b>fl_brick_framed</b>
16043
<a name="fl_005fbright"></a>
16044
<table cellpadding="1" cellspacing="1" border="0">
16045
<tr><td valign="middle" align="left">[<a href="#fl_005fbrick" title="Previous section in reading order"> < </a>]</td>
16046
<td valign="middle" align="left">[<a href="#fl_005fconcrete" title="Next section in reading order"> > </a>]</td>
16047
<td valign="middle" align="left"> </td>
16048
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
16049
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
16050
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
16051
<td valign="middle" align="left"> </td>
16052
<td valign="middle" align="left"> </td>
16053
<td valign="middle" align="left"> </td>
16054
<td valign="middle" align="left"> </td>
16055
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
16056
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
16057
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
16058
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
16060
<a name="fl_005fbright-1"></a>
16061
<h3 class="subsection">7.3.8 fl_bright</h3>
16062
<a name="index-fl_005fbright"></a>
16064
<p>Nearly white floor without any yinyang related features. A matching floor is
16065
<a href="#fl_005fdark">fl_dark</a>.
16067
<dl compact="compact">
16068
<dt> <b>Attributes:</b></dt>
16069
<dd><dl compact="compact">
16070
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 1.5 See section <a href="#adhesion">adhesion</a></dt>
16071
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 3.0 See section <a href="#friction">friction</a></dt>
16072
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: false See section <a href="#burnable">burnable</a></dt>
16076
<dt> <b>Variants:</b></dt>
16077
<dd><dl compact="compact">
16078
<dt> <img src="images/fl_bright.png" alt="images/fl_bright"><p> <b>fl_bright</b>
16080
<dt> <img src="images/fl_bright_framed.png" alt="images/fl_bright_framed"><p> <b>fl_bright_framed</b>
16087
<a name="fl_005fconcrete"></a>
16088
<table cellpadding="1" cellspacing="1" border="0">
16089
<tr><td valign="middle" align="left">[<a href="#fl_005fbright" title="Previous section in reading order"> < </a>]</td>
16090
<td valign="middle" align="left">[<a href="#fl_005fdark" title="Next section in reading order"> > </a>]</td>
16091
<td valign="middle" align="left"> </td>
16092
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
16093
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
16094
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
16095
<td valign="middle" align="left"> </td>
16096
<td valign="middle" align="left"> </td>
16097
<td valign="middle" align="left"> </td>
16098
<td valign="middle" align="left"> </td>
16099
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
16100
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
16101
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
16102
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
16104
<a name="fl_005fconcrete-1"></a>
16105
<h3 class="subsection">7.3.9 fl_concrete</h3>
16106
<a name="index-fl_005fconcrete"></a>
16108
<p>Granular gray concrete.
16110
<dl compact="compact">
16111
<dt> <b>Attributes:</b></dt>
16112
<dd><dl compact="compact">
16113
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 1.3 See section <a href="#adhesion">adhesion</a></dt>
16114
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 4.5 See section <a href="#friction">friction</a></dt>
16115
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: false See section <a href="#burnable">burnable</a></dt>
16119
<dt> <b>Variants:</b></dt>
16120
<dd><dl compact="compact">
16121
<dt> <img src="images/fl_concrete.png" alt="images/fl_concrete"><p> <b>fl_concrete</b>
16123
<dt> <img src="images/fl_concrete_framed.png" alt="images/fl_concrete_framed"><p> <b>fl_concrete_framed</b>
16130
<a name="fl_005fdark"></a>
16131
<table cellpadding="1" cellspacing="1" border="0">
16132
<tr><td valign="middle" align="left">[<a href="#fl_005fconcrete" title="Previous section in reading order"> < </a>]</td>
16133
<td valign="middle" align="left">[<a href="#fl_005fdarkgray" title="Next section in reading order"> > </a>]</td>
16134
<td valign="middle" align="left"> </td>
16135
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
16136
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
16137
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
16138
<td valign="middle" align="left"> </td>
16139
<td valign="middle" align="left"> </td>
16140
<td valign="middle" align="left"> </td>
16141
<td valign="middle" align="left"> </td>
16142
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
16143
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
16144
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
16145
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
16147
<a name="fl_005fdark-1"></a>
16148
<h3 class="subsection">7.3.10 fl_dark</h3>
16149
<a name="index-fl_005fdark"></a>
16151
<p>Nearly black floor without any yinyang related features. A matching floor is
16152
<a href="#fl_005fbright">fl_bright</a>.
16154
<dl compact="compact">
16155
<dt> <b>Attributes:</b></dt>
16156
<dd><dl compact="compact">
16157
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 1.5 See section <a href="#adhesion">adhesion</a></dt>
16158
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 3.0 See section <a href="#friction">friction</a></dt>
16159
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: false See section <a href="#burnable">burnable</a></dt>
16163
<dt> <b>Variants:</b></dt>
16164
<dd><dl compact="compact">
16165
<dt> <img src="images/fl_dark.png" alt="images/fl_dark"><p> <b>fl_dark</b>
16167
<dt> <img src="images/fl_dark_framed.png" alt="images/fl_dark_framed"><p> <b>fl_dark_framed</b>
16174
<a name="fl_005fdarkgray"></a>
16175
<table cellpadding="1" cellspacing="1" border="0">
16176
<tr><td valign="middle" align="left">[<a href="#fl_005fdark" title="Previous section in reading order"> < </a>]</td>
16177
<td valign="middle" align="left">[<a href="#fl_005fdunes" title="Next section in reading order"> > </a>]</td>
16178
<td valign="middle" align="left"> </td>
16179
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
16180
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
16181
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
16182
<td valign="middle" align="left"> </td>
16183
<td valign="middle" align="left"> </td>
16184
<td valign="middle" align="left"> </td>
16185
<td valign="middle" align="left"> </td>
16186
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
16187
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
16188
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
16189
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
16191
<a name="fl_005fdarkgray-1"></a>
16192
<h3 class="subsection">7.3.11 fl_darkgray</h3>
16193
<a name="index-fl_005fdarkgray"></a>
16195
<p>A medium to dark gray floor.
16197
<dl compact="compact">
16198
<dt> <b>Attributes:</b></dt>
16199
<dd><dl compact="compact">
16200
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 1.6 See section <a href="#adhesion">adhesion</a></dt>
16201
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 3.0 See section <a href="#friction">friction</a></dt>
16202
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: false See section <a href="#burnable">burnable</a></dt>
16206
<dt> <b>Variants:</b></dt>
16207
<dd><dl compact="compact">
16208
<dt> <img src="images/fl_darkgray.png" alt="images/fl_darkgray"><p> <b>fl_darkgray</b>
16210
<dt> <img src="images/fl_darkgray_framed.png" alt="images/fl_darkgray_framed"><p> <b>fl_darkgray_framed</b>
16217
<a name="fl_005fdunes"></a>
16218
<table cellpadding="1" cellspacing="1" border="0">
16219
<tr><td valign="middle" align="left">[<a href="#fl_005fdarkgray" title="Previous section in reading order"> < </a>]</td>
16220
<td valign="middle" align="left">[<a href="#fl_005fgravel" title="Next section in reading order"> > </a>]</td>
16221
<td valign="middle" align="left"> </td>
16222
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
16223
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
16224
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
16225
<td valign="middle" align="left"> </td>
16226
<td valign="middle" align="left"> </td>
16227
<td valign="middle" align="left"> </td>
16228
<td valign="middle" align="left"> </td>
16229
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
16230
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
16231
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
16232
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
16234
<a name="fl_005fdunes-1"></a>
16235
<h3 class="subsection">7.3.12 fl_dunes</h3>
16236
<a name="index-fl_005fdunes"></a>
16238
<p>Brown granular dunes.
16240
<dl compact="compact">
16241
<dt> <b>Attributes:</b></dt>
16242
<dd><dl compact="compact">
16243
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 1.0 See section <a href="#adhesion">adhesion</a></dt>
16244
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 1.3 See section <a href="#friction">friction</a></dt>
16245
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: false See section <a href="#burnable">burnable</a></dt>
16249
<dt> <b>Variants:</b></dt>
16250
<dd><dl compact="compact">
16251
<dt> <img src="images/fl_dunes.png" alt="images/fl_dunes"><p> <b>fl_dunes</b>
16253
<dt> <img src="images/fl_dunes_framed.png" alt="images/fl_dunes_framed"><p> <b>fl_dunes_framed</b>
16260
<a name="fl_005fgravel"></a>
16261
<table cellpadding="1" cellspacing="1" border="0">
16262
<tr><td valign="middle" align="left">[<a href="#fl_005fdunes" title="Previous section in reading order"> < </a>]</td>
16263
<td valign="middle" align="left">[<a href="#fl_005fgray" title="Next section in reading order"> > </a>]</td>
16264
<td valign="middle" align="left"> </td>
16265
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
16266
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
16267
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
16268
<td valign="middle" align="left"> </td>
16269
<td valign="middle" align="left"> </td>
16270
<td valign="middle" align="left"> </td>
16271
<td valign="middle" align="left"> </td>
16272
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
16273
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
16274
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
16275
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
16277
<a name="fl_005fgravel-1"></a>
16278
<h3 class="subsection">7.3.13 fl_gravel</h3>
16279
<a name="index-fl_005fgravel"></a>
16281
<p>Dark gray, granular floor.
16283
<dl compact="compact">
16284
<dt> <b>Attributes:</b></dt>
16285
<dd><dl compact="compact">
16286
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 1.5 See section <a href="#adhesion">adhesion</a></dt>
16287
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 3.2 See section <a href="#friction">friction</a></dt>
16288
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: false See section <a href="#burnable">burnable</a></dt>
16292
<dt> <b>Variants:</b></dt>
16293
<dd><dl compact="compact">
16294
<dt> <img src="images/fl_gravel.png" alt="images/fl_gravel"><p> <b>fl_gravel</b>
16296
<dt> <img src="images/fl_gravel_framed.png" alt="images/fl_gravel_framed"><p> <b>fl_gravel_framed</b>
16303
<a name="fl_005fgray"></a>
16304
<table cellpadding="1" cellspacing="1" border="0">
16305
<tr><td valign="middle" align="left">[<a href="#fl_005fgravel" title="Previous section in reading order"> < </a>]</td>
16306
<td valign="middle" align="left">[<a href="#fl_005fhimalaya" title="Next section in reading order"> > </a>]</td>
16307
<td valign="middle" align="left"> </td>
16308
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
16309
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
16310
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
16311
<td valign="middle" align="left"> </td>
16312
<td valign="middle" align="left"> </td>
16313
<td valign="middle" align="left"> </td>
16314
<td valign="middle" align="left"> </td>
16315
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
16316
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
16317
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
16318
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
16320
<a name="fl_005fgray-1"></a>
16321
<h3 class="subsection">7.3.14 fl_gray</h3>
16322
<a name="index-fl_005fgray"></a>
16324
<p>Gray with some brown spots.
16326
<dl compact="compact">
16327
<dt> <b>Attributes:</b></dt>
16328
<dd><dl compact="compact">
16329
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 3.0 See section <a href="#adhesion">adhesion</a></dt>
16330
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 5.0 See section <a href="#friction">friction</a></dt>
16331
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: false See section <a href="#burnable">burnable</a></dt>
16335
<dt> <b>Variants:</b></dt>
16336
<dd><dl compact="compact">
16337
<dt> <img src="images/fl_gray.png" alt="images/fl_gray"><p> <b>fl_gray</b>
16339
<dt> <img src="images/fl_gray_framed.png" alt="images/fl_gray_framed"><p> <b>fl_gray_framed</b>
16346
<a name="fl_005fhimalaya"></a>
16347
<table cellpadding="1" cellspacing="1" border="0">
16348
<tr><td valign="middle" align="left">[<a href="#fl_005fgray" title="Previous section in reading order"> < </a>]</td>
16349
<td valign="middle" align="left">[<a href="#fl_005fivory" title="Next section in reading order"> > </a>]</td>
16350
<td valign="middle" align="left"> </td>
16351
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
16352
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
16353
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
16354
<td valign="middle" align="left"> </td>
16355
<td valign="middle" align="left"> </td>
16356
<td valign="middle" align="left"> </td>
16357
<td valign="middle" align="left"> </td>
16358
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
16359
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
16360
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
16361
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
16363
<a name="fl_005fhimalaya-1"></a>
16364
<h3 class="subsection">7.3.15 fl_himalaya</h3>
16365
<a name="index-fl_005fhimalaya"></a>
16367
<p>Blue purple marbled floor.
16369
<dl compact="compact">
16370
<dt> <b>Attributes:</b></dt>
16371
<dd><dl compact="compact">
16372
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 2.0 See section <a href="#adhesion">adhesion</a></dt>
16373
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 5.0 See section <a href="#friction">friction</a></dt>
16374
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: false See section <a href="#burnable">burnable</a></dt>
16378
<dt> <b>Variants:</b></dt>
16379
<dd><dl compact="compact">
16380
<dt> <img src="images/fl_himalaya.png" alt="images/fl_himalaya"><p> <b>fl_himalaya</b>
16382
<dt> <img src="images/fl_himalaya_framed.png" alt="images/fl_himalaya_framed"><p> <b>fl_himalaya_framed</b>
16389
<a name="fl_005fivory"></a>
16390
<table cellpadding="1" cellspacing="1" border="0">
16391
<tr><td valign="middle" align="left">[<a href="#fl_005fhimalaya" title="Previous section in reading order"> < </a>]</td>
16392
<td valign="middle" align="left">[<a href="#fl_005flawn" title="Next section in reading order"> > </a>]</td>
16393
<td valign="middle" align="left"> </td>
16394
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
16395
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
16396
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
16397
<td valign="middle" align="left"> </td>
16398
<td valign="middle" align="left"> </td>
16399
<td valign="middle" align="left"> </td>
16400
<td valign="middle" align="left"> </td>
16401
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
16402
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
16403
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
16404
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
16406
<a name="fl_005fivory-1"></a>
16407
<h3 class="subsection">7.3.16 fl_ivory</h3>
16408
<a name="index-fl_005fivory"></a>
16410
<p>Warm ivory or pearl white floor.
16412
<dl compact="compact">
16413
<dt> <b>Attributes:</b></dt>
16414
<dd><dl compact="compact">
16415
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 1.6 See section <a href="#adhesion">adhesion</a></dt>
16416
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 2.2 See section <a href="#friction">friction</a></dt>
16417
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: true See section <a href="#burnable">burnable</a></dt>
16421
<dt> <b>Variants:</b></dt>
16422
<dd><dl compact="compact">
16423
<dt> <img src="images/fl_ivory.png" alt="images/fl_ivory"><p> <b>fl_ivory</b>
16425
<dt> <img src="images/fl_ivory_framed.png" alt="images/fl_ivory_framed"><p> <b>fl_ivory_framed</b>
16432
<a name="fl_005flawn"></a>
16433
<table cellpadding="1" cellspacing="1" border="0">
16434
<tr><td valign="middle" align="left">[<a href="#fl_005fivory" title="Previous section in reading order"> < </a>]</td>
16435
<td valign="middle" align="left">[<a href="#fl_005fmarble" title="Next section in reading order"> > </a>]</td>
16436
<td valign="middle" align="left"> </td>
16437
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
16438
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
16439
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
16440
<td valign="middle" align="left"> </td>
16441
<td valign="middle" align="left"> </td>
16442
<td valign="middle" align="left"> </td>
16443
<td valign="middle" align="left"> </td>
16444
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
16445
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
16446
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
16447
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
16449
<a name="fl_005flawn-1"></a>
16450
<h3 class="subsection">7.3.17 fl_lawn</h3>
16451
<a name="index-fl_005flawn"></a>
16453
<p>Grass floor. Light and dark grass and different textures of both exist.
16455
<p>When burnt, <code>fl_lawn</code> becomes <a href="#fl_005fdunes">fl_dunes</a>.
16457
<dl compact="compact">
16458
<dt> <b>Attributes:</b></dt>
16459
<dd><dl compact="compact">
16460
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 1.5 See section <a href="#adhesion">adhesion</a></dt>
16461
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 4.0 See section <a href="#friction">friction</a></dt>
16462
<dt> <b>texture</b>, <i>values</i>: "a","b","c1","c2","c3","c4","d1","d2","d3","d4","e1","e2","e3","e4" ; <i>default</i>: "a"; <i>access</i>: <code>none</code> See section <a href="#texture">texture</a></dt>
16463
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: true See section <a href="#burnable">burnable</a></dt>
16467
<dt> <b>Variants:</b></dt>
16469
<tr><td width="8%"><img src="images/fl_lawn.png" alt="images/fl_lawn"></td><td width="42%"><b>fl_lawn_a</b>: texture = ‘<samp>"a"</samp>’</td><td width="8%"><img src="images/fl_lawn_c.png" alt="images/fl_lawn_c"></td><td width="42%"><b>fl_lawn_b</b>: texture = ‘<samp>"b"</samp>’</td></tr>
16470
<tr><td width="8%"><img src="images/fl_lawn_e.png" alt="images/fl_lawn_e"></td><td width="42%"><b>fl_lawn_c1</b>: texture = ‘<samp>"c1"</samp>’</td><td width="8%"><img src="images/fl_lawn_f.png" alt="images/fl_lawn_f"></td><td width="42%"><b>fl_lawn_c3</b>: texture = ‘<samp>"c3"</samp>’</td></tr>
16471
<tr><td width="8%"><img src="images/fl_lawn_e2.png" alt="images/fl_lawn_e2"></td><td width="42%"><b>fl_lawn_c2</b>: texture = ‘<samp>"c2"</samp>’</td><td width="8%"><img src="images/fl_lawn_f2.png" alt="images/fl_lawn_f2"></td><td width="42%"><b>fl_lawn_c4</b>: texture = ‘<samp>"c4"</samp>’</td></tr>
16472
<tr><td width="8%"><img src="images/fl_lawn_g.png" alt="images/fl_lawn_g"></td><td width="42%"><b>fl_lawn_d1</b>: texture = ‘<samp>"d1"</samp>’</td><td width="8%"><img src="images/fl_lawn_h.png" alt="images/fl_lawn_h"></td><td width="42%"><b>fl_lawn_d3</b>: texture = ‘<samp>"d3"</samp>’</td></tr>
16473
<tr><td width="8%"><img src="images/fl_lawn_g2.png" alt="images/fl_lawn_g2"></td><td width="42%"><b>fl_lawn_d2</b>: texture = ‘<samp>"d2"</samp>’</td><td width="8%"><img src="images/fl_lawn_h2.png" alt="images/fl_lawn_h2"></td><td width="42%"><b>fl_lawn_d4</b>: texture = ‘<samp>"d4"</samp>’</td></tr>
16474
<tr><td width="8%"><img src="images/fl_lawn_i.png" alt="images/fl_lawn_i"></td><td width="42%"><b>fl_lawn_e1</b>: texture = ‘<samp>"e1"</samp>’</td><td width="8%"><img src="images/fl_lawn_j.png" alt="images/fl_lawn_j"></td><td width="42%"><b>fl_lawn_e3</b>: texture = ‘<samp>"e3"</samp>’</td></tr>
16475
<tr><td width="8%"><img src="images/fl_lawn_i2.png" alt="images/fl_lawn_i2"></td><td width="42%"><b>fl_lawn_e2</b>: texture = ‘<samp>"e2"</samp>’</td><td width="8%"><img src="images/fl_lawn_j2.png" alt="images/fl_lawn_j2"></td><td width="42%"><b>fl_lawn_e4</b>: texture = ‘<samp>"e4"</samp>’</td></tr>
16476
<tr><td width="8%"><img src="images/fl_lawn.png" alt="images/fl_lawn"></td><td width="42%"><b>fl_lawn</b>: texture = ‘<samp>"a"</samp>’</td></tr>
16482
<a name="fl_005fmarble"></a>
16483
<table cellpadding="1" cellspacing="1" border="0">
16484
<tr><td valign="middle" align="left">[<a href="#fl_005flawn" title="Previous section in reading order"> < </a>]</td>
16485
<td valign="middle" align="left">[<a href="#fl_005fmetal" title="Next section in reading order"> > </a>]</td>
16486
<td valign="middle" align="left"> </td>
16487
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
16488
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
16489
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
16490
<td valign="middle" align="left"> </td>
16491
<td valign="middle" align="left"> </td>
16492
<td valign="middle" align="left"> </td>
16493
<td valign="middle" align="left"> </td>
16494
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
16495
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
16496
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
16497
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
16499
<a name="fl_005fmarble-1"></a>
16500
<h3 class="subsection">7.3.18 fl_marble</h3>
16501
<a name="index-fl_005fmarble"></a>
16503
<p>Light red brown marbled floor.
16505
<dl compact="compact">
16506
<dt> <b>Attributes:</b></dt>
16507
<dd><dl compact="compact">
16508
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 2.0 See section <a href="#adhesion">adhesion</a></dt>
16509
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 6.4 See section <a href="#friction">friction</a></dt>
16510
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: true See section <a href="#burnable">burnable</a></dt>
16514
<dt> <b>Variants:</b></dt>
16515
<dd><dl compact="compact">
16516
<dt> <img src="images/fl_marble.png" alt="images/fl_marble"><p> <b>fl_marble</b>
16518
<dt> <img src="images/fl_marble_framed.png" alt="images/fl_marble_framed"><p> <b>fl_marble_framed</b>
16525
<a name="fl_005fmetal"></a>
16526
<table cellpadding="1" cellspacing="1" border="0">
16527
<tr><td valign="middle" align="left">[<a href="#fl_005fmarble" title="Previous section in reading order"> < </a>]</td>
16528
<td valign="middle" align="left">[<a href="#fl_005fmortar" title="Next section in reading order"> > </a>]</td>
16529
<td valign="middle" align="left"> </td>
16530
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
16531
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
16532
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
16533
<td valign="middle" align="left"> </td>
16534
<td valign="middle" align="left"> </td>
16535
<td valign="middle" align="left"> </td>
16536
<td valign="middle" align="left"> </td>
16537
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
16538
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
16539
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
16540
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
16542
<a name="fl_005fmetal-1"></a>
16543
<h3 class="subsection">7.3.19 fl_metal</h3>
16544
<a name="index-fl_005fmetal"></a>
16546
<p>Grey metal floor with rivets. Several different textures exists with horizontal
16547
or vertical aligned joists and various rivets.
16549
<dl compact="compact">
16550
<dt> <b>Attributes:</b></dt>
16551
<dd><dl compact="compact">
16552
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 2.0 See section <a href="#adhesion">adhesion</a></dt>
16553
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 3.0 See section <a href="#friction">friction</a></dt>
16554
<dt> <b>texture</b>, <i>values</i>: integer number, 1 <= n <= 7 ; <i>default</i>: random; <i>access</i>: <code>none</code> See section <a href="#texture">texture</a></dt>
16555
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: false See section <a href="#burnable">burnable</a></dt>
16559
<dt> <b>Variants:</b></dt>
16561
<tr><td width="8%"><img src="images/fl_metal.png" alt="images/fl_metal"></td><td width="42%"><b>fl_metal</b>: texture = ‘<samp>random</samp>’</td><td width="8%"><img src="images/fl_metal_framed.png" alt="images/fl_metal_framed"></td><td width="42%"><b>fl_metal_framed</b>: texture = ‘<samp>random</samp>’</td></tr>
16562
<tr><td width="8%"><img src="images/fl_metal.png" alt="images/fl_metal"></td><td width="42%"><b>fl_metal_1</b>: texture = <code>1</code></td><td width="8%"><img src="images/fl_metal_framed.png" alt="images/fl_metal_framed"></td><td width="42%"><b>fl_metal_1_framed</b>: texture = <code>1</code></td></tr>
16563
<tr><td width="8%"><img src="images/fl_metal_2.png" alt="images/fl_metal_2"></td><td width="42%"><b>fl_metal_2</b>: texture = <code>2</code></td><td width="8%"><img src="images/construction.png" alt="images/construction"></td><td width="42%"><b>fl_metal_2_framed</b>: texture = <code>2</code></td></tr>
16564
<tr><td width="8%"><img src="images/fl_metal_3.png" alt="images/fl_metal_3"></td><td width="42%"><b>fl_metal_3</b>: texture = <code>3</code></td><td width="8%"><img src="images/construction.png" alt="images/construction"></td><td width="42%"><b>fl_metal_3_framed</b>: texture = <code>3</code></td></tr>
16565
<tr><td width="8%"><img src="images/fl_metal_4.png" alt="images/fl_metal_4"></td><td width="42%"><b>fl_metal_4</b>: texture = <code>4</code></td><td width="8%"><img src="images/construction.png" alt="images/construction"></td><td width="42%"><b>fl_metal_4_framed</b>: texture = <code>4</code></td></tr>
16566
<tr><td width="8%"><img src="images/fl_metal_5.png" alt="images/fl_metal_5"></td><td width="42%"><b>fl_metal_5</b>: texture = <code>5</code></td><td width="8%"><img src="images/construction.png" alt="images/construction"></td><td width="42%"><b>fl_metal_5_framed</b>: texture = <code>5</code></td></tr>
16567
<tr><td width="8%"><img src="images/fl_metal_6.png" alt="images/fl_metal_6"></td><td width="42%"><b>fl_metal_6</b>: texture = <code>6</code></td><td width="8%"><img src="images/construction.png" alt="images/construction"></td><td width="42%"><b>fl_metal_6_framed</b>: texture = <code>6</code></td></tr>
16568
<tr><td width="8%"><img src="images/fl_metal_7.png" alt="images/fl_metal_7"></td><td width="42%"><b>fl_metal_7</b>: texture = <code>7</code></td><td width="8%"><img src="images/construction.png" alt="images/construction"></td><td width="42%"><b>fl_metal_7_framed</b>: texture = <code>7</code></td></tr>
16574
<a name="fl_005fmortar"></a>
16575
<table cellpadding="1" cellspacing="1" border="0">
16576
<tr><td valign="middle" align="left">[<a href="#fl_005fmetal" title="Previous section in reading order"> < </a>]</td>
16577
<td valign="middle" align="left">[<a href="#fl_005fpinkbumps" title="Next section in reading order"> > </a>]</td>
16578
<td valign="middle" align="left"> </td>
16579
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
16580
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
16581
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
16582
<td valign="middle" align="left"> </td>
16583
<td valign="middle" align="left"> </td>
16584
<td valign="middle" align="left"> </td>
16585
<td valign="middle" align="left"> </td>
16586
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
16587
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
16588
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
16589
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
16591
<a name="fl_005fmortar-1"></a>
16592
<h3 class="subsection">7.3.20 fl_mortar</h3>
16593
<a name="index-fl_005fmortar"></a>
16595
<p>Very rough brilliant white floor.
16597
<dl compact="compact">
16598
<dt> <b>Attributes:</b></dt>
16599
<dd><dl compact="compact">
16600
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 1.8 See section <a href="#adhesion">adhesion</a></dt>
16601
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 7.2 See section <a href="#friction">friction</a></dt>
16602
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: false See section <a href="#burnable">burnable</a></dt>
16606
<dt> <b>Variants:</b></dt>
16607
<dd><dl compact="compact">
16608
<dt> <img src="images/fl_mortar.png" alt="images/fl_mortar"><p> <b>fl_mortar</b>
16610
<dt> <img src="images/fl_mortar_framed.png" alt="images/fl_mortar_framed"><p> <b>fl_mortar_framed</b>
16617
<a name="fl_005fpinkbumps"></a>
16618
<table cellpadding="1" cellspacing="1" border="0">
16619
<tr><td valign="middle" align="left">[<a href="#fl_005fmortar" title="Previous section in reading order"> < </a>]</td>
16620
<td valign="middle" align="left">[<a href="#fl_005fplank" title="Next section in reading order"> > </a>]</td>
16621
<td valign="middle" align="left"> </td>
16622
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
16623
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
16624
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
16625
<td valign="middle" align="left"> </td>
16626
<td valign="middle" align="left"> </td>
16627
<td valign="middle" align="left"> </td>
16628
<td valign="middle" align="left"> </td>
16629
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
16630
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
16631
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
16632
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
16634
<a name="fl_005fpinkbumps-1"></a>
16635
<h3 class="subsection">7.3.21 fl_pinkbumps</h3>
16636
<a name="index-fl_005fpinkbumps"></a>
16638
<p>Pink floor with white bumps.
16640
<dl compact="compact">
16641
<dt> <b>Attributes:</b></dt>
16642
<dd><dl compact="compact">
16643
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 1.2 See section <a href="#adhesion">adhesion</a></dt>
16644
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 5.0 See section <a href="#friction">friction</a></dt>
16645
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: false See section <a href="#burnable">burnable</a></dt>
16649
<dt> <b>Variants:</b></dt>
16650
<dd><dl compact="compact">
16651
<dt> <img src="images/fl_pinkbumps.png" alt="images/fl_pinkbumps"><p> <b>fl_pinkbumps</b>
16653
<dt> <img src="images/fl_pinkbumps_framed.png" alt="images/fl_pinkbumps_framed"><p> <b>fl_pinkbumps_framed</b>
16660
<a name="fl_005fplank"></a>
16661
<table cellpadding="1" cellspacing="1" border="0">
16662
<tr><td valign="middle" align="left">[<a href="#fl_005fpinkbumps" title="Previous section in reading order"> < </a>]</td>
16663
<td valign="middle" align="left">[<a href="#fl_005fplatinum" title="Next section in reading order"> > </a>]</td>
16664
<td valign="middle" align="left"> </td>
16665
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
16666
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
16667
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
16668
<td valign="middle" align="left"> </td>
16669
<td valign="middle" align="left"> </td>
16670
<td valign="middle" align="left"> </td>
16671
<td valign="middle" align="left"> </td>
16672
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
16673
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
16674
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
16675
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
16677
<a name="fl_005fplank-1"></a>
16678
<h3 class="subsection">7.3.22 fl_plank</h3>
16679
<a name="index-fl_005fplank"></a>
16681
<p>Floor build up by small diagonal orange brown planks.
16683
<p>When burnt, <code>fl_plank</code> becomes <a href="#fl_005fabyss">fl_abyss</a>.
16685
<dl compact="compact">
16686
<dt> <b>Attributes:</b></dt>
16687
<dd><dl compact="compact">
16688
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 2.0 See section <a href="#adhesion">adhesion</a></dt>
16689
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 5.5 See section <a href="#friction">friction</a></dt>
16690
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: false See section <a href="#burnable">burnable</a></dt>
16694
<dt> <b>Variants:</b></dt>
16695
<dd><dl compact="compact">
16696
<dt> <img src="images/fl_plank.png" alt="images/fl_plank"><p> <b>fl_plank</b>
16698
<dt> <img src="images/fl_plank_framed.png" alt="images/fl_plank_framed"><p> <b>fl_plank_framed</b>
16705
<a name="fl_005fplatinum"></a>
16706
<table cellpadding="1" cellspacing="1" border="0">
16707
<tr><td valign="middle" align="left">[<a href="#fl_005fplank" title="Previous section in reading order"> < </a>]</td>
16708
<td valign="middle" align="left">[<a href="#fl_005fred" title="Next section in reading order"> > </a>]</td>
16709
<td valign="middle" align="left"> </td>
16710
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
16711
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
16712
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
16713
<td valign="middle" align="left"> </td>
16714
<td valign="middle" align="left"> </td>
16715
<td valign="middle" align="left"> </td>
16716
<td valign="middle" align="left"> </td>
16717
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
16718
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
16719
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
16720
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
16722
<a name="fl_005fplatinum-1"></a>
16723
<h3 class="subsection">7.3.23 fl_platinum</h3>
16724
<a name="index-fl_005fplatinum"></a>
16726
<p>Warm light gray floor.
16728
<dl compact="compact">
16729
<dt> <b>Attributes:</b></dt>
16730
<dd><dl compact="compact">
16731
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 1.6 See section <a href="#adhesion">adhesion</a></dt>
16732
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 3.0 See section <a href="#friction">friction</a></dt>
16733
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: true See section <a href="#burnable">burnable</a></dt>
16737
<dt> <b>Variants:</b></dt>
16738
<dd><dl compact="compact">
16739
<dt> <img src="images/fl_platinum.png" alt="images/fl_platinum"><p> <b>fl_platinum</b>
16741
<dt> <img src="images/fl_platinum_framed.png" alt="images/fl_platinum_framed"><p> <b>fl_platinum_framed</b>
16748
<a name="fl_005fred"></a>
16749
<table cellpadding="1" cellspacing="1" border="0">
16750
<tr><td valign="middle" align="left">[<a href="#fl_005fplatinum" title="Previous section in reading order"> < </a>]</td>
16751
<td valign="middle" align="left">[<a href="#fl_005fredslab" title="Next section in reading order"> > </a>]</td>
16752
<td valign="middle" align="left"> </td>
16753
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
16754
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
16755
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
16756
<td valign="middle" align="left"> </td>
16757
<td valign="middle" align="left"> </td>
16758
<td valign="middle" align="left"> </td>
16759
<td valign="middle" align="left"> </td>
16760
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
16761
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
16762
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
16763
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
16765
<a name="fl_005fred-1"></a>
16766
<h3 class="subsection">7.3.24 fl_red</h3>
16767
<a name="index-fl_005fred"></a>
16769
<p>Warm red, very slippy floor.
16771
<dl compact="compact">
16772
<dt> <b>Attributes:</b></dt>
16773
<dd><dl compact="compact">
16774
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 1.0 See section <a href="#adhesion">adhesion</a></dt>
16775
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 0.9 See section <a href="#friction">friction</a></dt>
16776
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: true See section <a href="#burnable">burnable</a></dt>
16780
<dt> <b>Variants:</b></dt>
16781
<dd><dl compact="compact">
16782
<dt> <img src="images/fl_red.png" alt="images/fl_red"><p> <b>fl_red</b>
16784
<dt> <img src="images/fl_red_framed.png" alt="images/fl_red_framed"><p> <b>fl_red_framed</b>
16791
<a name="fl_005fredslab"></a>
16792
<table cellpadding="1" cellspacing="1" border="0">
16793
<tr><td valign="middle" align="left">[<a href="#fl_005fred" title="Previous section in reading order"> < </a>]</td>
16794
<td valign="middle" align="left">[<a href="#fl_005frough" title="Next section in reading order"> > </a>]</td>
16795
<td valign="middle" align="left"> </td>
16796
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
16797
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
16798
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
16799
<td valign="middle" align="left"> </td>
16800
<td valign="middle" align="left"> </td>
16801
<td valign="middle" align="left"> </td>
16802
<td valign="middle" align="left"> </td>
16803
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
16804
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
16805
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
16806
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
16808
<a name="fl_005fredslab-1"></a>
16809
<h3 class="subsection">7.3.25 fl_redslab</h3>
16810
<a name="index-fl_005fredslab"></a>
16812
<p>Dark red slab floor, that is marbled with black. A matching floor is
16813
<a href="#fl_005fblueslab">fl_blueslab</a>.
16815
<dl compact="compact">
16816
<dt> <b>Attributes:</b></dt>
16817
<dd><dl compact="compact">
16818
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 2.0 See section <a href="#adhesion">adhesion</a></dt>
16819
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 7.0 See section <a href="#friction">friction</a></dt>
16820
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: true See section <a href="#burnable">burnable</a></dt>
16824
<dt> <b>Variants:</b></dt>
16825
<dd><dl compact="compact">
16826
<dt> <img src="images/fl_redslab.png" alt="images/fl_redslab"><p> <b>fl_redslab</b>
16828
<dt> <img src="images/fl_redslab_framed.png" alt="images/fl_redslab_framed"><p> <b>fl_redslab_framed</b>
16835
<a name="fl_005frough"></a>
16836
<table cellpadding="1" cellspacing="1" border="0">
16837
<tr><td valign="middle" align="left">[<a href="#fl_005fredslab" title="Previous section in reading order"> < </a>]</td>
16838
<td valign="middle" align="left">[<a href="#fl_005fsahara" title="Next section in reading order"> > </a>]</td>
16839
<td valign="middle" align="left"> </td>
16840
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
16841
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
16842
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
16843
<td valign="middle" align="left"> </td>
16844
<td valign="middle" align="left"> </td>
16845
<td valign="middle" align="left"> </td>
16846
<td valign="middle" align="left"> </td>
16847
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
16848
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
16849
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
16850
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
16852
<a name="fl_005frough-1"></a>
16853
<h3 class="subsection">7.3.26 fl_rough</h3>
16854
<a name="index-fl_005frough"></a>
16856
<p>Rough warm white floor.
16858
<dl compact="compact">
16859
<dt> <b>Attributes:</b></dt>
16860
<dd><dl compact="compact">
16861
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 2.0 See section <a href="#adhesion">adhesion</a></dt>
16862
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 7.0 See section <a href="#friction">friction</a></dt>
16863
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: true See section <a href="#burnable">burnable</a></dt>
16867
<dt> <b>Variants:</b></dt>
16868
<dd><dl compact="compact">
16869
<dt> <img src="images/fl_rough.png" alt="images/fl_rough"><p> <b>fl_rough</b>
16871
<dt> <img src="images/fl_rough_framed.png" alt="images/fl_rough_framed"><p> <b>fl_rough_framed</b>
16878
<a name="fl_005fsahara"></a>
16879
<table cellpadding="1" cellspacing="1" border="0">
16880
<tr><td valign="middle" align="left">[<a href="#fl_005frough" title="Previous section in reading order"> < </a>]</td>
16881
<td valign="middle" align="left">[<a href="#fl_005fsamba" title="Next section in reading order"> > </a>]</td>
16882
<td valign="middle" align="left"> </td>
16883
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
16884
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
16885
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
16886
<td valign="middle" align="left"> </td>
16887
<td valign="middle" align="left"> </td>
16888
<td valign="middle" align="left"> </td>
16889
<td valign="middle" align="left"> </td>
16890
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
16891
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
16892
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
16893
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
16895
<a name="fl_005fsahara-1"></a>
16896
<h3 class="subsection">7.3.27 fl_sahara</h3>
16897
<a name="index-fl_005fsahara"></a>
16899
<p>Bright yellow sandstone floor.
16901
<dl compact="compact">
16902
<dt> <b>Attributes:</b></dt>
16903
<dd><dl compact="compact">
16904
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 2.0 See section <a href="#adhesion">adhesion</a></dt>
16905
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 6.4 See section <a href="#friction">friction</a></dt>
16906
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: false See section <a href="#burnable">burnable</a></dt>
16910
<dt> <b>Variants:</b></dt>
16911
<dd><dl compact="compact">
16912
<dt> <img src="images/fl_sahara.png" alt="images/fl_sahara"><p> <b>fl_sahara</b>
16914
<dt> <img src="images/fl_sahara_framed.png" alt="images/fl_sahara_framed"><p> <b>fl_sahara_framed</b>
16921
<a name="fl_005fsamba"></a>
16922
<table cellpadding="1" cellspacing="1" border="0">
16923
<tr><td valign="middle" align="left">[<a href="#fl_005fsahara" title="Previous section in reading order"> < </a>]</td>
16924
<td valign="middle" align="left">[<a href="#fl_005fsand" title="Next section in reading order"> > </a>]</td>
16925
<td valign="middle" align="left"> </td>
16926
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
16927
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
16928
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
16929
<td valign="middle" align="left"> </td>
16930
<td valign="middle" align="left"> </td>
16931
<td valign="middle" align="left"> </td>
16932
<td valign="middle" align="left"> </td>
16933
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
16934
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
16935
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
16936
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
16938
<a name="fl_005fsamba-1"></a>
16939
<h3 class="subsection">7.3.28 fl_samba</h3>
16940
<a name="index-fl_005fsamba"></a>
16942
<p>Gray bleached wooden floor. Textures with horizontal and vertical aligned plank
16945
<p>When burnt, <code>fl_samba</code> becomes <a href="#fl_005fabyss">fl_abyss</a>.
16947
<dl compact="compact">
16948
<dt> <b>Attributes:</b></dt>
16949
<dd><dl compact="compact">
16950
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 2.0 See section <a href="#adhesion">adhesion</a></dt>
16951
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 6.0 See section <a href="#friction">friction</a></dt>
16952
<dt> <b>texture</b>, <i>values</i>: "h", "v" ; <i>default</i>: random; <i>access</i>: <code>none</code> See section <a href="#texture">texture</a></dt>
16953
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: true See section <a href="#burnable">burnable</a></dt>
16957
<dt> <b>Variants:</b></dt>
16958
<dd><dl compact="compact">
16959
<dt> <img src="images/fl_samba.png" alt="images/fl_samba"><p> <b>fl_samba</b>: texture = ‘<samp>random</samp>’
16961
<dt> <img src="images/fl_samba.png" alt="images/fl_samba"><p> <b>fl_samba_h</b>: texture = <code>"h"</code>
16963
<dt> <img src="images/fl_samba_2.png" alt="images/fl_samba_2"><p> <b>fl_samba_v</b>: texture = <code>"v"</code>
16965
<dt> <img src="images/fl_samba_framed.png" alt="images/fl_samba_framed"><p> <b>fl_samba_framed</b>: texture = ‘<samp>random</samp>’
16967
<dt> <img src="images/fl_samba_framed.png" alt="images/fl_samba_framed"><p> <b>fl_samba_h_framed</b>: texture = <code>"h"</code>
16969
<dt> <img src="images/construction.png" alt="images/construction"><p> <b>fl_samba_v_framed</b>: texture = <code>"v"</code>
16976
<a name="fl_005fsand"></a>
16977
<table cellpadding="1" cellspacing="1" border="0">
16978
<tr><td valign="middle" align="left">[<a href="#fl_005fsamba" title="Previous section in reading order"> < </a>]</td>
16979
<td valign="middle" align="left">[<a href="#fl_005fspace" title="Next section in reading order"> > </a>]</td>
16980
<td valign="middle" align="left"> </td>
16981
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
16982
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
16983
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
16984
<td valign="middle" align="left"> </td>
16985
<td valign="middle" align="left"> </td>
16986
<td valign="middle" align="left"> </td>
16987
<td valign="middle" align="left"> </td>
16988
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
16989
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
16990
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
16991
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
16993
<a name="fl_005fsand-1"></a>
16994
<h3 class="subsection">7.3.29 fl_sand</h3>
16995
<a name="index-fl_005fsand"></a>
16997
<p>Granular orange gray sand floor.
16999
<dl compact="compact">
17000
<dt> <b>Attributes:</b></dt>
17001
<dd><dl compact="compact">
17002
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 2.0 See section <a href="#adhesion">adhesion</a></dt>
17003
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 6.0 See section <a href="#friction">friction</a></dt>
17004
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: false See section <a href="#burnable">burnable</a></dt>
17008
<dt> <b>Variants:</b></dt>
17009
<dd><dl compact="compact">
17010
<dt> <img src="images/fl_sand.png" alt="images/fl_sand"><p> <b>fl_sand</b>
17012
<dt> <img src="images/fl_sand_framed.png" alt="images/fl_sand_framed"><p> <b>fl_sand_framed</b>
17019
<a name="fl_005fspace"></a>
17020
<table cellpadding="1" cellspacing="1" border="0">
17021
<tr><td valign="middle" align="left">[<a href="#fl_005fsand" title="Previous section in reading order"> < </a>]</td>
17022
<td valign="middle" align="left">[<a href="#fl_005fstone" title="Next section in reading order"> > </a>]</td>
17023
<td valign="middle" align="left"> </td>
17024
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
17025
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
17026
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
17027
<td valign="middle" align="left"> </td>
17028
<td valign="middle" align="left"> </td>
17029
<td valign="middle" align="left"> </td>
17030
<td valign="middle" align="left"> </td>
17031
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
17032
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
17033
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
17034
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
17036
<a name="fl_005fspace-1"></a>
17037
<h3 class="subsection">7.3.30 fl_space</h3>
17038
<a name="index-fl_005fspace"></a>
17040
<p>Black space with a few sparkling stars. This floor has neither a friction nor
17041
does it provide an adhesion. All actors do drift for infinity on this floor
17042
until they reach another floor.
17044
<dl compact="compact">
17045
<dt> <b>Attributes:</b></dt>
17046
<dd><dl compact="compact">
17047
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 0.0 See section <a href="#adhesion">adhesion</a></dt>
17048
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 0.0 See section <a href="#friction">friction</a></dt>
17049
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: false See section <a href="#burnable">burnable</a></dt>
17053
<dt> <b>Variants:</b></dt>
17054
<dd><dl compact="compact">
17055
<dt> <img src="images/fl_space.png" alt="images/fl_space"><p> <b>fl_space</b>
17062
<a name="fl_005fstone"></a>
17063
<table cellpadding="1" cellspacing="1" border="0">
17064
<tr><td valign="middle" align="left">[<a href="#fl_005fspace" title="Previous section in reading order"> < </a>]</td>
17065
<td valign="middle" align="left">[<a href="#fl_005ftigris" title="Next section in reading order"> > </a>]</td>
17066
<td valign="middle" align="left"> </td>
17067
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
17068
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
17069
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
17070
<td valign="middle" align="left"> </td>
17071
<td valign="middle" align="left"> </td>
17072
<td valign="middle" align="left"> </td>
17073
<td valign="middle" align="left"> </td>
17074
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
17075
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
17076
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
17077
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
17079
<a name="fl_005fstone-1"></a>
17080
<h3 class="subsection">7.3.31 fl_stone</h3>
17081
<a name="index-fl_005fstone"></a>
17083
<p>Granular brown gray floor.
17085
<dl compact="compact">
17086
<dt> <b>Attributes:</b></dt>
17087
<dd><dl compact="compact">
17088
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 1.0 See section <a href="#adhesion">adhesion</a></dt>
17089
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 1.4 See section <a href="#friction">friction</a></dt>
17090
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: false See section <a href="#burnable">burnable</a></dt>
17094
<dt> <b>Variants:</b></dt>
17095
<dd><dl compact="compact">
17096
<dt> <img src="images/fl_stone.png" alt="images/fl_stone"><p> <b>fl_stone</b>
17098
<dt> <img src="images/fl_stone_framed.png" alt="images/fl_stone_framed"><p> <b>fl_stone_framed</b>
17105
<a name="fl_005ftigris"></a>
17106
<table cellpadding="1" cellspacing="1" border="0">
17107
<tr><td valign="middle" align="left">[<a href="#fl_005fstone" title="Previous section in reading order"> < </a>]</td>
17108
<td valign="middle" align="left">[<a href="#fl_005fwhite" title="Next section in reading order"> > </a>]</td>
17109
<td valign="middle" align="left"> </td>
17110
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
17111
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
17112
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
17113
<td valign="middle" align="left"> </td>
17114
<td valign="middle" align="left"> </td>
17115
<td valign="middle" align="left"> </td>
17116
<td valign="middle" align="left"> </td>
17117
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
17118
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
17119
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
17120
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
17122
<a name="fl_005ftigris-1"></a>
17123
<h3 class="subsection">7.3.32 fl_tigris</h3>
17124
<a name="index-fl_005ftigris"></a>
17126
<p>Red sandstone floor.
17128
<dl compact="compact">
17129
<dt> <b>Attributes:</b></dt>
17130
<dd><dl compact="compact">
17131
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 2.0 See section <a href="#adhesion">adhesion</a></dt>
17132
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 6.0 See section <a href="#friction">friction</a></dt>
17133
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: true See section <a href="#burnable">burnable</a></dt>
17137
<dt> <b>Variants:</b></dt>
17138
<dd><dl compact="compact">
17139
<dt> <img src="images/fl_tigris.png" alt="images/fl_tigris"><p> <b>fl_tigris</b>
17141
<dt> <img src="images/fl_tigris_framed.png" alt="images/fl_tigris_framed"><p> <b>fl_tigris_framed</b>
17148
<a name="fl_005fwhite"></a>
17149
<table cellpadding="1" cellspacing="1" border="0">
17150
<tr><td valign="middle" align="left">[<a href="#fl_005ftigris" title="Previous section in reading order"> < </a>]</td>
17151
<td valign="middle" align="left">[<a href="#fl_005fwoven" title="Next section in reading order"> > </a>]</td>
17152
<td valign="middle" align="left"> </td>
17153
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
17154
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
17155
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
17156
<td valign="middle" align="left"> </td>
17157
<td valign="middle" align="left"> </td>
17158
<td valign="middle" align="left"> </td>
17159
<td valign="middle" align="left"> </td>
17160
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
17161
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
17162
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
17163
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
17165
<a name="fl_005fwhite-1"></a>
17166
<h3 class="subsection">7.3.33 fl_white</h3>
17167
<a name="index-fl_005fwhite"></a>
17169
<p>Pure white floor without any yinyang related features.
17171
<dl compact="compact">
17172
<dt> <b>Attributes:</b></dt>
17173
<dd><dl compact="compact">
17174
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 2.0 See section <a href="#adhesion">adhesion</a></dt>
17175
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 4.0 See section <a href="#friction">friction</a></dt>
17176
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: false See section <a href="#burnable">burnable</a></dt>
17180
<dt> <b>Variants:</b></dt>
17181
<dd><dl compact="compact">
17182
<dt> <img src="images/fl_white.png" alt="images/fl_white"><p> <b>fl_white</b>
17184
<dt> <img src="images/fl_white_framed.png" alt="images/fl_white_framed"><p> <b>fl_white_framed</b>
17191
<a name="fl_005fwoven"></a>
17192
<table cellpadding="1" cellspacing="1" border="0">
17193
<tr><td valign="middle" align="left">[<a href="#fl_005fwhite" title="Previous section in reading order"> < </a>]</td>
17194
<td valign="middle" align="left">[<a href="#Special-Floors" title="Next section in reading order"> > </a>]</td>
17195
<td valign="middle" align="left"> </td>
17196
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
17197
<td valign="middle" align="left">[<a href="#Standard-Floors" title="Up section"> Up </a>]</td>
17198
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
17199
<td valign="middle" align="left"> </td>
17200
<td valign="middle" align="left"> </td>
17201
<td valign="middle" align="left"> </td>
17202
<td valign="middle" align="left"> </td>
17203
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
17204
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
17205
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
17206
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
17208
<a name="fl_005fwoven-1"></a>
17209
<h3 class="subsection">7.3.34 fl_woven</h3>
17210
<a name="index-fl_005fwoven"></a>
17212
<p>Diagonal woven white floor with black shadows.
17214
<dl compact="compact">
17215
<dt> <b>Attributes:</b></dt>
17216
<dd><dl compact="compact">
17217
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 3.0 See section <a href="#adhesion">adhesion</a></dt>
17218
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 6.5 See section <a href="#friction">friction</a></dt>
17219
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: true See section <a href="#burnable">burnable</a></dt>
17223
<dt> <b>Variants:</b></dt>
17224
<dd><dl compact="compact">
17225
<dt> <img src="images/fl_woven.png" alt="images/fl_woven"><p> <b>fl_woven</b>
17227
<dt> <img src="images/fl_woven_framed.png" alt="images/fl_woven_framed"><p> <b>fl_woven_framed</b>
17234
<a name="Special-Floors"></a>
17235
<table cellpadding="1" cellspacing="1" border="0">
17236
<tr><td valign="middle" align="left">[<a href="#fl_005fwoven" title="Previous section in reading order"> < </a>]</td>
17237
<td valign="middle" align="left">[<a href="#fl_005fabyss" title="Next section in reading order"> > </a>]</td>
17238
<td valign="middle" align="left"> </td>
17239
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
17240
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Up section"> Up </a>]</td>
17241
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
17242
<td valign="middle" align="left"> </td>
17243
<td valign="middle" align="left"> </td>
17244
<td valign="middle" align="left"> </td>
17245
<td valign="middle" align="left"> </td>
17246
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
17247
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
17248
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
17249
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
17251
<a name="Special-Floors-1"></a>
17252
<h2 class="section">7.4 Special Floors</h2>
17254
<table class="menu" border="0" cellspacing="0">
17255
<tr><td align="left" valign="top"><a href="#fl_005fabyss">7.4.1 fl_abyss</a></td><td> </td><td align="left" valign="top"> Deep black Chasm
17257
<tr><td align="left" valign="top"><a href="#fl_005fbridge">7.4.2 fl_bridge</a></td><td> </td><td align="left" valign="top"> Abyss Bridge
17259
<tr><td align="left" valign="top"><a href="#fl_005ffake">7.4.3 fl_fake</a></td><td> </td><td align="left" valign="top"> Fake mimicking other Floors
17261
<tr><td align="left" valign="top"><a href="#fl_005fhay">7.4.4 fl_hay</a></td><td> </td><td align="left" valign="top"> Floodable Hay
17263
<tr><td align="left" valign="top"><a href="#fl_005fice">7.4.5 fl_ice</a></td><td> </td><td align="left" valign="top"> Slippery frozen water
17265
<tr><td align="left" valign="top"><a href="#fl_005finverse">7.4.6 fl_inverse</a></td><td> </td><td align="left" valign="top"> Accelerate into the inverse direction
17267
<tr><td align="left" valign="top"><a href="#fl_005frock">7.4.7 fl_rock</a></td><td> </td><td align="left" valign="top"> Floodable Rock Floor
17269
<tr><td align="left" valign="top"><a href="#fl_005fscales">7.4.8 fl_scales</a></td><td> </td><td align="left" valign="top"> Weight dependent Trigger
17271
<tr><td align="left" valign="top"><a href="#fl_005fslope">7.4.9 fl_slope</a></td><td> </td><td align="left" valign="top"> Slopes in various shapes
17273
<tr><td align="left" valign="top"><a href="#fl_005fswamp">7.4.10 fl_swamp</a></td><td> </td><td align="left" valign="top"> Sticky sinkable Floor
17275
<tr><td align="left" valign="top"><a href="#fl_005fthief">7.4.11 fl_thief</a></td><td> </td><td align="left" valign="top"> Hidden Thief
17277
<tr><td align="left" valign="top"><a href="#fl_005fwater">7.4.12 fl_water</a></td><td> </td><td align="left" valign="top"> Sinkable Water
17279
<tr><td align="left" valign="top"><a href="#fl_005fwood">7.4.13 fl_wood</a></td><td> </td><td align="left" valign="top"> Floodable Wood Floor
17281
<tr><td align="left" valign="top"><a href="#fl_005fyinyang">7.4.14 fl_yinyang</a></td><td> </td><td align="left" valign="top"> Player dependent Adhesion
17286
<a name="fl_005fabyss"></a>
17287
<table cellpadding="1" cellspacing="1" border="0">
17288
<tr><td valign="middle" align="left">[<a href="#Special-Floors" title="Previous section in reading order"> < </a>]</td>
17289
<td valign="middle" align="left">[<a href="#fl_005fbridge" title="Next section in reading order"> > </a>]</td>
17290
<td valign="middle" align="left"> </td>
17291
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
17292
<td valign="middle" align="left">[<a href="#Special-Floors" title="Up section"> Up </a>]</td>
17293
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
17294
<td valign="middle" align="left"> </td>
17295
<td valign="middle" align="left"> </td>
17296
<td valign="middle" align="left"> </td>
17297
<td valign="middle" align="left"> </td>
17298
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
17299
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
17300
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
17301
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
17303
<a name="fl_005fabyss-1"></a>
17304
<h3 class="subsection">7.4.1 fl_abyss</h3>
17305
<a name="index-fl_005fabyss"></a>
17307
<p>Pure black abyss into which all rolling balls do fall and shatter. An abyss
17308
chasm can be crossed by jumping. <a href="#Actors">Actors</a> protected by an activated
17309
<a href="#it_005fumbrella">it_umbrella</a> can pass and even move on an abyss as it provides useful
17310
‘<samp>adhesion</samp>’ and ‘<samp>friction</samp>’. Another comparable floor barrier is
17311
<a href="#fl_005fwater">fl_water</a>.
17313
<p>Many floors disintegrate on fire or on a dissolving <a href="#it_005fcrack">it_crack</a> into an
17314
abyss. The abyss itself is indestructible. It does neither burn nor crack.
17316
<p>Some stones fall into abyss, too. <a href="#st_005fbox">st_box</a> will build floors on which all
17317
actors can move and pass the former abyss filled grid.
17319
<p>By default, <code>fl_abyss</code> can’t burn. However, when it burns (e.g. by
17320
<a href="#it_005fburnable">it_burnable</a>_oil), it does not create <a href="#it_005fburnable">it_burnable</a>_ash in the end by
17321
default (i.e., <a href="#noash">noash</a> is true by default). In particular, when
17322
<code>burnable</code> is set to <code>true</code>, an abyss may reignite arbitrarily often.
17324
<dl compact="compact">
17325
<dt> <b>Attributes:</b></dt>
17326
<dd><dl compact="compact">
17327
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 1.0 See section <a href="#adhesion">adhesion</a></dt>
17328
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 2.0 See section <a href="#friction">friction</a></dt>
17329
<dt> <b>indestructible</b>, <i>values</i>: bool ; <i>default</i>: true; <i>access</i>: <code>none</code> See section <a href="#indestructible">indestructible</a></dt>
17330
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: false See section <a href="#burnable">burnable</a></dt>
17331
<dt> <b>noash</b>, <i>values</i>: boolean; <i>default</i>: true See section <a href="#noash">noash</a></dt>
17335
<dt> <b>Variants:</b></dt>
17336
<dd><dl compact="compact">
17337
<dt> <img src="images/fl_abyss.png" alt="images/fl_abyss"><p> <b>fl_abyss</b>
17344
<a name="fl_005fbridge"></a>
17345
<table cellpadding="1" cellspacing="1" border="0">
17346
<tr><td valign="middle" align="left">[<a href="#fl_005fabyss" title="Previous section in reading order"> < </a>]</td>
17347
<td valign="middle" align="left">[<a href="#fl_005ffake" title="Next section in reading order"> > </a>]</td>
17348
<td valign="middle" align="left"> </td>
17349
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
17350
<td valign="middle" align="left">[<a href="#Special-Floors" title="Up section"> Up </a>]</td>
17351
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
17352
<td valign="middle" align="left"> </td>
17353
<td valign="middle" align="left"> </td>
17354
<td valign="middle" align="left"> </td>
17355
<td valign="middle" align="left"> </td>
17356
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
17357
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
17358
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
17359
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
17361
<a name="fl_005fbridge-1"></a>
17362
<h3 class="subsection">7.4.2 fl_bridge</h3>
17363
<a name="index-fl_005fbridge"></a>
17365
<p>A bridge is a variable floor that can be passed when being <code>CLOSED</code> but
17366
being impassable for marbles like <a href="#fl_005fabyss">fl_abyss</a> when being opened. Floor
17367
bridges come in several flavors. They can be grey or wooden brown, they can
17368
pop up in the center or emerge from one side. The flavor string is a combination
17369
of a color character and an emerging direction character. Note that not all
17370
combinations do exist.
17372
<p>Bridges can be opened and closed via messages and state set operations like
17373
<a href="#st_005fdoor">st_door</a>.
17375
<p>But a unique feature of bridges is to close on a solid stone being pushed onto
17376
them. Thus stones do not fall into the visible abyss of an opened bridge, but
17377
can be pushed over them. But as soon as the stone leaves the bridge it opens
17378
again. Thus a user will notice the closing and opening bridge on stone pushes.
17380
<p>To be more precise after a stone leaving a bridge, it switches into the state
17381
that it would have had if the stone would never have been on top of it. That
17382
means that if a stone gets pushed onto an open bridge and the bridge receives
17383
a <code>"close"</code> or <code>"toggle"</code> message while the stone is being on top the
17384
bridge remains closed when the stone is pushed away.
17386
<p>A bridge being set adjusts its state according to the <a href="#Snapshot-Principle">Snapshot Principle</a>.
17387
It checks for solid stones being on top of it and auto closes accordingly.
17389
<p>Only the brown (wooden) bridges are burnable by default. Open bridges are never
17390
burnable, regardless of the <a href="#burnable">burnable</a>-attribute.
17392
<dl compact="compact">
17393
<dt> <b>Attributes:</b></dt>
17395
<dl compact="compact">
17396
<dt> <b>state</b>, <i>values</i>: <code>CLOSED</code>, <code>OPEN</code>; <i>default</i>: <code>OPEN</code> See section <a href="#state">state</a></dt>
17397
<dd><p>The state as visible and responsible for the actor ability to pass.
17399
<dt> <b>flavor</b>, <i>values</i>: <code>"gc"</code>, <code>"bw"</code>, <code>"bs"</code>, <code>"be"</code>, <code>"bn"</code>; <i>default</i>: <code>"gc"</code></dt>
17400
<dd><p>The type of the bridge.
17402
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 1.0 See section <a href="#adhesion">adhesion</a></dt>
17403
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 5.0 See section <a href="#friction">friction</a></dt>
17404
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: depends on <code>flavor</code> See section <a href="#burnable">burnable</a></dt>
17405
<dd><p>True if flavor is <code>"b*"</code>, false otherwise.
17410
<dt> <b>Messages:</b></dt>
17411
<dd><dl compact="compact">
17412
<dt> <b>open</b> See section <a href="#open">open</a></dt>
17413
<dd><p>Opens a closed bridge that is not covered by a solid stone. Otherwise the
17414
explicit open request will be registered and executed as soon as the stone
17417
<dt> <b>close</b> See section <a href="#close">close</a></dt>
17418
<dd><p>Closes an open bridge. If the bridge is already closed by a covering solid
17419
stone, the request will be registered and the bridge will not open when the
17420
stone is pushed away.
17422
<dt> <b>signal</b> See section <a href="#signal">signal</a></dt>
17423
<dd><p>A signal of value 1 sends an open message, a signal of value 0 sends a close
17426
<dt> <b>toggle</b> See section <a href="#toggle">toggle</a></dt>
17427
<dd><p>A toggle causes a change of the state if no stone is on top, or the registered
17428
explicit state if a solid stone currently covers the bridge.
17434
<dt> <b>Variants:</b></dt>
17435
<dd><dl compact="compact">
17436
<dt> <img src="images/fl_bridge_gc_closed.png" alt="images/fl_bridge_gc_closed"><p> <b>fl_bridge</b> flavor = <code>"gc"</code>
17438
<dt> <img src="images/fl_bridge_gc_closed.png" alt="images/fl_bridge_gc_closed"><p> <b>fl_bridge_gc</b> flavor = <code>"gc"</code>
17440
<dt> <img src="images/fl_bridge_bw_closed.png" alt="images/fl_bridge_bw_closed"><p> <b>fl_bridge_bw</b> flavor = <code>"bw"</code>
17442
<dt> <img src="images/fl_bridge_bw_closed.png" alt="images/fl_bridge_bw_closed"><p> <b>fl_bridge_bs</b> flavor = <code>"bs"</code>
17444
<dt> <img src="images/fl_bridge_bw_closed.png" alt="images/fl_bridge_bw_closed"><p> <b>fl_bridge_be</b> flavor = <code>"be"</code>
17446
<dt> <img src="images/fl_bridge_bw_closed.png" alt="images/fl_bridge_bw_closed"><p> <b>fl_bridge_bn</b> flavor = <code>"bn"</code>
17454
<a name="fl_005ffake"></a>
17455
<table cellpadding="1" cellspacing="1" border="0">
17456
<tr><td valign="middle" align="left">[<a href="#fl_005fbridge" title="Previous section in reading order"> < </a>]</td>
17457
<td valign="middle" align="left">[<a href="#fl_005fhay" title="Next section in reading order"> > </a>]</td>
17458
<td valign="middle" align="left"> </td>
17459
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
17460
<td valign="middle" align="left">[<a href="#Special-Floors" title="Up section"> Up </a>]</td>
17461
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
17462
<td valign="middle" align="left"> </td>
17463
<td valign="middle" align="left"> </td>
17464
<td valign="middle" align="left"> </td>
17465
<td valign="middle" align="left"> </td>
17466
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
17467
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
17468
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
17469
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
17471
<a name="fl_005ffake-1"></a>
17472
<h3 class="subsection">7.4.3 fl_fake</h3>
17473
<a name="index-fl_005ffake"></a>
17475
<p>A floor that mimics other floors, but does not act like them.
17477
<p>In contrast to <a href="#fl_005fabyss">fl_abyss</a> the fake abyss is just a standard floor that lets
17478
pass any actor without any harm.
17480
<p>A fake trigger looks similar to an <a href="#it_005ftrigger">it_trigger</a> but is just a standard floor
17481
without any special features.
17483
<dl compact="compact">
17484
<dt> <b>Attributes:</b></dt>
17485
<dd><dl compact="compact">
17486
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 2.0 See section <a href="#adhesion">adhesion</a></dt>
17487
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 3.0 See section <a href="#friction">friction</a></dt>
17488
<dt> <b>flavor</b>, <i>values</i>: <code>"abyss"</code>, <code>"trigger"</code>; <i>default</i>: <code>"abyss"</code>; <i>access</i>: <code>none</code></dt>
17489
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: depends on <code>flavor</code> See section <a href="#burnable">burnable</a></dt>
17490
<dd><p>True if flavor is <code>"trigger"</code>, false otherwise.
17495
<dt> <b>Variants:</b></dt>
17496
<dd><dl compact="compact">
17497
<dt> <img src="images/fl_abyss.png" alt="images/fl_abyss"><p> <b>fl_fake_abyss</b>: flavor = <code>"abyss"</code>
17499
<dt> <img src="images/fl_fake_trigger.png" alt="images/fl_fake_trigger"><p> <b>fl_fake_trigger</b>: flavor = <code>"trigger"</code>
17506
<a name="fl_005fhay"></a>
17507
<table cellpadding="1" cellspacing="1" border="0">
17508
<tr><td valign="middle" align="left">[<a href="#fl_005ffake" title="Previous section in reading order"> < </a>]</td>
17509
<td valign="middle" align="left">[<a href="#fl_005fice" title="Next section in reading order"> > </a>]</td>
17510
<td valign="middle" align="left"> </td>
17511
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
17512
<td valign="middle" align="left">[<a href="#Special-Floors" title="Up section"> Up </a>]</td>
17513
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
17514
<td valign="middle" align="left"> </td>
17515
<td valign="middle" align="left"> </td>
17516
<td valign="middle" align="left"> </td>
17517
<td valign="middle" align="left"> </td>
17518
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
17519
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
17520
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
17521
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
17523
<a name="fl_005fhay-1"></a>
17524
<h3 class="subsection">7.4.4 fl_hay</h3>
17525
<a name="index-fl_005fhay"></a>
17527
<p>A hay floor is in most aspects a standard floor, that exists in a framed
17530
<p>The framed variant is the successor of a fallen <a href="#st_005fbox">st_box</a>_hay. It may be
17531
flooded by a <a href="#fl_005fwater">fl_water</a> stream without the attribute ‘<samp>floodable</samp>’ being
17532
set to ‘<samp>true</samp>’ as the flood passes below this floor. The framed wood
17533
acts like a bridge over a flood stream and the water will continue to spread to
17534
neighboring grids, while the framed wood is still passable for actors. In fact
17535
a framed wood can even operate as a flood source, but we do not recommend this
17536
usage. see section <a href="#Flood-Spreading">Flood Spreading</a>.
17538
<dl compact="compact">
17539
<dt> <b>Attributes:</b></dt>
17540
<dd><dl compact="compact">
17541
<dt> <b>state</b>, <i>values</i>: <code>IDLE</code>, <code>FLOODING</code>; <i>default</i>: <code>IDLE</code> See section <a href="#state">state</a></dt>
17542
<dt> <b>interval</b> <i>values</i>: positive number; <i>default</i>: <code>0.2</code></dt>
17543
<dd><p>Number of seconds .
17545
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 1.5 See section <a href="#adhesion">adhesion</a></dt>
17546
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 5.0 See section <a href="#friction">friction</a></dt>
17547
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: true See section <a href="#burnable">burnable</a></dt>
17551
<dt> <b>Variants:</b></dt>
17552
<dd><dl compact="compact">
17553
<dt> <img src="images/fl_hay.png" alt="images/fl_hay"><p> <b>fl_hay</b>
17555
<dt> <img src="images/fl_hay_framed.png" alt="images/fl_hay_framed"><p> <b>fl_hay_framed</b>: faces = <code>"nesw"</code>
17562
<a name="fl_005fice"></a>
17563
<table cellpadding="1" cellspacing="1" border="0">
17564
<tr><td valign="middle" align="left">[<a href="#fl_005fhay" title="Previous section in reading order"> < </a>]</td>
17565
<td valign="middle" align="left">[<a href="#fl_005finverse" title="Next section in reading order"> > </a>]</td>
17566
<td valign="middle" align="left"> </td>
17567
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
17568
<td valign="middle" align="left">[<a href="#Special-Floors" title="Up section"> Up </a>]</td>
17569
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
17570
<td valign="middle" align="left"> </td>
17571
<td valign="middle" align="left"> </td>
17572
<td valign="middle" align="left"> </td>
17573
<td valign="middle" align="left"> </td>
17574
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
17575
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
17576
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
17577
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
17579
<a name="fl_005fice-1"></a>
17580
<h3 class="subsection">7.4.5 fl_ice</h3>
17581
<a name="index-fl_005fice"></a>
17583
<p>An ice floor is very slippery frozen water. The user can increase the effective
17584
friction by carrying an <a href="#it_005fpin">it_pin</a> in the players inventory.
17586
<p>Ice is a standard floor in most aspects. But an <a href="#it_005fdynamite">it_dynamite</a> will leave
17587
an <a href="#it_005fcrack">it_crack</a>_water instead of a meditation hollow, and nearby fire heat
17588
will melt the ice to <a href="#fl_005fwater">fl_water</a> (see <a href="#Heat_002dTransformation">Heat-Transformation</a>).
17590
<dl compact="compact">
17591
<dt> <b>Attributes:</b></dt>
17592
<dd><dl compact="compact">
17593
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 0.1 See section <a href="#adhesion">adhesion</a></dt>
17594
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 0.1 See section <a href="#friction">friction</a></dt>
17595
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: false See section <a href="#burnable">burnable</a></dt>
17599
<dt> <b>Variants:</b></dt>
17600
<dd><dl compact="compact">
17601
<dt> <img src="images/fl_ice.png" alt="images/fl_ice"><p> <b>fl_ice</b>
17608
<a name="fl_005finverse"></a>
17609
<table cellpadding="1" cellspacing="1" border="0">
17610
<tr><td valign="middle" align="left">[<a href="#fl_005fice" title="Previous section in reading order"> < </a>]</td>
17611
<td valign="middle" align="left">[<a href="#fl_005frock" title="Next section in reading order"> > </a>]</td>
17612
<td valign="middle" align="left"> </td>
17613
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
17614
<td valign="middle" align="left">[<a href="#Special-Floors" title="Up section"> Up </a>]</td>
17615
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
17616
<td valign="middle" align="left"> </td>
17617
<td valign="middle" align="left"> </td>
17618
<td valign="middle" align="left"> </td>
17619
<td valign="middle" align="left"> </td>
17620
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
17621
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
17622
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
17623
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
17625
<a name="fl_005finverse-1"></a>
17626
<h3 class="subsection">7.4.6 fl_inverse</h3>
17627
<a name="index-fl_005finverse"></a>
17629
<p>Inverse floors accelerate all actors into the opposite direction of the applied
17630
mouse input force. In all other aspects they are just standard floors.
17632
<dl compact="compact">
17633
<dt> <b>Attributes:</b></dt>
17634
<dd><dl compact="compact">
17635
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: -2.0 See section <a href="#adhesion">adhesion</a></dt>
17636
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 3.0 See section <a href="#friction">friction</a></dt>
17637
<dt> <b>flavor</b>, <i>values</i>: <code>"white"</code>, <code>"gray"</code>; <i>default</i>: <code>"white"</code>; <i>access</i>: <code>none</code></dt>
17638
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: false See section <a href="#burnable">burnable</a></dt>
17642
<dt> <b>Variants:</b></dt>
17643
<dd><dl compact="compact">
17644
<dt> <img src="images/fl_inverse_white.png" alt="images/fl_inverse_white"><p> <b>fl_inverse</b>: flavor = <code>"white"</code>
17646
<dt> <img src="images/fl_inverse_white.png" alt="images/fl_inverse_white"><p> <b>fl_inverse_white</b>: flavor = <code>"white"</code>
17648
<dt> <img src="images/fl_inverse_gray.png" alt="images/fl_inverse_gray"><p> <b>fl_inverse_gray</b>: flavor = <code>"gray"</code>
17655
<a name="fl_005frock"></a>
17656
<table cellpadding="1" cellspacing="1" border="0">
17657
<tr><td valign="middle" align="left">[<a href="#fl_005finverse" title="Previous section in reading order"> < </a>]</td>
17658
<td valign="middle" align="left">[<a href="#fl_005fscales" title="Next section in reading order"> > </a>]</td>
17659
<td valign="middle" align="left"> </td>
17660
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
17661
<td valign="middle" align="left">[<a href="#Special-Floors" title="Up section"> Up </a>]</td>
17662
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
17663
<td valign="middle" align="left"> </td>
17664
<td valign="middle" align="left"> </td>
17665
<td valign="middle" align="left"> </td>
17666
<td valign="middle" align="left"> </td>
17667
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
17668
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
17669
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
17670
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
17672
<a name="fl_005frock-1"></a>
17673
<h3 class="subsection">7.4.7 fl_rock</h3>
17674
<a name="index-fl_005frock"></a>
17676
<p>A rock floor is in most aspects a standard floor, that exists in a framed
17679
<p>The framed variant is the successor of a fallen <a href="#st_005fbox">st_box</a>_rock. It may be
17680
flooded by a <a href="#fl_005fwater">fl_water</a> stream without the attribute ‘<samp>floodable</samp>’ being
17681
set to ‘<samp>true</samp>’ as the flood passes below this floor. The framed wood
17682
acts like a bridge over a flood stream and the water will continue to spread to
17683
neighboring grids, while the framed wood is still passable for actors. In fact
17684
a framed wood can even operate as a flood source, but we do not recommend this
17685
usage. see section <a href="#Flood-Spreading">Flood Spreading</a>.
17687
<dl compact="compact">
17688
<dt> <b>Attributes:</b></dt>
17689
<dd><dl compact="compact">
17690
<dt> <b>state</b>, <i>values</i>: <code>IDLE</code>, <code>FLOODING</code>; <i>default</i>: <code>IDLE</code> See section <a href="#state">state</a></dt>
17691
<dt> <b>interval</b> <i>values</i>: positive number; <i>default</i>: <code>0.2</code></dt>
17692
<dd><p>Number of seconds .
17694
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 2.2 See section <a href="#adhesion">adhesion</a></dt>
17695
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 6.5 See section <a href="#friction">friction</a></dt>
17696
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: false See section <a href="#burnable">burnable</a></dt>
17700
<dt> <b>Variants:</b></dt>
17701
<dd><dl compact="compact">
17702
<dt> <img src="images/fl_rock.png" alt="images/fl_rock"><p> <b>fl_rock</b>
17704
<dt> <img src="images/fl_rock_framed.png" alt="images/fl_rock_framed"><p> <b>fl_rock_framed</b>: faces = <code>"nesw"</code>
17711
<a name="fl_005fscales"></a>
17712
<table cellpadding="1" cellspacing="1" border="0">
17713
<tr><td valign="middle" align="left">[<a href="#fl_005frock" title="Previous section in reading order"> < </a>]</td>
17714
<td valign="middle" align="left">[<a href="#fl_005fslope" title="Next section in reading order"> > </a>]</td>
17715
<td valign="middle" align="left"> </td>
17716
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
17717
<td valign="middle" align="left">[<a href="#Special-Floors" title="Up section"> Up </a>]</td>
17718
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
17719
<td valign="middle" align="left"> </td>
17720
<td valign="middle" align="left"> </td>
17721
<td valign="middle" align="left"> </td>
17722
<td valign="middle" align="left"> </td>
17723
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
17724
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
17725
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
17726
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
17728
<a name="fl_005fscales-1"></a>
17729
<h3 class="subsection">7.4.8 fl_scales</h3>
17730
<a name="index-fl_005fscales"></a>
17732
<p>The scales floor is a trigger that reacts on the mass load of actors and items
17733
atop or any stones that may press it. It performs actions when it is initially
17734
pressed and again when it releases. A pressed trigger is in state ‘<samp>ON</samp>’ and
17735
will send an action value of ‘<samp>true</samp>’, a released trigger is in state
17736
‘<samp>OFF</samp>’ and will send an action value of ‘<samp>false</samp>’.
17738
<p>Only actors moving on the floor can press scales. An actor jumping over a
17739
scale will not press it. An actor jumping on a scale will release and press
17740
it again. But anyway the mass of all actors and items atop will be measured and
17741
compared to the given <code>min</code> attribute. The default triggering mass is 1.8.
17742
This mass is given by two <a href="#ac_005fmarble">ac_marble</a> or three <a href="#ac_005fpearl">ac_pearl</a>. Any item
17743
like <a href="#it_005fweight">it_weight</a> or weights in an <a href="#it_005fbag">it_bag</a> that are either dropped on
17744
top of scales or carried by any actor in the players inventory is added to the
17747
<p>Just solid stones will press the scales when pushed onto it. Floating, hollow
17748
stones will generally not press the scales with the exception of the hollow,
17749
central puzzle stone (see section <a href="#st_005fpuzzle">st_puzzle</a>).
17751
<p>There is no way to set the state of a trigger manually. But the state can
17752
nevertheless be read. At initialization a scales floor that is pressed by
17753
objects will start in state ‘<samp>ON</samp>’ without sending actions due to the
17754
<a href="#Snapshot-Principle">Snapshot Principle</a>.
17756
<p>Scales trigger with a click sound.
17758
<p>Scales are given in several flavors. They are similar to the <a href="#it_005ftrigger">it_trigger</a>
17759
in respect to their features. Visually they look similar to frames, but are
17760
well distinguishable. It is deprecated to use invisible <a href="#it_005ftrigger">it_trigger</a> on
17761
a framed floor as a substitution for scales.
17763
<p>Alternative items that react just on actors are <a href="#it_005fsensor">it_sensor</a> and
17764
<a href="#it_005fcross">it_cross</a>.
17766
<dl compact="compact">
17767
<dt> <b>Attributes:</b></dt>
17768
<dd><dl compact="compact">
17769
<dt> <b>state</b>, <i>values</i>: <code>ON</code>, <code>OFF</code>; <i>default</i>: <code>OFF</code> See section <a href="#state">state</a></dt>
17770
<dd><p>The current switch state - ‘<samp>ON</samp>’ for pressed scales, ‘<samp>OFF</samp>’ for a
17773
<dt> <b>flavor</b>, <i>values</i>: <code>"brick"</code>, <code>"bridgewood"</code>, <code>"concrete"</code>, <code>"darkgray"</code>, <code>"gray"</code>, <code>"platinum"</code>; <i>default</i>: <code>"darkgray"</code></dt>
17774
<dd><p>The base floor type of the scales.
17776
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 2.0 See section <a href="#adhesion">adhesion</a></dt>
17777
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 4.0 See section <a href="#friction">friction</a></dt>
17778
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: depends on <code>flavor</code> See section <a href="#burnable">burnable</a></dt>
17779
<dd><p>True if flavor is <code>"bridgewood"</code>, false otherwise.
17781
<dt> <b>min</b> <i>values</i>: positive float number; <i>default</i>: <code>+1.8</code></dt>
17782
<dd><p>Mass unit is the mass of an <a href="#ac_005fmarble">ac_marble</a>
17787
<dt> <b>Messages:</b> none</dt>
17788
<dt> <b>Action:</b> See section <a href="#target">target</a>, See section <a href="#action">action</a></dt>
17789
<dt> <b>Variants:</b></dt>
17790
<dd><dl compact="compact">
17791
<dt> <img src="images/fl_scales_brick.png" alt="images/fl_scales_brick"><p> <b>fl_scales_brick</b>: flavor = <code>"brick"</code>
17793
<dt> <img src="images/fl_scales_bridge_bw_closed.png" alt="images/fl_scales_bridge_bw_closed"><p> <b>fl_scales_bridgewood</b>: flavor = <code>"bridgewood"</code>
17795
<dt> <img src="images/fl_scales_concrete.png" alt="images/fl_scales_concrete"><p> <b>fl_scales_concrete</b>: flavor = <code>"concrete"</code>
17797
<dt> <img src="images/fl_scales_darkgray.png" alt="images/fl_scales_darkgray"><p> <b>fl_scales_darkgray</b>: flavor = <code>"darkgray"</code>
17799
<dt> <img src="images/fl_scales_gray.png" alt="images/fl_scales_gray"><p> <b>fl_scales_gray</b>: flavor = <code>"gray"</code>
17801
<dt> <img src="images/fl_scales_platinum.png" alt="images/fl_scales_platinum"><p> <b>fl_scales_platinum</b>: flavor = <code>"platinum"</code>
17809
<a name="fl_005fslope"></a>
17810
<table cellpadding="1" cellspacing="1" border="0">
17811
<tr><td valign="middle" align="left">[<a href="#fl_005fscales" title="Previous section in reading order"> < </a>]</td>
17812
<td valign="middle" align="left">[<a href="#fl_005fswamp" title="Next section in reading order"> > </a>]</td>
17813
<td valign="middle" align="left"> </td>
17814
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
17815
<td valign="middle" align="left">[<a href="#Special-Floors" title="Up section"> Up </a>]</td>
17816
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
17817
<td valign="middle" align="left"> </td>
17818
<td valign="middle" align="left"> </td>
17819
<td valign="middle" align="left"> </td>
17820
<td valign="middle" align="left"> </td>
17821
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
17822
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
17823
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
17824
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
17826
<a name="fl_005fslope-1"></a>
17827
<h3 class="subsection">7.4.9 fl_slope</h3>
17828
<a name="index-fl_005fslope"></a>
17830
<p>A floor suited to build larger hills, gradient areas, wall brims, staircases
17831
or tubes that channelize actors.
17833
<p>Slope floors are basically described by their ‘<samp>slope</samp>’ and their ‘<samp>shape</samp>’.
17834
The slope is the orientation of the force applied to actors on top. The eight
17835
main orientations and ‘<samp>NODIR</samp>’, that causes no force to be applied at all, are
17836
currently supported.
17838
<p>The shape describes the intended usage, which causes a proper visual
17839
representation. There are planar slopes falling just into a horizontal or
17840
vertical direction (<code>"pw"</code>, <code>"ps"</code>, <code>"pe"</code>, <code>"pn"</code>),
17841
inner and outer edges falling into a diagonal direction (<code>"inw"</code>,
17842
<code>"isw"</code>, <code>"ise"</code>, <code>"ine"</code>, <code>"onw"</code>, <code>"osw"</code>,
17843
<code>"ose"</code>, <code>"one"</code>), tube center parts falling into a horizontal or
17844
vertical direction (<code>"tw"</code>, <code>"ts"</code>, <code>"te"</code>, <code>"tn"</code>) and
17845
tube left and right sides that accelerate actors into the main tube direction
17846
and back to the tube center at the same time (<code>"twl"</code>, <code>"tsl"</code>,
17847
<code>"tel"</code>, <code>"tnl"</code>, <code>"twr"</code>, <code>"tsr"</code>, <code>"ter"</code>,
17848
<code>"tnr"</code>).
17850
<p>Note that several shapes do currently use an identical visual representation.
17851
But they differ in their usage and different slope force orientations are
17852
assigned by default when you use the variant suffices. It is strongly
17853
recommended to use always the shape of the intended usage as the images might
17854
be improved in the future and should fit to your level.
17856
<p>The force applied to actors on the floor grid is given per default by the
17857
global attribute <a href="#SlopeStrength">SlopeStrength</a>. You may override this default by an
17858
explicit value for the slope floor attribute ‘<samp>strength</samp>’. In very special
17859
cases you may even define individual force components ‘<samp>force_x</samp>’ and
17860
‘<samp>force_y</samp>’, which will override all other slope force attributes.
17862
<dl compact="compact">
17863
<dt> <b>Attributes:</b></dt>
17865
<dl compact="compact">
17866
<dt> <b>slope</b>, <i>values</i>: <code>NODIR</code>, <code>WEST</code>, <code>SOUTH</code>, <code>EAST</code>, <code>NORTH</code>, <code>NORTHWEST</code>, <code>SOUTHWEST</code>, <code>SOUTHEAST</code>, <code>NORTHEAST</code>; <i>default</i>: <code>NODIR</code></dt>
17867
<dd><p>The orientation of the force. Note that setting this attribute does not
17868
automatically assign a fitting ‘<samp>shape</samp>’. This attribute is neglected if
17869
‘<samp>force_x</samp>’ or ‘<samp>force_y</samp>’ attributes are set.
17872
<dt> <b>shape</b>, <i>values</i>: <code>""</code>, <code>"pw"</code>, <code>"ps"</code>, <code>"pe"</code>, <code>"pn"</code>, <code>"inw"</code>, <code>"isw"</code>, <code>"ise"</code>, <code>"ine"</code>, <code>"onw"</code>, <code>"osw"</code>, <code>"ose"</code>, <code>"one"</code>, <code>"tw"</code>, <code>"ts"</code>, <code>"te"</code>, <code>"tn"</code>, <code>"twl"</code>, <code>"tsl"</code>, <code>"tel"</code>, <code>"tnl"</code>, <code>"twr"</code>, <code>"tsr"</code>, <code>"ter"</code>, <code>"tnr"</code>; <i>default</i>: <code>""</code></dt>
17873
<dd><p>The intended usage as described above. Note that setting this attribute does
17874
not automatically assign the proper ‘<samp>slope</samp>’.
17877
<dt> <b>strength</b> <i>values</i>: float number; <i>default</i>: <code>25.0</code> See section <a href="#SlopeStrength">SlopeStrength</a></dt>
17878
<dt> <b>force_x</b> <i>values</i>: float number; <i>default</i>: <code>0.0</code> See section <a href="#force_005fx">force_x</a></dt>
17879
<dt> <b>force_y</b> <i>values</i>: float number; <i>default</i>: <code>0.0</code> See section <a href="#force_005fy">force_y</a></dt>
17880
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 2.0 See section <a href="#adhesion">adhesion</a></dt>
17881
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 4.0 See section <a href="#friction">friction</a></dt>
17882
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: false See section <a href="#burnable">burnable</a></dt>
17886
<dt> <b>Messages:</b> None</dt>
17887
<dt> <b>Variants:</b></dt>
17889
<tr><td width="8%"><img src="images/fl_slope_f.png" alt="images/fl_slope_f"></td><td width="42%"><b>fl_slope</b> slope = ‘<samp>NODIR</samp>’, shape = <code>""</code></td><td width="8%"></td><td width="42%"></td></tr>
17890
<tr><td width="8%"><img src="images/fl_slope_4.png" alt="images/fl_slope_4"></td><td width="42%"><b>fl_slope_pw</b> slope = ‘<samp>WEST</samp>’, shape = <code>"pw"</code></td><td width="8%"><img src="images/fl_slope.png" alt="images/fl_slope"></td><td width="42%"><b>fl_slope_ps</b> slope = ‘<samp>SOUTH</samp>’, shape = <code>"ps"</code></td></tr>
17891
<tr><td width="8%"><img src="images/fl_slope_3.png" alt="images/fl_slope_3"></td><td width="42%"><b>fl_slope_pe</b> slope = ‘<samp>EAST</samp>’, shape = <code>"pe"</code></td><td width="8%"><img src="images/fl_slope_2.png" alt="images/fl_slope_2"></td><td width="42%"><b>fl_slope_pn</b> slope = ‘<samp>NORTH</samp>’, shape = <code>"pn"</code></td></tr>
17892
<tr><td width="8%"><img src="images/fl_slope_c4.png" alt="images/fl_slope_c4"></td><td width="42%"><b>fl_slope_inw</b> slope = ‘<samp>NORTHWEST</samp>’, shape = <code>"inw"</code></td><td width="8%"><img src="images/fl_slope_c3.png" alt="images/fl_slope_c3"></td><td width="42%"><b>fl_slope_isw</b> slope = ‘<samp>SOUTHWEST</samp>’, shape = <code>"isw"</code></td></tr>
17893
<tr><td width="8%"><img src="images/fl_slope_c.png" alt="images/fl_slope_c"></td><td width="42%"><b>fl_slope_ise</b> slope = ‘<samp>SOUTHEAST</samp>’, shape = <code>"ise"</code></td><td width="8%"><img src="images/fl_slope_c2.png" alt="images/fl_slope_c2"></td><td width="42%"><b>fl_slope_ine</b> slope = ‘<samp>NORTHEAST</samp>’, shape = <code>"ine"</code></td></tr>
17894
<tr><td width="8%"><img src="images/fl_slope_b4.png" alt="images/fl_slope_b4"></td><td width="42%"><b>fl_slope_onw</b> slope = ‘<samp>NORTHWEST</samp>’, shape = <code>"onw"</code></td><td width="8%"><img src="images/fl_slope_b2.png" alt="images/fl_slope_b2"></td><td width="42%"><b>fl_slope_osw</b> slope = ‘<samp>SOUTHWEST</samp>’, shape = <code>"osw"</code></td></tr>
17895
<tr><td width="8%"><img src="images/fl_slope_b.png" alt="images/fl_slope_b"></td><td width="42%"><b>fl_slope_ose</b> slope = ‘<samp>SOUTHEAST</samp>’, shape = <code>"ose"</code></td><td width="8%"><img src="images/fl_slope_b3.png" alt="images/fl_slope_b3"></td><td width="42%"><b>fl_slope_one</b> slope = ‘<samp>NORTHEAST</samp>’, shape = <code>"one"</code></td></tr>
17896
<tr><td width="8%"><img src="images/fl_slope_f.png" alt="images/fl_slope_f"></td><td width="42%"><b>fl_slope_tw</b> slope = ‘<samp>WEST</samp>’, shape = <code>"tw"</code></td><td width="8%"><img src="images/fl_slope_f.png" alt="images/fl_slope_f"></td><td width="42%"><b>fl_slope_ts</b> slope = ‘<samp>SOUTH</samp>’, shape = <code>"ts"</code></td></tr>
17897
<tr><td width="8%"><img src="images/fl_slope_f.png" alt="images/fl_slope_f"></td><td width="42%"><b>fl_slope_te</b> slope = ‘<samp>EAST</samp>’, shape = <code>"te"</code></td><td width="8%"><img src="images/fl_slope_f.png" alt="images/fl_slope_f"></td><td width="42%"><b>fl_slope_tn</b> slope = ‘<samp>NORTH</samp>’, shape = <code>"tn"</code></td></tr>
17898
<tr><td width="8%"><img src="images/fl_slope_2.png" alt="images/fl_slope_2"></td><td width="42%"><b>fl_slope_twl</b> slope = ‘<samp>NORTHWEST</samp>’, shape = <code>"twl"</code></td><td width="8%"><img src="images/fl_slope_4.png" alt="images/fl_slope_4"></td><td width="42%"><b>fl_slope_tsl</b> slope = ‘<samp>SOUTHWEST</samp>’, shape = <code>"tsl"</code></td></tr>
17899
<tr><td width="8%"><img src="images/fl_slope.png" alt="images/fl_slope"></td><td width="42%"><b>fl_slope_tel</b> slope = ‘<samp>SOUTHEAST</samp>’, shape = <code>"tel"</code></td><td width="8%"><img src="images/fl_slope_3.png" alt="images/fl_slope_3"></td><td width="42%"><b>fl_slope_tnl</b> slope = ‘<samp>NORTHEAST</samp>’, shape = <code>"tnl"</code></td></tr>
17900
<tr><td width="8%"><img src="images/fl_slope.png" alt="images/fl_slope"></td><td width="42%"><b>fl_slope_twr</b> slope = ‘<samp>SOUTHWEST</samp>’, shape = <code>"twr"</code></td><td width="8%"><img src="images/fl_slope_3.png" alt="images/fl_slope_3"></td><td width="42%"><b>fl_slope_tsr</b> slope = ‘<samp>SOUTHEAST</samp>’, shape = <code>"tsr"</code></td></tr>
17901
<tr><td width="8%"><img src="images/fl_slope_2.png" alt="images/fl_slope_2"></td><td width="42%"><b>fl_slope_ter</b> slope = ‘<samp>NORTHEAST</samp>’, shape = <code>"ter"</code></td><td width="8%"><img src="images/fl_slope_4.png" alt="images/fl_slope_4"></td><td width="42%"><b>fl_slope_tnr</b> slope = ‘<samp>NORTHWEST</samp>’, shape = <code>"tnr"</code></td></tr>
17907
<a name="fl_005fswamp"></a>
17908
<table cellpadding="1" cellspacing="1" border="0">
17909
<tr><td valign="middle" align="left">[<a href="#fl_005fslope" title="Previous section in reading order"> < </a>]</td>
17910
<td valign="middle" align="left">[<a href="#fl_005fthief" title="Next section in reading order"> > </a>]</td>
17911
<td valign="middle" align="left"> </td>
17912
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
17913
<td valign="middle" align="left">[<a href="#Special-Floors" title="Up section"> Up </a>]</td>
17914
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
17915
<td valign="middle" align="left"> </td>
17916
<td valign="middle" align="left"> </td>
17917
<td valign="middle" align="left"> </td>
17918
<td valign="middle" align="left"> </td>
17919
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
17920
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
17921
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
17922
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
17924
<a name="fl_005fswamp-1"></a>
17925
<h3 class="subsection">7.4.10 fl_swamp</h3>
17926
<a name="index-fl_005fswamp"></a>
17928
<p>A swamp is very sticky floor caused by a high friction. Additionally ball like
17929
actors will sink in swamp. But the sink speed is limited and gives the user
17930
a certain time, defined by the global attribute <a href="#SwampSinkTime">SwampSinkTime</a>. When
17931
an actor moves faster than 6 grids per second, the actor start raising out of
17932
the swamp. Jumping in a swamp raises an actor, too.
17934
<p>A swamp is indestructible to the aspect that <a href="#it_005fcrack">it_crack</a> will not spread
17935
onto it. But fire starting to burn nearby will dry out the swamp to
17936
<a href="#fl_005fdunes">fl_dunes</a> (see section <a href="#Heat_002dTransformation">Heat-Transformation</a>). A swamp itself may be a successor of
17937
a <a href="#fl_005fwater">fl_water</a> heated by a fire.
17939
<dl compact="compact">
17940
<dt> <b>Attributes:</b></dt>
17941
<dd><dl compact="compact">
17942
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 1.0 See section <a href="#adhesion">adhesion</a></dt>
17943
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 13.0 See section <a href="#friction">friction</a></dt>
17944
<dt> <b>indestructible</b>, <i>values</i>: bool ; <i>default</i>: true; <i>access</i>: <code>none</code> See section <a href="#indestructible">indestructible</a></dt>
17945
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: false See section <a href="#burnable">burnable</a></dt>
17949
<dt> <b>Variants:</b></dt>
17950
<dd><dl compact="compact">
17951
<dt> <img src="images/fl_swamp.png" alt="images/fl_swamp"><p> <b>fl_swamp</b>
17958
<a name="fl_005fthief"></a>
17959
<table cellpadding="1" cellspacing="1" border="0">
17960
<tr><td valign="middle" align="left">[<a href="#fl_005fswamp" title="Previous section in reading order"> < </a>]</td>
17961
<td valign="middle" align="left">[<a href="#fl_005fwater" title="Next section in reading order"> > </a>]</td>
17962
<td valign="middle" align="left"> </td>
17963
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
17964
<td valign="middle" align="left">[<a href="#Special-Floors" title="Up section"> Up </a>]</td>
17965
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
17966
<td valign="middle" align="left"> </td>
17967
<td valign="middle" align="left"> </td>
17968
<td valign="middle" align="left"> </td>
17969
<td valign="middle" align="left"> </td>
17970
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
17971
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
17972
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
17973
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
17975
<a name="fl_005fthief-1"></a>
17976
<h3 class="subsection">7.4.11 fl_thief</h3>
17977
<a name="index-fl_005fthief"></a>
17979
<p>A thief steals the item on its position plus an item from the player’s inventory
17980
when it is entered by an owned actor. Unfortunately the thief floor is visually
17981
indistinguishable from an <a href="#fl_005fbluegray">fl_bluegray</a> and has even the same
17982
‘<samp>friction</samp>’ and ‘<samp>adhesion</samp>’ values.
17984
<p>The item is not directly stolen at the moment of entering the grid. The entering
17985
itself just causes the thief to emerge from his hiding-place. The thief steals
17986
from the actor that did conjure him at the moment of maximum visibility. He takes
17987
a random item from the owner’s inventory. But he just will steal an item if
17988
the actor is not shielded due to an activated <a href="#it_005fumbrella">it_umbrella</a>.
17990
<p>Thieves have an addiction to alcohol. Thus they get drunken and inactive if
17991
they happen to steal a bottle filled with stuff.
17993
<p>Thieves have an enemy - the <a href="#st_005fchess">st_chess</a>. If a chess stone is pushed onto
17994
a thief it will capture the thief, sober or drunken. The thief vanishes leaving
17995
an inactive standard floor and the chess stone jumps onto its position. But the
17996
thief will leave behind on the grid all stolen items in his own <a href="#it_005fbag">it_bag</a>.
17997
If the thief has not stolen any items he leaves no empty bag.
17999
<dl compact="compact">
18000
<dt> <b>Attributes:</b> none</dt>
18001
<dd><dl compact="compact">
18002
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 1.5 See section <a href="#adhesion">adhesion</a></dt>
18003
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 4.5 See section <a href="#friction">friction</a></dt>
18004
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: false See section <a href="#burnable">burnable</a></dt>
18008
<dt> <b>Messages:</b> none</dt>
18009
<dt> <b>Action:</b> none</dt>
18010
<dt> <b>Variants:</b></dt>
18011
<dd><dl compact="compact">
18012
<dt> <img src="images/fl_bluegray.png" alt="images/fl_bluegray"><p> <b>fl_thief</b>: hidden
18014
<dt> <img src="images/fl_thief.png" alt="images/fl_thief"><p> <b>fl_thief</b>: showing up at the moment when stealing items
18016
<dt> <img src="images/fl_thief_capture.png" alt="images/fl_thief_capture"><p> <b>fl_thief</b>: when being captured
18018
<dt> <img src="images/fl_thief_drunken.png" alt="images/fl_thief_drunken"><p> <b>fl_thief</b>: drunken thief
18025
<a name="fl_005fwater"></a>
18026
<table cellpadding="1" cellspacing="1" border="0">
18027
<tr><td valign="middle" align="left">[<a href="#fl_005fthief" title="Previous section in reading order"> < </a>]</td>
18028
<td valign="middle" align="left">[<a href="#fl_005fwood" title="Next section in reading order"> > </a>]</td>
18029
<td valign="middle" align="left"> </td>
18030
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
18031
<td valign="middle" align="left">[<a href="#Special-Floors" title="Up section"> Up </a>]</td>
18032
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
18033
<td valign="middle" align="left"> </td>
18034
<td valign="middle" align="left"> </td>
18035
<td valign="middle" align="left"> </td>
18036
<td valign="middle" align="left"> </td>
18037
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
18038
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
18039
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
18040
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
18042
<a name="fl_005fwater-1"></a>
18043
<h3 class="subsection">7.4.12 fl_water</h3>
18044
<a name="index-fl_005fwater"></a>
18046
<p>Besides <a href="#fl_005fabyss">fl_abyss</a> water is the second natural floor barrier for ball like
18047
actors, as they can not easily pass it.
18049
<p>Both, <a href="#ac_005fmarble">ac_marble</a> and <a href="#ac_005fpearl">ac_pearl</a>, will sink in water, usually at once,
18050
but the time amount can be configured by the global attribute <a href="#WaterSinkTime">WaterSinkTime</a>.
18051
Unlike <a href="#fl_005fswamp">fl_swamp</a> water does not raise fast moving actors. But jumping
18052
within water raises an actor. Jumping completely over a water chasm is of course
18053
a more standard way to cross it. Actors protected by an activated
18054
<a href="#it_005fumbrella">it_umbrella</a> can pass and even move on water without restrictions.
18056
<p>Some stones fall into water, too. <a href="#st_005fbox">st_box</a> will build floors on which all
18057
actors can move and pass the former water filled grid.
18059
<p>Water itself is indestructible to the aspect that <a href="#it_005fcrack">it_crack</a> will not spread
18060
onto it. But a fire starting to burn nearby will dry out the water to
18061
<a href="#fl_005fswamp">fl_swamp</a> (see <a href="#Heat_002dTransformation">Heat-Transformation</a>).
18063
<p>The standard water is static, its ‘<samp>state</samp>’ is ‘<samp>IDLE</samp>’. It will not
18064
spread to adjacent floors. But you can set up flood streams that will fill areas
18065
or flow through given paths. You just need to define the area by setting the
18066
attribute ‘<samp>floodable</samp>’ to ‘<samp>true</samp>’ on the affected floors. But static
18067
water lakes do not require an additional ‘<samp>floodable</samp>’ attribute, as they
18068
are floodable by default.
18070
<p>As soon as you add a ‘<samp>fl_water_source</samp>’ or set the ‘<samp>state</samp>’ to
18071
‘<samp>FLOODING</samp>’, the water starts to spread to floodable neighboring grids with
18072
a speed defined by the attribute ‘<samp>interval</samp>’. The speed will be inherited to
18073
floors flooded by a stream.
18075
<p>As a flood can be influenced by many obstacles and may sink some stones itself,
18076
you will find a complete discussion in the section <a href="#Flood-Spreading">Flood Spreading</a>.
18078
<dl compact="compact">
18079
<dt> <b>Attributes:</b></dt>
18080
<dd><dl compact="compact">
18081
<dt> <b>state</b>, <i>values</i>: <code>IDLE</code>, <code>FLOODING</code>; <i>default</i>: <code>IDLE</code> See section <a href="#state">state</a></dt>
18082
<dt> <b>interval</b> <i>values</i>: positive number; <i>default</i>: <code>0.2</code></dt>
18083
<dd><p>Number of seconds .
18085
<dt> <b>indestructible</b>, <i>values</i>: bool ; <i>default</i>: true; <i>access</i>: <code>none</code> See section <a href="#indestructible">indestructible</a></dt>
18086
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 1.0 See section <a href="#adhesion">adhesion</a></dt>
18087
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 5.0 See section <a href="#friction">friction</a></dt>
18088
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: false See section <a href="#burnable">burnable</a></dt>
18092
<dt> <b>Variants:</b></dt>
18093
<dd><dl compact="compact">
18094
<dt> <img src="images/fl_water.png" alt="images/fl_water"><p> <b>fl_water</b>: state = <code>IDLE</code>
18096
<dt> <img src="images/fl_water.png" alt="images/fl_water"><p> <b>fl_water_source</b>: state = <code>FLOODING</code>
18103
<a name="fl_005fwood"></a>
18104
<table cellpadding="1" cellspacing="1" border="0">
18105
<tr><td valign="middle" align="left">[<a href="#fl_005fwater" title="Previous section in reading order"> < </a>]</td>
18106
<td valign="middle" align="left">[<a href="#fl_005fyinyang" title="Next section in reading order"> > </a>]</td>
18107
<td valign="middle" align="left"> </td>
18108
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
18109
<td valign="middle" align="left">[<a href="#Special-Floors" title="Up section"> Up </a>]</td>
18110
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
18111
<td valign="middle" align="left"> </td>
18112
<td valign="middle" align="left"> </td>
18113
<td valign="middle" align="left"> </td>
18114
<td valign="middle" align="left"> </td>
18115
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
18116
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
18117
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
18118
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
18120
<a name="fl_005fwood-1"></a>
18121
<h3 class="subsection">7.4.13 fl_wood</h3>
18122
<a name="index-fl_005fwood"></a>
18124
<p>A wooden floor is in most aspects a standard floor, that exists in textures
18125
with horizontal or vertical panels, or random. All textures come in a framed
18128
<p>The framed variant is the successor of a fallen <a href="#st_005fbox">st_box</a>_wood. It may be
18129
flooded by a <a href="#fl_005fwater">fl_water</a> stream without the attribute ‘<samp>floodable</samp>’ being
18130
set to ‘<samp>true</samp>’ as the flood passes below this floor. The framed wood
18131
acts like a bridge over a flood stream and the water will continue to spread to
18132
neighboring grids, while the framed wood is still passable for actors. In fact
18133
a framed wood can even operate as a flood source, but we do not recommend this
18134
usage. see section <a href="#Flood-Spreading">Flood Spreading</a>.
18136
<p>When burnt, <code>fl_wood</code> becomes <a href="#fl_005fabyss">fl_abyss</a>.
18138
<dl compact="compact">
18139
<dt> <b>Attributes:</b></dt>
18140
<dd><dl compact="compact">
18141
<dt> <b>state</b>, <i>values</i>: <code>IDLE</code>, <code>FLOODING</code>; <i>default</i>: <code>IDLE</code> See section <a href="#state">state</a></dt>
18142
<dt> <b>interval</b> <i>values</i>: positive number; <i>default</i>: <code>0.2</code></dt>
18143
<dd><p>Number of seconds .
18145
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 2.0 See section <a href="#adhesion">adhesion</a></dt>
18146
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 6.4 See section <a href="#friction">friction</a></dt>
18147
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: true See section <a href="#burnable">burnable</a></dt>
18151
<dt> <b>Variants:</b></dt>
18152
<dd><dl compact="compact">
18153
<dt> <img src="images/fl_wood.png" alt="images/fl_wood"><p> <b>fl_wood</b>: texture = random
18155
<dt> <img src="images/fl_wood_3.png" alt="images/fl_wood_3"><p> <b>fl_wood_h</b>: texture = <code>"h"</code>
18157
<dt> <img src="images/fl_wood.png" alt="images/fl_wood"><p> <b>fl_wood_v</b>: texture = <code>"v"</code>
18159
<dt> <img src="images/fl_wood_framed.png" alt="images/fl_wood_framed"><p> <b>fl_wood_framed</b>: texture = random, faces = <code>"nesw"</code>
18161
<dt> <img src="images/fl_wood_framed.png" alt="images/fl_wood_framed"><p> <b>fl_wood_framed_h</b>: texture = <code>"h"</code>, faces = <code>"nesw"</code>
18163
<dt> <img src="images/fl_wood_framed_2.png" alt="images/fl_wood_framed_2"><p> <b>fl_wood_framed_v</b>: texture = <code>"v"</code>, faces = <code>"nesw"</code>
18170
<a name="fl_005fyinyang"></a>
18171
<table cellpadding="1" cellspacing="1" border="0">
18172
<tr><td valign="middle" align="left">[<a href="#fl_005fwood" title="Previous section in reading order"> < </a>]</td>
18173
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next section in reading order"> > </a>]</td>
18174
<td valign="middle" align="left"> </td>
18175
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
18176
<td valign="middle" align="left">[<a href="#Special-Floors" title="Up section"> Up </a>]</td>
18177
<td valign="middle" align="left">[<a href="#Item-Objects" title="Next chapter"> >> </a>]</td>
18178
<td valign="middle" align="left"> </td>
18179
<td valign="middle" align="left"> </td>
18180
<td valign="middle" align="left"> </td>
18181
<td valign="middle" align="left"> </td>
18182
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
18183
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
18184
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
18185
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
18187
<a name="fl_005fyinyang-1"></a>
18188
<h3 class="subsection">7.4.14 fl_yinyang</h3>
18189
<a name="index-fl_005fyinyang"></a>
18191
<p>A floor that lets move just actors assigned to one player. A basic floor color
18192
of dark gray corresponds to ‘<samp>YIN</samp>’ and lets accelerate just actors that
18193
are controlled by this first player. White colored yinyang floors correspond
18194
to ‘<samp>YANG</samp>’ and let accelerate just actors controlled by this second player.
18196
<p>The floor image with 4 rivets in the corners shows an additional yinyang symbol
18197
to visualize that not the color of the actor is essential but the controlling
18198
player. In large areas of this floor this symbol is disturbing and it can be
18199
switched off by the attribute ‘<samp>invisible</samp>’.
18201
<dl compact="compact">
18202
<dt> <b>Attributes:</b></dt>
18203
<dd><dl compact="compact">
18204
<dt> <b>state</b>, <i>values</i>: <code>YIN</code>, <code>YANG</code>; <i>default</i>: <code>YIN</code> See section <a href="#state">state</a></dt>
18205
<dt> <b>invisible</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
18206
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: 2.0 See section <a href="#adhesion">adhesion</a></dt>
18207
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: 5.2 See section <a href="#friction">friction</a></dt>
18208
<dt> <b>burnable</b>, <i>values</i>: boolean; <i>default</i>: false See section <a href="#burnable">burnable</a></dt>
18212
<dt> <b>Variants:</b></dt>
18213
<dd><dl compact="compact">
18214
<dt> <img src="images/fl_yinyang_yin.png" alt="images/fl_yinyang_yin"><p> <b>fl_yinyang</b>: state = <code>YIN</code>
18216
<dt> <img src="images/fl_yinyang_yin.png" alt="images/fl_yinyang_yin"><p> <b>fl_yinyang_yin</b>: state = <code>YIN</code>
18218
<dt> <img src="images/fl_yinyang_yang.png" alt="images/fl_yinyang_yang"><p> <b>fl_yinyang_yang</b>: state = <code>YANG</code>
18226
<a name="Item-Objects"></a>
18227
<table cellpadding="1" cellspacing="1" border="0">
18228
<tr><td valign="middle" align="left">[<a href="#fl_005fyinyang" title="Previous section in reading order"> < </a>]</td>
18229
<td valign="middle" align="left">[<a href="#Item-Overview" title="Next section in reading order"> > </a>]</td>
18230
<td valign="middle" align="left"> </td>
18231
<td valign="middle" align="left">[<a href="#Floor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
18232
<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up </a>]</td>
18233
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
18234
<td valign="middle" align="left"> </td>
18235
<td valign="middle" align="left"> </td>
18236
<td valign="middle" align="left"> </td>
18237
<td valign="middle" align="left"> </td>
18238
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
18239
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
18240
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
18241
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
18243
<a name="Item-Objects-1"></a>
18244
<h1 class="chapter">8. Item Objects</h1>
18246
<table class="menu" border="0" cellspacing="0">
18247
<tr><td align="left" valign="top"><a href="#Item-Overview">8.1 Item Overview</a></td><td> </td><td align="left" valign="top">
18249
<tr><td align="left" valign="top"><a href="#Item-Attributes">8.2 Item Attributes</a></td><td> </td><td align="left" valign="top">
18251
<tr><td align="left" valign="top"><a href="#Liftable-Items">8.3 Liftable Items</a></td><td> </td><td align="left" valign="top">
18253
<tr><td align="left" valign="top"><a href="#Static-Items">8.4 Static Items</a></td><td> </td><td align="left" valign="top">
18258
<a name="Item-Overview"></a>
18259
<table cellpadding="1" cellspacing="1" border="0">
18260
<tr><td valign="middle" align="left">[<a href="#Item-Objects" title="Previous section in reading order"> < </a>]</td>
18261
<td valign="middle" align="left">[<a href="#Item-Attributes" title="Next section in reading order"> > </a>]</td>
18262
<td valign="middle" align="left"> </td>
18263
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
18264
<td valign="middle" align="left">[<a href="#Item-Objects" title="Up section"> Up </a>]</td>
18265
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
18266
<td valign="middle" align="left"> </td>
18267
<td valign="middle" align="left"> </td>
18268
<td valign="middle" align="left"> </td>
18269
<td valign="middle" align="left"> </td>
18270
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
18271
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
18272
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
18273
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
18275
<a name="Item-Overview-1"></a>
18276
<h2 class="section">8.1 Item Overview</h2>
18279
<tr><td width="8%"><img src="images/it_bag.png" alt="images/it_bag"></td><td width="25%"><a href="#it_005fbag">it_bag</a></td><td width="8%"><img src="images/it_banana.png" alt="images/it_banana"></td><td width="25%"><a href="#it_005fbanana">it_banana</a></td><td width="9%"><img src="images/st_blocker_4.png" alt="images/st_blocker_4"></td><td width="25%"><a href="#it_005fblocker">it_blocker</a></td></tr>
18280
<tr><td width="8%"><img src="images/it_bomb.png" alt="images/it_bomb"></td><td width="25%"><a href="#it_005fbomb">it_bomb</a>_black</td><td width="8%"><img src="images/it_bomb_b.png" alt="images/it_bomb_b"></td><td width="25%"><a href="#it_005fbomb">it_bomb</a>_white</td><td width="9%"><img src="images/it_bottle_idle.png" alt="images/it_bottle_idle"></td><td width="25%"><a href="#it_005fbottle">it_bottle</a></td></tr>
18281
<tr><td width="8%"><img src="images/it_bottle_broken.png" alt="images/it_bottle_broken"></td><td width="25%"><a href="#it_005fbottle">it_bottle</a>_broken</td><td width="8%"><img src="images/st_brake.png" alt="images/st_brake"></td><td width="25%"><a href="#it_005fbrake">it_brake</a></td><td width="9%"><img src="images/it_brush.png" alt="images/it_brush"></td><td width="25%"><a href="#it_005fbrush">it_brush</a></td></tr>
18282
<tr><td width="8%"><img src="images/it_burnable_ash.png" alt="images/it_burnable_ash"></td><td width="25%"><a href="#it_005fburnable">it_burnable</a>_ash</td><td width="8%"><img src="images/it_burnable_burning.png" alt="images/it_burnable_burning"></td><td width="25%"><a href="#it_005fburnable">it_burnable</a>_burning</td><td width="9%"><img src="images/it_burnable_fireproof.png" alt="images/it_burnable_fireproof"></td><td width="25%"><a href="#it_005fburnable">it_burnable</a>_fireproof</td></tr>
18283
<tr><td width="8%"><img src="images/it_burnable_oil.png" alt="images/it_burnable_oil"></td><td width="25%"><a href="#it_005fburnable">it_burnable</a>_oil</td><td width="8%"><img src="images/it_cherry.png" alt="images/it_cherry"></td><td width="25%"><a href="#it_005fcherry">it_cherry</a></td><td width="9%"><img src="images/it_coffee.png" alt="images/it_coffee"></td><td width="25%"><a href="#it_005fcoffee">it_coffee</a></td></tr>
18284
<tr><td width="8%"><img src="images/it_coin_s.png" alt="images/it_coin_s"></td><td width="25%"><a href="#it_005fcoin">it_coin</a>_s</td><td width="8%"><img src="images/it_coin_m.png" alt="images/it_coin_m"></td><td width="25%"><a href="#it_005fcoin">it_coin</a>_m</td><td width="9%"><img src="images/it_coin_l.png" alt="images/it_coin_l"></td><td width="25%"><a href="#it_005fcoin">it_coin</a>_l</td></tr>
18285
<tr><td width="8%"><img src="images/it_crack_abyss.png" alt="images/it_crack_abyss"></td><td width="25%"><a href="#it_005fcrack">it_crack</a>_abyss</td><td width="8%"><img src="images/it_crack_water.png" alt="images/it_crack_water"></td><td width="25%"><a href="#it_005fcrack">it_crack</a>_water</td><td width="9%"><img src="images/it_cross.png" alt="images/it_cross"></td><td width="25%"><a href="#it_005fcross">it_cross</a></td></tr>
18286
<tr><td width="8%"><img src="images/it_death.png" alt="images/it_death"></td><td width="25%"><a href="#it_005fdeath">it_death</a></td><td width="8%"><img src="images/it_document.png" alt="images/it_document"></td><td width="25%"><a href="#it_005fdocument">it_document</a></td><td width="9%"><img src="images/it_drop.png" alt="images/it_drop"></td><td width="25%"><a href="#it_005fdrop">it_drop</a></td></tr>
18287
<tr><td width="8%"><img src="images/it_dynamite.png" alt="images/it_dynamite"></td><td width="25%"><a href="#it_005fdynamite">it_dynamite</a></td><td width="8%"><img src="images/it_explosion.png" alt="images/it_explosion"></td><td width="25%"><a href="#it_005fexplosion">it_explosion</a></td><td width="9%"><img src="images/it_extinguisher.png" alt="images/it_extinguisher"></td><td width="25%"><a href="#it_005fextinguisher">it_extinguisher</a></td></tr>
18288
<tr><td width="8%"><img src="images/it_extralife.png" alt="images/it_extralife"></td><td width="25%"><a href="#it_005fextralife">it_extralife</a></td><td width="8%"><img src="images/it_flag_black.png" alt="images/it_flag_black"></td><td width="25%"><a href="#it_005fflag">it_flag</a>_black</td><td width="9%"><img src="images/it_flag_white.png" alt="images/it_flag_white"></td><td width="25%"><a href="#it_005fflag">it_flag</a>_white</td></tr>
18289
<tr><td width="8%"><img src="images/it_floppy.png" alt="images/it_floppy"></td><td width="25%"><a href="#it_005ffloppy">it_floppy</a></td><td width="8%"><img src="images/it_glasses.png" alt="images/it_glasses"></td><td width="25%"><a href="#it_005fglasses">it_glasses</a></td><td width="9%"><img src="images/it_glasses_broken.png" alt="images/it_glasses_broken"></td><td width="25%"><a href="#it_005fglasses">it_glasses</a>_broken</td></tr>
18290
<tr><td width="8%"><img src="images/it_hammer.png" alt="images/it_hammer"></td><td width="25%"><a href="#it_005fhammer">it_hammer</a></td><td width="8%"><img src="images/it_key.png" alt="images/it_key"></td><td width="25%"><a href="#it_005fkey">it_key</a></td><td width="9%"><img src="images/it_landmine.png" alt="images/it_landmine"></td><td width="25%"><a href="#it_005flandmine">it_landmine</a></td></tr>
18291
<tr><td width="8%"><img src="images/it_laser.png" alt="images/it_laser"></td><td width="25%"><a href="#it_005flaserbeam">it_laserbeam</a></td><td width="8%"><img src="images/it_magicwand.png" alt="images/it_magicwand"></td><td width="25%"><a href="#it_005fmagicwand">it_magicwand</a></td><td width="9%"><img src="images/it_magnet_off.png" alt="images/it_magnet_off"></td><td width="25%"><a href="#it_005fmagnet">it_magnet</a></td></tr>
18292
<tr><td width="8%"><img src="images/it_meditation_bump.png" alt="images/it_meditation_bump"></td><td width="25%"><a href="#it_005fmeditation">it_meditation</a>_bump</td><td width="8%"><img src="images/it_meditation_caldera.png" alt="images/it_meditation_caldera"></td><td width="25%"><a href="#it_005fmeditation">it_meditation</a>_caldera</td><td width="9%"><img src="images/it_meditation_dent.png" alt="images/it_meditation_dent"></td><td width="25%"><a href="#it_005fmeditation">it_meditation</a>_dent</td></tr>
18293
<tr><td width="8%"><img src="images/it_meditation_hill.png" alt="images/it_meditation_hill"></td><td width="25%"><a href="#it_005fmeditation">it_meditation</a>_hill</td><td width="8%"><img src="images/it_meditation_hollow.png" alt="images/it_meditation_hollow"></td><td width="25%"><a href="#it_005fmeditation">it_meditation</a>_hollow</td><td width="9%"><img src="images/it_meditation_volcano.png" alt="images/it_meditation_volcano"></td><td width="25%"><a href="#it_005fmeditation">it_meditation</a>_volcano</td></tr>
18294
<tr><td width="8%"><img src="images/it_pencil.png" alt="images/it_pencil"></td><td width="25%"><a href="#it_005fpencil">it_pencil</a></td><td width="8%"><img src="images/it_pin.png" alt="images/it_pin"></td><td width="25%"><a href="#it_005fpin">it_pin</a></td><td width="9%"><img src="images/it_pipe_e.png" alt="images/it_pipe_e"></td><td width="25%"><a href="#it_005fpipe">it_pipe</a></td></tr>
18295
<tr><td width="8%"><img src="images/it_puller.png" alt="images/it_puller"></td><td width="25%"><a href="#it_005fpuller">it_puller</a></td><td width="8%"><img src="images/it_ring.png" alt="images/it_ring"></td><td width="25%"><a href="#it_005fring">it_ring</a></td><td width="9%"><img src="images/it_rubberband.png" alt="images/it_rubberband"></td><td width="25%"><a href="#it_005frubberband">it_rubberband</a></td></tr>
18296
<tr><td width="8%"><img src="images/it_seed.png" alt="images/it_seed"></td><td width="25%"><a href="#it_005fseed">it_seed</a></td><td width="8%"><img src="images/it_sensor.png" alt="images/it_sensor"></td><td width="25%"><a href="#it_005fsensor">it_sensor</a></td><td width="9%"><img src="images/it_sensor_exit.png" alt="images/it_sensor_exit"></td><td width="25%"><a href="#it_005fsensor">it_sensor</a>_exit</td></tr>
18297
<tr><td width="8%"><img src="images/it_shogun_m.png" alt="images/it_shogun_m"></td><td width="25%"><a href="#it_005fshogun">it_shogun</a></td><td width="8%"><img src="images/it_spade.png" alt="images/it_spade"></td><td width="25%"><a href="#it_005fspade">it_spade</a></td><td width="9%"><img src="images/it_spoon.png" alt="images/it_spoon"></td><td width="25%"><a href="#it_005fspoon">it_spoon</a></td></tr>
18298
<tr><td width="8%"><img src="images/it_springboard.png" alt="images/it_springboard"></td><td width="25%"><a href="#it_005fspringboard">it_springboard</a></td><td width="8%"><img src="images/it_spring_2.png" alt="images/it_spring_2"></td><td width="25%"><a href="#it_005fspring">it_spring</a>_drop</td><td width="9%"><img src="images/it_spring.png" alt="images/it_spring"></td><td width="25%"><a href="#it_005fspring">it_spring</a>_keep</td></tr>
18299
<tr><td width="8%"><img src="images/it_squashed.png" alt="images/it_squashed"></td><td width="25%"><a href="#it_005fsquashed">it_squashed</a></td><td width="8%"><img src="images/it_strip_b2.png" alt="images/it_strip_b2"></td><td width="25%"><a href="#it_005fstrip">it_strip</a>_ew</td><td width="9%"><img src="images/it_surprise.png" alt="images/it_surprise"></td><td width="25%"><a href="#it_005fsurprise">it_surprise</a></td></tr>
18300
<tr><td width="8%"><img src="images/it_sword.png" alt="images/it_sword"></td><td width="25%"><a href="#it_005fsword">it_sword</a></td><td width="8%"><img src="images/it_trap.png" alt="images/it_trap"></td><td width="25%"><a href="#it_005ftrap">it_trap</a></td><td width="9%"><img src="images/it_trigger.png" alt="images/it_trigger"></td><td width="25%"><a href="#it_005ftrigger">it_trigger</a></td></tr>
18301
<tr><td width="8%"><img src="images/it_umbrella.png" alt="images/it_umbrella"></td><td width="25%"><a href="#it_005fumbrella">it_umbrella</a></td><td width="8%"><img src="images/it_vortex.png" alt="images/it_vortex"></td><td width="25%"><a href="#it_005fvortex">it_vortex</a></td><td width="9%"><img src="images/it_weight.png" alt="images/it_weight"></td><td width="25%"><a href="#it_005fweight">it_weight</a></td></tr>
18302
<tr><td width="8%"><img src="images/it_wormhole.png" alt="images/it_wormhole"></td><td width="25%"><a href="#it_005fwormhole">it_wormhole</a></td><td width="8%"><img src="images/it_wrench.png" alt="images/it_wrench"></td><td width="25%"><a href="#it_005fwrench">it_wrench</a></td><td width="9%"><img src="images/it_yinyang.png" alt="images/it_yinyang"></td><td width="25%"><a href="#it_005fyinyang">it_yinyang</a></td></tr>
18306
<a name="Item-Attributes"></a>
18307
<table cellpadding="1" cellspacing="1" border="0">
18308
<tr><td valign="middle" align="left">[<a href="#Item-Overview" title="Previous section in reading order"> < </a>]</td>
18309
<td valign="middle" align="left">[<a href="#fireproof" title="Next section in reading order"> > </a>]</td>
18310
<td valign="middle" align="left"> </td>
18311
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
18312
<td valign="middle" align="left">[<a href="#Item-Objects" title="Up section"> Up </a>]</td>
18313
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
18314
<td valign="middle" align="left"> </td>
18315
<td valign="middle" align="left"> </td>
18316
<td valign="middle" align="left"> </td>
18317
<td valign="middle" align="left"> </td>
18318
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
18319
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
18320
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
18321
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
18323
<a name="Item-Attributes-1"></a>
18324
<h2 class="section">8.2 Item Attributes</h2>
18326
<table class="menu" border="0" cellspacing="0">
18327
<tr><td align="left" valign="top"><a href="#fireproof">8.2.1 fireproof</a></td><td> </td><td align="left" valign="top"> -
18329
<tr><td align="left" valign="top"><a href="#freezable">8.2.2 freezable</a></td><td> </td><td align="left" valign="top"> Affinity to be frozen in ice
18331
<tr><td align="left" valign="top"><a href="#liftable">8.2.3 liftable</a></td><td> </td><td align="left" valign="top"> Allowance for actors to pick up
18333
<tr><td align="left" valign="top"><a href="#portable">8.2.4 portable</a></td><td> </td><td align="left" valign="top"> Ability to be added to the inventory
18339
<a name="fireproof"></a>
18340
<table cellpadding="1" cellspacing="1" border="0">
18341
<tr><td valign="middle" align="left">[<a href="#Item-Attributes" title="Previous section in reading order"> < </a>]</td>
18342
<td valign="middle" align="left">[<a href="#freezable" title="Next section in reading order"> > </a>]</td>
18343
<td valign="middle" align="left"> </td>
18344
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
18345
<td valign="middle" align="left">[<a href="#Item-Attributes" title="Up section"> Up </a>]</td>
18346
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
18347
<td valign="middle" align="left"> </td>
18348
<td valign="middle" align="left"> </td>
18349
<td valign="middle" align="left"> </td>
18350
<td valign="middle" align="left"> </td>
18351
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
18352
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
18353
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
18354
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
18356
<a name="fireproof-1"></a>
18357
<h3 class="subsection">8.2.1 fireproof</h3>
18360
<dl compact="compact">
18361
<dt> <b>Type:</b> boolean</dt>
18362
<dt> <b>Values:</b> <code>false</code>, <code>true</code></dt>
18363
<dt> <b>Default:</b> <code>false</code></dt>
18364
<dt> <b>Access:</b> read/write</dt>
18369
<a name="freezable"></a>
18370
<table cellpadding="1" cellspacing="1" border="0">
18371
<tr><td valign="middle" align="left">[<a href="#fireproof" title="Previous section in reading order"> < </a>]</td>
18372
<td valign="middle" align="left">[<a href="#liftable" title="Next section in reading order"> > </a>]</td>
18373
<td valign="middle" align="left"> </td>
18374
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
18375
<td valign="middle" align="left">[<a href="#Item-Attributes" title="Up section"> Up </a>]</td>
18376
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
18377
<td valign="middle" align="left"> </td>
18378
<td valign="middle" align="left"> </td>
18379
<td valign="middle" align="left"> </td>
18380
<td valign="middle" align="left"> </td>
18381
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
18382
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
18383
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
18384
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
18386
<a name="freezable-1"></a>
18387
<h3 class="subsection">8.2.2 freezable</h3>
18389
<p>Describes the affinity of an item to be frozen by an <a href="#st_005fice">st_ice</a>. All
18390
<a href="#portable">portable</a> items a freezable. But some otherwise static items may be
18393
<dl compact="compact">
18394
<dt> <b>Type:</b> boolean</dt>
18395
<dt> <b>Values:</b> <code>false</code>, <code>true</code></dt>
18396
<dt> <b>Default:</b> <code>false</code></dt>
18397
<dt> <b>Access:</b> read only</dt>
18402
<a name="liftable"></a>
18403
<table cellpadding="1" cellspacing="1" border="0">
18404
<tr><td valign="middle" align="left">[<a href="#freezable" title="Previous section in reading order"> < </a>]</td>
18405
<td valign="middle" align="left">[<a href="#portable" title="Next section in reading order"> > </a>]</td>
18406
<td valign="middle" align="left"> </td>
18407
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
18408
<td valign="middle" align="left">[<a href="#Item-Attributes" title="Up section"> Up </a>]</td>
18409
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
18410
<td valign="middle" align="left"> </td>
18411
<td valign="middle" align="left"> </td>
18412
<td valign="middle" align="left"> </td>
18413
<td valign="middle" align="left"> </td>
18414
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
18415
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
18416
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
18417
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
18419
<a name="liftable-1"></a>
18420
<h3 class="subsection">8.2.3 liftable</h3>
18422
<p>Describes the ability of <a href="#Actors">Actors</a> to pick up an item from a floor. Note
18423
that some items can be added to the player’s inventory and can be dropped onto
18424
a floor but nevertheless can not be picked up later on.
18426
<dl compact="compact">
18427
<dt> <b>Type:</b> boolean</dt>
18428
<dt> <b>Values:</b> <code>false</code>, <code>true</code></dt>
18429
<dt> <b>Default:</b> <code>false</code></dt>
18430
<dt> <b>Access:</b> read only</dt>
18435
<a name="portable"></a>
18436
<table cellpadding="1" cellspacing="1" border="0">
18437
<tr><td valign="middle" align="left">[<a href="#liftable" title="Previous section in reading order"> < </a>]</td>
18438
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Next section in reading order"> > </a>]</td>
18439
<td valign="middle" align="left"> </td>
18440
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
18441
<td valign="middle" align="left">[<a href="#Item-Attributes" title="Up section"> Up </a>]</td>
18442
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
18443
<td valign="middle" align="left"> </td>
18444
<td valign="middle" align="left"> </td>
18445
<td valign="middle" align="left"> </td>
18446
<td valign="middle" align="left"> </td>
18447
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
18448
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
18449
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
18450
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
18452
<a name="portable-1"></a>
18453
<h3 class="subsection">8.2.4 portable</h3>
18455
<p>Determines whether an item can be added to the player’s inventory. All
18456
<a href="#liftable">liftable</a> items are portable. Portable items that are not liftable can
18457
either be added to the inventory by means of the world <a href="#add">add</a> method or
18458
by an actor hitting a variant of <a href="#st_005fdispenser">st_dispenser</a>.
18460
<dl compact="compact">
18461
<dt> <b>Type:</b> boolean</dt>
18462
<dt> <b>Values:</b> <code>false</code>, <code>true</code></dt>
18463
<dt> <b>Default:</b> <code>false</code></dt>
18464
<dt> <b>Access:</b> read only</dt>
18469
<a name="Liftable-Items"></a>
18470
<table cellpadding="1" cellspacing="1" border="0">
18471
<tr><td valign="middle" align="left">[<a href="#portable" title="Previous section in reading order"> < </a>]</td>
18472
<td valign="middle" align="left">[<a href="#it_005fbag" title="Next section in reading order"> > </a>]</td>
18473
<td valign="middle" align="left"> </td>
18474
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
18475
<td valign="middle" align="left">[<a href="#Item-Objects" title="Up section"> Up </a>]</td>
18476
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
18477
<td valign="middle" align="left"> </td>
18478
<td valign="middle" align="left"> </td>
18479
<td valign="middle" align="left"> </td>
18480
<td valign="middle" align="left"> </td>
18481
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
18482
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
18483
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
18484
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
18486
<a name="Liftable-Items-1"></a>
18487
<h2 class="section">8.3 Liftable Items</h2>
18489
<table class="menu" border="0" cellspacing="0">
18490
<tr><td align="left" valign="top"><a href="#it_005fbag">8.3.1 it_bag</a></td><td> </td><td align="left" valign="top"> Portable Item Container
18492
<tr><td align="left" valign="top"><a href="#it_005fbanana">8.3.2 it_banana</a></td><td> </td><td align="left" valign="top"> Transformable Banana
18494
<tr><td align="left" valign="top"><a href="#it_005fbottle">8.3.3 it_bottle</a></td><td> </td><td align="left" valign="top"> Bottle of Booze
18496
<tr><td align="left" valign="top"><a href="#it_005fbrake">8.3.4 it_brake</a></td><td> </td><td align="left" valign="top"> Portable Stone Brake
18498
<tr><td align="left" valign="top"><a href="#it_005fbrush">8.3.5 it_brush</a></td><td> </td><td align="left" valign="top"> Brush for Painting and Sweeping
18500
<tr><td align="left" valign="top"><a href="#it_005fcherry">8.3.6 it_cherry</a></td><td> </td><td align="left" valign="top"> Source of Invisibility
18502
<tr><td align="left" valign="top"><a href="#it_005fcoffee">8.3.7 it_coffee</a></td><td> </td><td align="left" valign="top"> Cup of Coffee
18504
<tr><td align="left" valign="top"><a href="#it_005fcoin">8.3.8 it_coin</a></td><td> </td><td align="left" valign="top"> Enigma’s currency
18506
<tr><td align="left" valign="top"><a href="#it_005fdocument">8.3.9 it_document</a></td><td> </td><td align="left" valign="top"> Readable Text Document
18508
<tr><td align="left" valign="top"><a href="#it_005fdrop">8.3.10 it_drop</a></td><td> </td><td align="left" valign="top"> Magic Transformation Elixir
18510
<tr><td align="left" valign="top"><a href="#it_005fdynamite">8.3.11 it_dynamite</a></td><td> </td><td align="left" valign="top"> Exploder
18512
<tr><td align="left" valign="top"><a href="#it_005fextinguisher">8.3.12 it_extinguisher</a></td><td> </td><td align="left" valign="top"> Fire Extinguisher
18514
<tr><td align="left" valign="top"><a href="#it_005fextralife">8.3.13 it_extralife</a></td><td> </td><td align="left" valign="top"> Another Life or Glasses
18516
<tr><td align="left" valign="top"><a href="#it_005fflag">8.3.14 it_flag</a></td><td> </td><td align="left" valign="top"> Respawn Position Marker
18518
<tr><td align="left" valign="top"><a href="#it_005ffloppy">8.3.15 it_floppy</a></td><td> </td><td align="left" valign="top"> Lock opening uncoded Floppy
18520
<tr><td align="left" valign="top"><a href="#it_005fglasses">8.3.16 it_glasses</a></td><td> </td><td align="left" valign="top"> Glasses to spot certain objects
18522
<tr><td align="left" valign="top"><a href="#it_005fhammer">8.3.17 it_hammer</a></td><td> </td><td align="left" valign="top"> Stone breaking Hammer
18524
<tr><td align="left" valign="top"><a href="#it_005fkey">8.3.18 it_key</a></td><td> </td><td align="left" valign="top"> Lock opening coded Key
18526
<tr><td align="left" valign="top"><a href="#it_005fmagicwand">8.3.19 it_magicwand</a></td><td> </td><td align="left" valign="top"> Wizards Tools
18528
<tr><td align="left" valign="top"><a href="#it_005fpencil">8.3.20 it_pencil</a></td><td> </td><td align="left" valign="top"> Pencil to mark Objects
18530
<tr><td align="left" valign="top"><a href="#it_005fpin">8.3.21 it_pin</a></td><td> </td><td align="left" valign="top"> Friction increasing crampon
18532
<tr><td align="left" valign="top"><a href="#it_005fpipe">8.3.22 it_pipe</a></td><td> </td><td align="left" valign="top"> Pipe for Transmissions
18534
<tr><td align="left" valign="top"><a href="#it_005fpuller">8.3.23 it_puller</a></td><td> </td><td align="left" valign="top"> Stone pulling item
18536
<tr><td align="left" valign="top"><a href="#it_005fring">8.3.24 it_ring</a></td><td> </td><td align="left" valign="top"> Position Exchange Tool
18538
<tr><td align="left" valign="top"><a href="#it_005frubberband">8.3.25 it_rubberband</a></td><td> </td><td align="left" valign="top"> Unconnected Rubberband
18540
<tr><td align="left" valign="top"><a href="#it_005fseed">8.3.26 it_seed</a></td><td> </td><td align="left" valign="top"> Seeds for Wood, Volcano Stones
18542
<tr><td align="left" valign="top"><a href="#it_005fspade">8.3.27 it_spade</a></td><td> </td><td align="left" valign="top"> Shuffle for Meditation flattening
18544
<tr><td align="left" valign="top"><a href="#it_005fspoon">8.3.28 it_spoon</a></td><td> </td><td align="left" valign="top"> Controlled Suicide Tool
18546
<tr><td align="left" valign="top"><a href="#it_005fspring">8.3.29 it_spring</a></td><td> </td><td align="left" valign="top"> Portable Spring
18548
<tr><td align="left" valign="top"><a href="#it_005fsurprise">8.3.30 it_surprise</a></td><td> </td><td align="left" valign="top"> Random Transforming item
18550
<tr><td align="left" valign="top"><a href="#it_005fsword">8.3.31 it_sword</a></td><td> </td><td align="left" valign="top"> Knight defeating Sword
18552
<tr><td align="left" valign="top"><a href="#it_005fumbrella">8.3.32 it_umbrella</a></td><td> </td><td align="left" valign="top"> Death Protection Item
18554
<tr><td align="left" valign="top"><a href="#it_005fweight">8.3.33 it_weight</a></td><td> </td><td align="left" valign="top"> Portable Mass
18556
<tr><td align="left" valign="top"><a href="#it_005fwrench">8.3.34 it_wrench</a></td><td> </td><td align="left" valign="top"> Tool for mechanical Stones
18558
<tr><td align="left" valign="top"><a href="#it_005fyinyang">8.3.35 it_yinyang</a></td><td> </td><td align="left" valign="top"> Player toggling Switch
18563
<a name="it_005fbag"></a>
18564
<table cellpadding="1" cellspacing="1" border="0">
18565
<tr><td valign="middle" align="left">[<a href="#Liftable-Items" title="Previous section in reading order"> < </a>]</td>
18566
<td valign="middle" align="left">[<a href="#it_005fbanana" title="Next section in reading order"> > </a>]</td>
18567
<td valign="middle" align="left"> </td>
18568
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
18569
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
18570
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
18571
<td valign="middle" align="left"> </td>
18572
<td valign="middle" align="left"> </td>
18573
<td valign="middle" align="left"> </td>
18574
<td valign="middle" align="left"> </td>
18575
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
18576
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
18577
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
18578
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
18580
<a name="it_005fbag-1"></a>
18581
<h3 class="subsection">8.3.1 it_bag</h3>
18582
<a name="index-it_005fbag"></a>
18584
<p>A bag is a portable container for other objects. The player can fill it with
18585
up to 13 other items, including other empty or filled bags.
18587
<p>The bag allows a player to carry in total more than 13 items in his inventory.
18588
Nevertheless most items carried in a bag can not directly be applied. Just the
18589
<a href="#it_005fweight">it_weight</a> does apply its mass even when carried in a bag. On the other
18590
hand bags offer the user the possibility to pick up and drop items that can not
18591
be dropped otherwise as they would be activated. E.g. an <a href="#it_005fcherry">it_cherry</a> can
18592
not be dropped without application, but if it is contained in a bag the bag
18593
can be dropped and the cherry can be extracted later on. A bag is useful to
18594
transfer multiple items via <a href="#st_005fmail">st_mail</a>, too.
18596
<p>As long as an <code>it_bag</code> is at the first place in the inventory, new items
18597
are put into the bag instead of the inventory, until the bag is full (13 items).
18598
The player can drop an <code>it_bag</code> anytime. When picked up again, items from
18599
the bag are put back into the inventory (until it is full).
18601
<p>The quite complex rules of pick up in detail:
18605
Inventory and bag are limited concerning pickups to 13 items.
18608
Both are generally LIFO (last item picked up is first item out), but the
18609
inventory content can be rotated.
18612
If you pick up any item besides a bag and your first inventory item is not a bag
18613
the item is added to the inventory.
18616
If you pick up any item besides a non-empty bag and your first inventory item is
18617
a bag the item is added to the first inventory bag (this includes non-empty bags
18618
being added into first inventory bags!)
18621
You empty a bag by dropping it and picking it up again with any item at the
18622
first inventory position but a bag. As many items as possible are taken from the
18623
bag and added to the inventory.
18626
Empty bags are never put into other bags (this would cause unresolvable
18627
recursion problems). They will only be added as items directly to the inventory.
18630
If the "picked up" bag can not empty its contents to the inventory or a bag at
18631
the first inventory position is full the bag is not picked up and keeps the
18636
<p>You can add items directly to a bag by usage of the world <a href="#add">add</a> method.
18638
<p>Bags are used by <a href="#st_005fthief">st_thief</a> and <a href="#fl_005fthief">fl_thief</a> to carry their stolen
18639
items. When the thieves are captured by <a href="#st_005fchess">st_chess</a> the bag remains on the
18640
grid position filled up with the stolen items.
18642
<dl compact="compact">
18643
<dt> <b>Attributes:</b></dt>
18644
<dd><dl compact="compact">
18645
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
18646
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
18647
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
18648
<dt> <b>mass</b> <i>values</i>: positive float number; <i>default</i>: <code>0.0</code>; <i>access</i>: <code>read only</code></dt>
18649
<dd><p>Sum of masses of all contained items. Currently just the <a href="#it_005fweight">it_weight</a> has a
18655
<dt> <b>Messages:</b> none</dt>
18656
<dt> <b>Variants:</b></dt>
18657
<dd><dl compact="compact">
18658
<dt> <img src="images/it_bag.png" alt="images/it_bag"><p> <b>it_bag</b>
18665
<a name="it_005fbanana"></a>
18666
<table cellpadding="1" cellspacing="1" border="0">
18667
<tr><td valign="middle" align="left">[<a href="#it_005fbag" title="Previous section in reading order"> < </a>]</td>
18668
<td valign="middle" align="left">[<a href="#it_005fbottle" title="Next section in reading order"> > </a>]</td>
18669
<td valign="middle" align="left"> </td>
18670
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
18671
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
18672
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
18673
<td valign="middle" align="left"> </td>
18674
<td valign="middle" align="left"> </td>
18675
<td valign="middle" align="left"> </td>
18676
<td valign="middle" align="left"> </td>
18677
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
18678
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
18679
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
18680
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
18682
<a name="it_005fbanana-1"></a>
18683
<h3 class="subsection">8.3.2 it_banana</h3>
18684
<a name="index-it_005fbanana"></a>
18686
<p>A portable item without direct usage. But it transforms into an <a href="#it_005fcherry">it_cherry</a>
18687
when hit by a laser beam.
18689
<p>When a stone is pushed over it an <a href="#it_005fsquashed">it_squashed</a> remains as remnants.
18691
<dl compact="compact">
18692
<dt> <b>Attributes:</b></dt>
18693
<dd><dl compact="compact">
18694
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
18695
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
18696
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
18699
<dt> <b>Messages:</b> none</dt>
18700
<dt> <b>Variants:</b></dt>
18701
<dd><dl compact="compact">
18702
<dt> <img src="images/it_banana.png" alt="images/it_banana"><p> <b>it_banana</b>
18709
<a name="it_005fbottle"></a>
18710
<table cellpadding="1" cellspacing="1" border="0">
18711
<tr><td valign="middle" align="left">[<a href="#it_005fbanana" title="Previous section in reading order"> < </a>]</td>
18712
<td valign="middle" align="left">[<a href="#it_005fbrake" title="Next section in reading order"> > </a>]</td>
18713
<td valign="middle" align="left"> </td>
18714
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
18715
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
18716
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
18717
<td valign="middle" align="left"> </td>
18718
<td valign="middle" align="left"> </td>
18719
<td valign="middle" align="left"> </td>
18720
<td valign="middle" align="left"> </td>
18721
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
18722
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
18723
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
18724
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
18726
<a name="it_005fbottle-1"></a>
18727
<h3 class="subsection">8.3.3 it_bottle</h3>
18728
<a name="index-it_005fbottle"></a>
18730
<p>A bottle can be filled either with booze or with a message. When a bottle
18731
breaks the remnants are lethal sherds.
18733
<p>A bottle filled with booze makes any ball like actor that activates it drunken.
18734
The control of actor gets difficult as it will likely no longer move straight
18735
into the intended direction. Fortunately the period of drunkenness lasts just
18736
5 seconds per default. But you can set this time by the attribute
18737
‘<samp>interval</samp>’ to other values. The bottle will be dropped on activation.
18738
Activation of several bottles in sequence will lead to longer periods of
18739
drunkenness as the intervals will sum up.
18741
<p>Alternatively you can fill the bottle with a message by the attribute
18742
‘<samp>text</samp>’. Like <a href="#it_005fdocument">it_document</a> the message gets displayed on activation.
18743
Of course the actor does not get drunken in this case.
18745
<p>When a stone gets pushed over a bottle it will break to sherds. These
18746
remnants are lethal to <a href="#ac_005fmarble">ac_marble</a> and <a href="#ac_005fpearl">ac_pearl</a> when entering the
18747
affected grid. But of course they can jump over the broken bottle or pass it
18748
while being protected by an activated <a href="#it_005fumbrella">it_umbrella</a>. Unlike <a href="#it_005fdeath">it_death</a>
18749
the broken bottle can be removed by an actor by activation of an <a href="#it_005fbrush">it_brush</a>
18750
while jumping over it, or passing it with protection. But a broken bottle can
18751
not be picked up and is not portable.
18753
<dl compact="compact">
18754
<dt> <b>Attributes:</b></dt>
18755
<dd><dl compact="compact">
18756
<dt> <b>state</b>, <i>values</i>: <code>IDLE</code>, <code>BROKEN</code>; <i>default</i>: <code>BROKEN</code> See section <a href="#state">state</a></dt>
18757
<dt> <b>interval</b> <i>values</i>: positive number; <i>default</i>: <code>5.0</code></dt>
18758
<dd><p>Number of seconds that the actor becomes drunken.
18760
<dt> <b>text</b>, <i>values</i>: string;</dt>
18761
<dd><p>Either the text to be displayed or just a key word for identification on
18762
<a href="#Internationalization-_0028i18n_0029">Internationalization (i18n)</a>.
18764
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
18765
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
18766
<dd><p>Just an ‘<samp>IDLE</samp>’ bottle is liftable, a ‘<samp>BROKEN</samp>’ one is not liftable.
18768
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
18769
<dd><p>Just an ‘<samp>IDLE</samp>’ bottle is portable, a ‘<samp>BROKEN</samp>’ one is not portable.
18774
<dt> <b>Messages:</b> none</dt>
18775
<dt> <b>Variants:</b></dt>
18776
<dd><dl compact="compact">
18777
<dt> <img src="images/it_bottle_idle.png" alt="images/it_bottle_idle"><p> <b>it_bottle</b>: state = <code>IDLE</code>
18779
<dt> <img src="images/it_bottle_idle.png" alt="images/it_bottle_idle"><p> <b>it_bottle_idle</b>: state = <code>IDLE</code>
18781
<dt> <img src="images/it_bottle_broken.png" alt="images/it_bottle_broken"><p> <b>it_bottle_broken</b>: state = <code>BROKEN</code>
18789
<a name="it_005fbrake"></a>
18790
<table cellpadding="1" cellspacing="1" border="0">
18791
<tr><td valign="middle" align="left">[<a href="#it_005fbottle" title="Previous section in reading order"> < </a>]</td>
18792
<td valign="middle" align="left">[<a href="#it_005fbrush" title="Next section in reading order"> > </a>]</td>
18793
<td valign="middle" align="left"> </td>
18794
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
18795
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
18796
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
18797
<td valign="middle" align="left"> </td>
18798
<td valign="middle" align="left"> </td>
18799
<td valign="middle" align="left"> </td>
18800
<td valign="middle" align="left"> </td>
18801
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
18802
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
18803
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
18804
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
18806
<a name="it_005fbrake-1"></a>
18807
<h3 class="subsection">8.3.4 it_brake</h3>
18808
<a name="index-it_005fbrake"></a>
18810
<p>The brake is a stone that can be picked up as an item by actors. The
18811
<a href="#st_005fbrake">st_brake</a> can be used to stop a running <a href="#st_005fboulder">st_boulder</a> or a
18812
<a href="#st_005flightpassenger">st_lightpassenger</a>, what likely has given this object its name.
18814
<p>When an actor passes below the brake stone it will pick up the object like
18815
other items. The brake will be added as a brake item to its inventory.
18816
Unlike other items the brake can be dropped even on grids that are already
18817
occupied by an item. But you can not drop the brake beneath another stone like
18818
a <a href="#it_005fseed">it_seed</a>.
18820
<p>On dropping the brake item it transforms immediately to an <a href="#st_005fbrake">st_brake</a> without
18821
killing an item positioned on the grid. The brake stone will press an
18822
<a href="#it_005ftrigger">it_trigger</a> beneath, what makes the brake item a portable trigger key.
18824
<p>The item itself will never exist on the world grid. It exists just as part of
18825
the player inventory or item containers like <a href="#it_005fbag">it_bag</a>.
18827
<p>Due to the <a href="#Snapshot-Principle">Snapshot Principle</a> you should never instantiate this item. Do
18828
set an <a href="#st_005fbrake">st_brake</a> to the world grid positions instead. This item is listed
18829
for your understanding what happens to a picked up brake and for identifying
18830
an <a href="#Object-Kind">Object Kind</a> ‘<samp>it_brake</samp>’ in an inventory or a container.
18832
<dl compact="compact">
18833
<dt> <b>Attributes:</b></dt>
18834
<dd><dl compact="compact">
18835
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
18836
<dd><p>Even though being freezable a brake will never freeze as an item, as it is
18837
always converted to an <a href="#st_005fbrake">st_brake</a> on being dropped or placed onto a floor.
18839
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
18840
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
18843
<dt> <b>Messages:</b> none</dt>
18844
<dt> <b>Variants:</b></dt>
18845
<dd><dl compact="compact">
18846
<dt> <img src="images/st_brake.png" alt="images/st_brake"><p> <b>it_brake</b>
18854
<a name="it_005fbrush"></a>
18855
<table cellpadding="1" cellspacing="1" border="0">
18856
<tr><td valign="middle" align="left">[<a href="#it_005fbrake" title="Previous section in reading order"> < </a>]</td>
18857
<td valign="middle" align="left">[<a href="#it_005fcherry" title="Next section in reading order"> > </a>]</td>
18858
<td valign="middle" align="left"> </td>
18859
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
18860
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
18861
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
18862
<td valign="middle" align="left"> </td>
18863
<td valign="middle" align="left"> </td>
18864
<td valign="middle" align="left"> </td>
18865
<td valign="middle" align="left"> </td>
18866
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
18867
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
18868
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
18869
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
18871
<a name="it_005fbrush-1"></a>
18872
<h3 class="subsection">8.3.5 it_brush</h3>
18873
<a name="index-it_005fbrush"></a>
18875
<p>A brush that is useful to paint some stones and sweep away some otherwise
18878
<p>Stones must be hit with the brush revealed as the first item in the inventory.
18879
To sweep away nasty items the actor must activate the brush while being on the
18880
grid, or while jumping or flying over it:
18883
<li> <a href="#st_005factorimpulse">st_actorimpulse</a>, invisible - makes invisible variant visible
18884
</li><li> <a href="#st_005fblur">st_blur</a>, magic - transforms to <a href="#st_005fpassage">st_passage</a>
18885
</li><li> <a href="#st_005fflat">st_flat</a>, burnable - transforms to <a href="#st_005fflat">st_flat</a>
18886
</li><li> <a href="#st_005fflat">st_flat</a>, moveburnable - transforms to <a href="#st_005fflat">st_flat</a>_movable
18887
</li><li> <a href="#st_005fghost">st_ghost</a>, purplemarble - transforms to <a href="#st_005fpurplemarble">st_purplemarble</a>
18888
</li><li> <a href="#st_005fghost">st_ghost</a>, break - transforms to <a href="#st_005fbreak">st_break</a>_oxydc
18889
</li><li> <a href="#st_005flightpassenger">st_lightpassenger</a>, off - reactivates to state ‘<samp>ON</samp>’
18890
</li><li> <a href="#it_005fbottle">it_bottle</a>, broken - remove from floor
18891
</li><li> <a href="#it_005fburnable">it_burnable</a>, ash - remove from floor
18892
</li><li> <a href="#it_005fburnable">it_burnable</a>, fireproof - remove from floor
18893
</li><li> <a href="#it_005fcross">it_cross</a> - remove from floor
18894
</li><li> <a href="#it_005fsquashed">it_squashed</a> - remove from floor
18897
<p>The brush is sensitive to laser light an dissolves with an <a href="#it_005fexplosion">it_explosion</a>_nil
18898
leaving no remnants when being hit by light.
18900
<dl compact="compact">
18901
<dt> <b>Attributes:</b></dt>
18902
<dd><dl compact="compact">
18903
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
18904
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
18905
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
18908
<dt> <b>Messages:</b> none</dt>
18909
<dt> <b>Variants:</b></dt>
18910
<dd><dl compact="compact">
18911
<dt> <img src="images/it_brush.png" alt="images/it_brush"><p> <b>it_brush</b>
18919
<a name="it_005fcherry"></a>
18920
<table cellpadding="1" cellspacing="1" border="0">
18921
<tr><td valign="middle" align="left">[<a href="#it_005fbrush" title="Previous section in reading order"> < </a>]</td>
18922
<td valign="middle" align="left">[<a href="#it_005fcoffee" title="Next section in reading order"> > </a>]</td>
18923
<td valign="middle" align="left"> </td>
18924
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
18925
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
18926
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
18927
<td valign="middle" align="left"> </td>
18928
<td valign="middle" align="left"> </td>
18929
<td valign="middle" align="left"> </td>
18930
<td valign="middle" align="left"> </td>
18931
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
18932
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
18933
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
18934
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
18936
<a name="it_005fcherry-1"></a>
18937
<h3 class="subsection">8.3.6 it_cherry</h3>
18938
<a name="index-it_005fcherry"></a>
18940
<p>A magic item that makes the activating actor for 8 seconds invisible. But not
18941
all actors become invisible. Just the ball like actors <a href="#ac_005fmarble">ac_marble</a> and
18942
<a href="#ac_005fpearl">ac_pearl</a> do vanish.
18944
<p>An invisible actor can walk through most kinds of glass
18945
(see section <a href="#Transparent-Stones">Transparent Stones</a>) and as being invisible they do no longer attract
18946
hostile <a href="#ac_005frotor">ac_rotor</a> and <a href="#ac_005ftop">ac_top</a>.
18948
<p>When several cherries are activated in sequence each does prolong the actor’s
18949
time of invisibility by additional 8 seconds.
18951
<p>Other actors drop the cherry as an <a href="#it_005fsquashed">it_squashed</a> on activation. Sending a
18952
cherry via an <a href="#st_005fmail">st_mail</a> results in an <a href="#it_005fsquashed">it_squashed</a>, too. This
18953
gives you the control that a cherry added to one player’s inventory can not be
18954
easily transfered to other actors assigned to the other player. Just
18955
<a href="#st_005fthief">st_thief</a> and <a href="#fl_005fthief">fl_thief</a> are able to steal the cherry undamaged.
18957
<p>When a stone is pushed over a cherry an <a href="#it_005fsquashed">it_squashed</a> remains as remnants.
18959
<dl compact="compact">
18960
<dt> <b>Attributes:</b></dt>
18961
<dd><dl compact="compact">
18962
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
18963
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
18964
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
18967
<dt> <b>Messages:</b> none</dt>
18968
<dt> <b>Variants:</b></dt>
18969
<dd><dl compact="compact">
18970
<dt> <img src="images/it_cherry.png" alt="images/it_cherry"><p> <b>it_cherry</b>
18977
<a name="it_005fcoffee"></a>
18978
<table cellpadding="1" cellspacing="1" border="0">
18979
<tr><td valign="middle" align="left">[<a href="#it_005fcherry" title="Previous section in reading order"> < </a>]</td>
18980
<td valign="middle" align="left">[<a href="#it_005fcoin" title="Next section in reading order"> > </a>]</td>
18981
<td valign="middle" align="left"> </td>
18982
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
18983
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
18984
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
18985
<td valign="middle" align="left"> </td>
18986
<td valign="middle" align="left"> </td>
18987
<td valign="middle" align="left"> </td>
18988
<td valign="middle" align="left"> </td>
18989
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
18990
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
18991
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
18992
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
18994
<a name="it_005fcoffee-1"></a>
18995
<h3 class="subsection">8.3.7 it_coffee</h3>
18996
<a name="index-it_005fcoffee"></a>
18998
<p>A totally passive cup of coffee. It can be picked up and be dropped many times.
18999
It blocks laser light, prohibits <a href="#it_005fcrack">it_crack</a> spreading but it burns on fire
19000
and is blown away on <a href="#it_005fbomb">it_bomb</a> explosions.
19002
<dl compact="compact">
19003
<dt> <b>Attributes:</b></dt>
19004
<dd><dl compact="compact">
19005
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
19006
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
19007
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
19010
<dt> <b>Messages:</b> none</dt>
19011
<dt> <b>Variants:</b></dt>
19012
<dd><dl compact="compact">
19013
<dt> <img src="images/it_coffee.png" alt="images/it_coffee"><p> <b>it_coffee</b>
19020
<a name="it_005fcoin"></a>
19021
<table cellpadding="1" cellspacing="1" border="0">
19022
<tr><td valign="middle" align="left">[<a href="#it_005fcoffee" title="Previous section in reading order"> < </a>]</td>
19023
<td valign="middle" align="left">[<a href="#it_005fdocument" title="Next section in reading order"> > </a>]</td>
19024
<td valign="middle" align="left"> </td>
19025
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
19026
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
19027
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
19028
<td valign="middle" align="left"> </td>
19029
<td valign="middle" align="left"> </td>
19030
<td valign="middle" align="left"> </td>
19031
<td valign="middle" align="left"> </td>
19032
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
19033
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
19034
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
19035
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
19037
<a name="it_005fcoin-1"></a>
19038
<h3 class="subsection">8.3.8 it_coin</h3>
19039
<a name="index-it_005fcoin"></a>
19041
<p>A coin activates an <a href="#st_005fcoinslot">st_coinslot</a> when inserted by hitting the stone with
19042
the coin as first item in the players inventory. The time interval of activity
19043
of the coinslot depends on the coin type that is represented by its
19044
‘<samp>state</samp>’. Small, medium and large coin variants do exist.
19046
<p>When hit by a moving stone the coin type changes from small to medium and
19047
from medium to large.
19049
<p>A laser beam transforms a small coin into an <a href="#it_005fumbrella">it_umbrella</a>, a medium coin
19050
into an <a href="#it_005fhammer">it_hammer</a> and a large coin into an <a href="#it_005fextralife">it_extralife</a>.
19052
<p>A coin that comes into existence on an illuminated grid position will not
19053
transform due to already existing laser beams. But it will transform on the first
19054
additional beam and on laser beams that are switched off and on again.
19056
<dl compact="compact">
19057
<dt> <b>Attributes:</b></dt>
19059
<dl compact="compact">
19060
<dt> <b>state</b>, <i>values</i>: <code>SMALL</code>, <code>MEDIUM</code>, <code>LARGE</code>; <i>default</i>: <code>SMALL</code>; <i>access</i>: <code>read only</code> See section <a href="#state">state</a></dt>
19061
<dd><p>Represents the coin type with ‘<samp>SMALL</samp>’ being a coin of 2 cents, ‘<samp>MEDIUM</samp>’
19062
being a coin of 5 cents and ‘<samp>LARGE</samp>’ being a coin of 10 cents..
19064
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
19065
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
19066
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
19070
<dt> <b>Messages:</b> none</dt>
19071
<dt> <b>Variants:</b></dt>
19072
<dd><dl compact="compact">
19073
<dt> <img src="images/it_coin_s.png" alt="images/it_coin_s"><p> <b>it_coin</b>: state = <code>SMALL</code>
19075
<dt> <img src="images/it_coin_s.png" alt="images/it_coin_s"><p> <b>it_coin_s</b>: state = <code>SMALL</code>
19077
<dt> <img src="images/it_coin_m.png" alt="images/it_coin_m"><p> <b>it_coin_m</b>: state = <code>MEDIUM</code>
19079
<dt> <img src="images/it_coin_l.png" alt="images/it_coin_l"><p> <b>it_coin_l</b>: state = <code>LARGE</code>
19087
<a name="it_005fdocument"></a>
19088
<table cellpadding="1" cellspacing="1" border="0">
19089
<tr><td valign="middle" align="left">[<a href="#it_005fcoin" title="Previous section in reading order"> < </a>]</td>
19090
<td valign="middle" align="left">[<a href="#it_005fdrop" title="Next section in reading order"> > </a>]</td>
19091
<td valign="middle" align="left"> </td>
19092
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
19093
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
19094
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
19095
<td valign="middle" align="left"> </td>
19096
<td valign="middle" align="left"> </td>
19097
<td valign="middle" align="left"> </td>
19098
<td valign="middle" align="left"> </td>
19099
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
19100
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
19101
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
19102
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
19104
<a name="it_005fdocument-1"></a>
19105
<h3 class="subsection">8.3.9 it_document</h3>
19106
<a name="index-it_005fdocument"></a>
19108
<p>This item looks like a piece of paper and contains a text message that can be
19109
displayed by activating the item. It is destroyed by explosions from
19110
<a href="#it_005fbomb">it_bomb</a>, <a href="#st_005fdispenser">st_dispenser</a>, <a href="#it_005fdynamite">it_dynamite</a> and by burning fire.
19111
The document is sensitive to laser light an dissolves with an
19112
<a href="#it_005fexplosion">it_explosion</a>_nil leaving no remnants when being hit by light.
19114
<p>Another message carrying item is the <a href="#it_005fbottle">it_bottle</a>.
19116
<dl compact="compact">
19117
<dt> <b>Attributes:</b></dt>
19118
<dd><dl compact="compact">
19119
<dt> <b>text</b>, <i>values</i>: string;</dt>
19120
<dd><p>Either the text to be displayed or just a key word for identification on
19121
<a href="#Internationalization-_0028i18n_0029">Internationalization (i18n)</a>.
19123
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
19124
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
19125
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
19129
<dt> <b>Messages:</b></dt>
19130
<dd><dl compact="compact">
19131
<dt> <b>ignite</b></dt>
19132
<dd><p>Burn and destroy the document.
19137
<dt> <b>Variants:</b></dt>
19138
<dd><dl compact="compact">
19139
<dt> <img src="images/it_document.png" alt="images/it_document"><p> <b>it_document</b>
19146
<a name="it_005fdrop"></a>
19147
<table cellpadding="1" cellspacing="1" border="0">
19148
<tr><td valign="middle" align="left">[<a href="#it_005fdocument" title="Previous section in reading order"> < </a>]</td>
19149
<td valign="middle" align="left">[<a href="#it_005fdynamite" title="Next section in reading order"> > </a>]</td>
19150
<td valign="middle" align="left"> </td>
19151
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
19152
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
19153
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
19154
<td valign="middle" align="left"> </td>
19155
<td valign="middle" align="left"> </td>
19156
<td valign="middle" align="left"> </td>
19157
<td valign="middle" align="left"> </td>
19158
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
19159
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
19160
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
19161
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
19163
<a name="it_005fdrop-1"></a>
19164
<h3 class="subsection">8.3.10 it_drop</h3>
19165
<a name="index-it_005fdrop"></a>
19167
<p>The drop is a magic elixir for temporary actor transformations. On activation
19168
the actor transforms into another kind, lives for 5 seconds with all qualities
19169
of this kind and then transforms back to its old kind. The drop gets consumed
19170
by its activation. Generally it is not possible to prolong the transformation
19171
by activation of several drops.
19173
<p>Note that this object is currently just defined for the following actors:
19176
<li> <a href="#ac_005fmarble">ac_marble</a> transforms to <a href="#ac_005frotor">ac_rotor</a>.
19179
<p>Providing a drop in a level with <a href="#ac_005fpearl">ac_pearl</a> will likely cause
19180
incompatibilities with future Enigma versions.
19182
<dl compact="compact">
19183
<dt> <b>Attributes:</b></dt>
19184
<dd><dl compact="compact">
19185
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
19186
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
19187
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
19190
<dt> <b>Messages:</b> none</dt>
19191
<dt> <b>Variants:</b></dt>
19192
<dd><dl compact="compact">
19193
<dt> <img src="images/it_drop.png" alt="images/it_drop"><p> <b>it_drop</b>
19201
<a name="it_005fdynamite"></a>
19202
<table cellpadding="1" cellspacing="1" border="0">
19203
<tr><td valign="middle" align="left">[<a href="#it_005fdrop" title="Previous section in reading order"> < </a>]</td>
19204
<td valign="middle" align="left">[<a href="#it_005fextinguisher" title="Next section in reading order"> > </a>]</td>
19205
<td valign="middle" align="left"> </td>
19206
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
19207
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
19208
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
19209
<td valign="middle" align="left"> </td>
19210
<td valign="middle" align="left"> </td>
19211
<td valign="middle" align="left"> </td>
19212
<td valign="middle" align="left"> </td>
19213
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
19214
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
19215
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
19216
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
19218
<a name="it_005fdynamite-1"></a>
19219
<h3 class="subsection">8.3.11 it_dynamite</h3>
19220
<a name="index-it_005fdynamite"></a>
19222
<p>Dynamite is an explosive that can be picked up and that can be easily ignited
19223
at any free grid position. It ignites on drop, or if positioned on the floor in
19224
‘<samp>IDLE</samp>’ state it ignites on laser light, nearby fire and other nearby
19225
explosions as those caused by <a href="#it_005fbomb">it_bomb</a>, <a href="#st_005fdispenser">st_dispenser</a>, or other
19226
dynamite. A falling <a href="#ot_005fcannonball">ot_cannonball</a> lets it explode immediately without prior
19229
<p>On ignition its fuse starts burning. During this ‘<samp>ACTIVE</samp>’ state the
19230
dynamite can longer be picked up. After a short time the dynamite explodes
19231
causing on the 8 neighboring positions items to ignite and some stones like
19232
<a href="#st_005fbreak">st_break</a> to dissolve, too. The explosion leaves at its position an
19233
<a href="#it_005fmeditation">it_meditation</a>_hollow on all floor kinds besides <a href="#fl_005fice">fl_ice</a> where an
19234
<a href="#it_005fcrack">it_crack</a>_water remains.
19236
<p>Generally there is no direct way to stop a burning dynamite in order to prevent
19237
the explosion. It is even not allowed to reset the ‘<samp>state</samp>’ attribute to
19238
‘<samp>IDLE</samp>’. But when the user pushes an <a href="#st_005fice">st_ice</a> over a ‘<samp>ACTIVE</samp>’
19239
dynamite it will freeze and stop burning, returning to state ‘<samp>IDLE</samp>’.
19241
<p>Dynamite items will be added to the inventory when an actor hits a
19242
<a href="#st_005fdispenser">st_dispenser</a>_dynamite.
19244
<dl compact="compact">
19245
<dt> <b>Attributes:</b></dt>
19246
<dd><dl compact="compact">
19247
<dt> <b>state</b>, <i>values</i>: <code>IDLE</code>, <code>ACTIVE</code>; <i>default</i>: <code>IDLE</code> See section <a href="#state">state</a></dt>
19248
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
19249
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
19250
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
19251
<dd><p>Just ‘<samp>IDLE</samp>’ dynamite can be added to the inventory, burning ‘<samp>ACTIVE</samp>’
19252
ones are not portable.
19257
<dt> <b>Messages:</b></dt>
19258
<dd><dl compact="compact">
19259
<dt> <b>explode</b></dt>
19260
<dd><p>Direct explosion without burning fuse.
19262
<dt> <b>ignite</b></dt>
19263
<dd><p>Ignite the fuse.
19265
<dt> <b>heat</b></dt>
19266
<dd><p>Ignite the fuse.
19271
<dt> <b>Variants:</b></dt>
19272
<dd><dl compact="compact">
19273
<dt> <img src="images/it_dynamite.png" alt="images/it_dynamite"><p> <b>it_dynamite</b>: state = <code>IDLE</code>
19275
<dt> <img src="images/it_dynamite_burning.png" alt="images/it_dynamite_burning"><p> <b>it_dynamite_burning</b>: state = <code>ACTIVE</code>
19283
<a name="it_005fextinguisher"></a>
19284
<table cellpadding="1" cellspacing="1" border="0">
19285
<tr><td valign="middle" align="left">[<a href="#it_005fdynamite" title="Previous section in reading order"> < </a>]</td>
19286
<td valign="middle" align="left">[<a href="#it_005fextralife" title="Next section in reading order"> > </a>]</td>
19287
<td valign="middle" align="left"> </td>
19288
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
19289
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
19290
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
19291
<td valign="middle" align="left"> </td>
19292
<td valign="middle" align="left"> </td>
19293
<td valign="middle" align="left"> </td>
19294
<td valign="middle" align="left"> </td>
19295
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
19296
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
19297
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
19298
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
19300
<a name="it_005fextinguisher-1"></a>
19301
<h3 class="subsection">8.3.12 it_extinguisher</h3>
19302
<a name="index-it_005fextinguisher"></a>
19304
<p>A fire extinguisher that allows to extinguish burning fire and to protect areas
19305
with extinguishing foam of upcoming fire. See section <a href="#Fire-Spreading">Fire Spreading</a>.
19307
<p>A full loaded extinguisher allows two applications. The first one covers the
19308
nearest 13 grids, whereas the second one covers just 5 grids, the actor position
19309
itself and the 4 direct neighbor positions. The foam is an <a href="#it_005fburnable">it_burnable</a> of
19310
kind ‘<samp>fireproof</samp>’ which can be cleaned with an <a href="#it_005fbrush">it_brush</a> or by a
19311
<a href="#Flood-Spreading">Flood Spreading</a>.
19313
<p>The load is given by the attribute ‘<samp>state</samp>’ of the extinguisher and is
19314
visible for the user by a color spot. Green is a ‘<samp>FULL</samp>’ extinguisher,
19315
yellow a ‘<samp>MEDIUM</samp>’ filled extinguisher and red an ‘<samp>EMPTY</samp>’ extinguisher.
19317
<p>Extinguishers themselves are fireprotected as long as they are not empty.
19319
<p>The ‘<samp>toggle</samp>’ messages refills an extinguisher by one load until it is
19320
‘<samp>FULL</samp>’ again.
19322
<dl compact="compact">
19323
<dt> <b>Attributes:</b></dt>
19324
<dd><dl compact="compact">
19325
<dt> <b>state</b>, <i>values</i>: <code>EMPTY</code>, <code>MEDIUM</code>, <code>FULL</code>; <i>default</i>: <code>FULL</code> See section <a href="#state">state</a></dt>
19326
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
19327
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
19328
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
19332
<dt> <b>Messages:</b></dt>
19333
<dd><dl compact="compact">
19334
<dt> <b>toggle</b> See section <a href="#toggle">toggle</a></dt>
19335
<dd><p>A toggle causes a refill by one load.
19340
<dt> <b>Variants:</b></dt>
19341
<dd><dl compact="compact">
19342
<dt> <img src="images/it_extinguisher.png" alt="images/it_extinguisher"><p> <b>it_extinguisher</b>: state = <code>FULL</code>
19344
<dt> <img src="images/it_extinguisher.png" alt="images/it_extinguisher"><p> <b>it_extinguisher_full</b>: state = <code>FULL</code>
19346
<dt> <img src="images/it_extinguisher_2.png" alt="images/it_extinguisher_2"><p> <b>it_extinguisher_medium</b>: state = <code>MEDIUM</code>
19348
<dt> <img src="images/it_extinguisher_3.png" alt="images/it_extinguisher_3"><p> <b>it_extinguisher_empty</b>: state = <code>EMPTY</code>
19356
<a name="it_005fextralife"></a>
19357
<table cellpadding="1" cellspacing="1" border="0">
19358
<tr><td valign="middle" align="left">[<a href="#it_005fextinguisher" title="Previous section in reading order"> < </a>]</td>
19359
<td valign="middle" align="left">[<a href="#it_005fflag" title="Next section in reading order"> > </a>]</td>
19360
<td valign="middle" align="left"> </td>
19361
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
19362
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
19363
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
19364
<td valign="middle" align="left"> </td>
19365
<td valign="middle" align="left"> </td>
19366
<td valign="middle" align="left"> </td>
19367
<td valign="middle" align="left"> </td>
19368
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
19369
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
19370
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
19371
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
19373
<a name="it_005fextralife-1"></a>
19374
<h3 class="subsection">8.3.13 it_extralife</h3>
19375
<a name="index-it_005fextralife"></a>
19377
<p>An extralife transforms into <a href="#it_005fglasses">it_glasses</a> when hit by a laser beam and is
19378
itself a laser transformation result of an ‘<samp>it_coin_l</samp>’ (see section <a href="#it_005fcoin">it_coin</a>).
19379
The global variable <a href="#ExtralifeGlasses">ExtralifeGlasses</a> describes what the new glasses are
19382
<p>An extralife that comes into existence on an illuminated grid position will not
19383
be destroyed due to already existing laser beams. But it will be destroyed on
19384
the first additional beam and on laser beams that are switched off and on again.
19386
<p>If another item transforms into an extralife this new extralife will be immune to
19387
light destruction for a short latency period to avoid repeated item
19390
<dl compact="compact">
19391
<dt> <b>Attributes:</b></dt>
19392
<dd><dl compact="compact">
19393
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
19394
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
19395
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
19399
<dt> <b>Variants:</b></dt>
19400
<dd><dl compact="compact">
19401
<dt> <img src="images/it_extralife.png" alt="images/it_extralife"><p> <b>it_extralife</b>
19403
<dt> <img src="images/it_extralife.png" alt="images/it_extralife"><p> <b>it_extralife_new</b>: An extralife that is immune to light destruction for a short latency period.
19411
<a name="it_005fflag"></a>
19412
<table cellpadding="1" cellspacing="1" border="0">
19413
<tr><td valign="middle" align="left">[<a href="#it_005fextralife" title="Previous section in reading order"> < </a>]</td>
19414
<td valign="middle" align="left">[<a href="#it_005ffloppy" title="Next section in reading order"> > </a>]</td>
19415
<td valign="middle" align="left"> </td>
19416
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
19417
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
19418
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
19419
<td valign="middle" align="left"> </td>
19420
<td valign="middle" align="left"> </td>
19421
<td valign="middle" align="left"> </td>
19422
<td valign="middle" align="left"> </td>
19423
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
19424
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
19425
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
19426
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
19428
<a name="it_005fflag-1"></a>
19429
<h3 class="subsection">8.3.14 it_flag</h3>
19430
<a name="index-it_005fflag"></a>
19432
<p>Flags do mark the place where killed actors will be resurrected. Flags exist
19433
in two colors, ‘<samp>BLACK</samp>’ and ‘<samp>WHITE</samp>’. Each can be used to define the
19434
respawn position of matching colored <a href="#ac_005fmarble">ac_marble</a>s and <a href="#ac_005fpearl">ac_pearl</a>s.
19436
<p>As a level can contain many flags of the same ‘<samp>color</samp>’ the respawn position
19437
can not be defined by the flag position itself. The respawn position is the
19438
position of the last dropped flag of a given color. Additionally the respawn
19439
position gets cleared when after the last drop any flag of the same color gets
19440
picked up again. When no flag defined respawn position exists the actors will be
19441
resurrected at their initial position or the last secure position, if the global
19442
attribute <a href="#AutoRespawn">AutoRespawn</a> is set to <code>true</code>.
19444
<dl compact="compact">
19445
<dt> <b>Attributes:</b></dt>
19446
<dd><dl compact="compact">
19447
<dt> <b>color</b> <i>values</i>: <code>BLACK</code>, <code>WHITE</code>; <i>default</i>: <code>BLACK</code></dt>
19448
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
19449
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
19450
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
19454
<dt> <b>Variants:</b></dt>
19455
<dd><dl compact="compact">
19456
<dt> <img src="images/it_flag_black.png" alt="images/it_flag_black"><p> <b>it_flag</b>: color = <code>BLACK</code>
19458
<dt> <img src="images/it_flag_black.png" alt="images/it_flag_black"><p> <b>it_flag_black</b>: color = <code>BLACK</code>
19460
<dt> <img src="images/it_flag_white.png" alt="images/it_flag_white"><p> <b>it_flag_white</b>: color = <code>WHITE</code>
19467
<a name="it_005ffloppy"></a>
19468
<table cellpadding="1" cellspacing="1" border="0">
19469
<tr><td valign="middle" align="left">[<a href="#it_005fflag" title="Previous section in reading order"> < </a>]</td>
19470
<td valign="middle" align="left">[<a href="#it_005fglasses" title="Next section in reading order"> > </a>]</td>
19471
<td valign="middle" align="left"> </td>
19472
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
19473
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
19474
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
19475
<td valign="middle" align="left"> </td>
19476
<td valign="middle" align="left"> </td>
19477
<td valign="middle" align="left"> </td>
19478
<td valign="middle" align="left"> </td>
19479
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
19480
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
19481
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
19482
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
19484
<a name="it_005ffloppy-1"></a>
19485
<h3 class="subsection">8.3.15 it_floppy</h3>
19486
<a name="index-it_005ffloppy"></a>
19488
<p>A floppy activates an <a href="#st_005ffloppy">st_floppy</a> when inserted by hitting the stone with
19489
the floppy as first item in the players inventory.
19491
<dl compact="compact">
19492
<dt> <b>Attributes:</b></dt>
19493
<dd><dl compact="compact">
19494
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
19495
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
19496
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
19499
<dt> <b>Messages:</b> none</dt>
19500
<dt> <b>Variants:</b></dt>
19501
<dd><dl compact="compact">
19502
<dt> <img src="images/it_floppy.png" alt="images/it_floppy"><p> <b>it_floppy</b>
19510
<a name="it_005fglasses"></a>
19511
<table cellpadding="1" cellspacing="1" border="0">
19512
<tr><td valign="middle" align="left">[<a href="#it_005ffloppy" title="Previous section in reading order"> < </a>]</td>
19513
<td valign="middle" align="left">[<a href="#it_005fhammer" title="Next section in reading order"> > </a>]</td>
19514
<td valign="middle" align="left"> </td>
19515
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
19516
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
19517
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
19518
<td valign="middle" align="left"> </td>
19519
<td valign="middle" align="left"> </td>
19520
<td valign="middle" align="left"> </td>
19521
<td valign="middle" align="left"> </td>
19522
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
19523
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
19524
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
19525
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
19527
<a name="it_005fglasses-1"></a>
19528
<h3 class="subsection">8.3.16 it_glasses</h3>
19529
<a name="index-it_005fglasses"></a>
19531
<p>Glasses help a marble to spot certain other objects that are otherwise invisible
19532
or indistinguishable.
19534
<p>To be effective glasses must be hold in the top level of a players inventory.
19535
That means that the glasses must be shown in the inventory and not be buried
19536
in an <a href="#it_005fbag">it_bag</a> that is part of the inventory. Of course glasses just help
19537
those actors that are attached to the player wearing the glasses.
19539
<p>Glasses can make invisible <a href="#st_005fdeath">st_death</a> visible, can uncover invisible
19540
passages by making hollow stones transparent, can make inactive
19541
<a href="#st_005flightpassenger">st_lightpassenger</a> be distinguishable from <a href="#st_005fdarkglass">st_darkglass</a>, can make
19542
invisible <a href="#it_005fsensor">it_sensor</a>, <a href="#it_005ftrap">it_trap</a> and <a href="#st_005factorimpulse">st_actorimpulse</a> be visible.
19544
<p>All these features are configurable by the constants ‘<samp>SPOT_DEATH</samp>’,
19545
‘<samp>SPOT_HOLLOW</samp>’, ‘<samp>SPOT_LIGHTPASSENGER</samp>’, ‘<samp>SPOT_SENSOR</samp>’,
19546
‘<samp>SPOT_TRAP</samp>’ and ‘<samp>SPOT_ACTORIMPULSE</samp>’. You can set the ‘<samp>state</samp>’
19547
attribute to a sum of these constants that should apply to given glasses. The
19548
default is for backward compatibility
19549
‘<samp>SPOT_DEATH + SPOT_HOLLOW + SPOT_LIGHTPASSENGER</samp>’. When a player wears
19550
several glasses he spots everything that any of the glasses could spot.
19552
<p>Glasses break when a stone is pushed over them. Broken glasses spot nothing.
19554
<p>Glasses result from the laser light transformation of <a href="#it_005fextralife">it_extralife</a>. The
19555
features of such new glasses are determined by the global variable
19556
<a href="#ExtralifeGlasses">ExtralifeGlasses</a>.
19558
<dl compact="compact">
19559
<dt> <b>Attributes:</b></dt>
19560
<dd><dl compact="compact">
19561
<dt> <b>state</b>, <i>values</i>: positive numbers; <i>default</i>: <code>SPOT_DEATH + SPOT_HOLLOW + SPOT_LIGHTPASSENGER</code> See section <a href="#state">state</a></dt>
19562
<dd><p>A sum of the constants ‘<samp>SPOT_DEATH</samp>’, ‘<samp>SPOT_HOLLOW</samp>’,
19563
‘<samp>SPOT_LIGHTPASSENGER</samp>’, ‘<samp>SPOT_SENSOR</samp>’, ‘<samp>SPOT_ACTORIMPULSE</samp>’,
19564
‘<samp>SPOT_TRAP</samp>’. ‘<samp>SPOT_NOTHING</samp>’ is the state of a broken glasses.
19566
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
19567
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
19568
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
19572
<dt> <b>Messages:</b> none</dt>
19573
<dt> <b>Variants:</b></dt>
19574
<dd><dl compact="compact">
19575
<dt> <img src="images/it_glasses.png" alt="images/it_glasses"><p> <b>it_glasses</b> Active glasses item.
19577
<dt> <img src="images/it_glasses_broken.png" alt="images/it_glasses_broken"><p> <b>it_glasses_broken</b> Broken glasses that spot nothing.
19585
<a name="it_005fhammer"></a>
19586
<table cellpadding="1" cellspacing="1" border="0">
19587
<tr><td valign="middle" align="left">[<a href="#it_005fglasses" title="Previous section in reading order"> < </a>]</td>
19588
<td valign="middle" align="left">[<a href="#it_005fkey" title="Next section in reading order"> > </a>]</td>
19589
<td valign="middle" align="left"> </td>
19590
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
19591
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
19592
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
19593
<td valign="middle" align="left"> </td>
19594
<td valign="middle" align="left"> </td>
19595
<td valign="middle" align="left"> </td>
19596
<td valign="middle" align="left"> </td>
19597
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
19598
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
19599
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
19600
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
19602
<a name="it_005fhammer-1"></a>
19603
<h3 class="subsection">8.3.17 it_hammer</h3>
19604
<a name="index-it_005fhammer"></a>
19606
<p>The hammer is used to destroy some stones, see <a href="#Breakable-Stones">Breakable Stones</a> and
19607
<a href="#st_005flightpassenger">st_lightpassenger</a>.
19609
<p>It transforms into <a href="#it_005fsword">it_sword</a> when hit by a laser beam and is itself a
19610
laser transformation result of an <a href="#it_005fsword">it_sword</a> and an ‘<samp>it_coin_m</samp>’
19611
(see section <a href="#it_005fcoin">it_coin</a>).
19613
<p>An hammer that comes into existence on an illuminated grid position will not
19614
transform due to already existing laser beams. But it will transform on the first
19615
additional beam and on laser beams that are switched off and on again.
19617
<p>If another item transforms into an hammer this new hammer will be immune to
19618
further light transformations for a short latency period to avoid unstable
19619
flickering of repeated item transformations.
19621
<dl compact="compact">
19622
<dt> <b>Attributes:</b></dt>
19623
<dd><dl compact="compact">
19624
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
19625
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
19626
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
19630
<dt> <b>Variants:</b></dt>
19631
<dd><dl compact="compact">
19632
<dt> <img src="images/it_hammer.png" alt="images/it_hammer"><p> <b>it_hammer</b> A standard hammer item.
19634
<dt> <img src="images/it_hammer.png" alt="images/it_hammer"><p> <b>it_hammer_new</b> A hammer that is immune to light transformations for a short latency period.
19642
<a name="it_005fkey"></a>
19643
<table cellpadding="1" cellspacing="1" border="0">
19644
<tr><td valign="middle" align="left">[<a href="#it_005fhammer" title="Previous section in reading order"> < </a>]</td>
19645
<td valign="middle" align="left">[<a href="#it_005fmagicwand" title="Next section in reading order"> > </a>]</td>
19646
<td valign="middle" align="left"> </td>
19647
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
19648
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
19649
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
19650
<td valign="middle" align="left"> </td>
19651
<td valign="middle" align="left"> </td>
19652
<td valign="middle" align="left"> </td>
19653
<td valign="middle" align="left"> </td>
19654
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
19655
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
19656
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
19657
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
19659
<a name="it_005fkey-1"></a>
19660
<h3 class="subsection">8.3.18 it_key</h3>
19661
<a name="index-it_005fkey"></a>
19663
<p>A key activates an <a href="#st_005fkey">st_key</a> when inserted by hitting the stone with
19664
the key as first item in the players inventory.
19666
<p>Usually the ‘<samp>code</samp>’ of the key is not visually unveiled. But if you
19667
set ‘<samp>invisible</samp>’ to the value ‘<samp>false</samp>’ the code becomes visible for
19668
number code values ‘<samp>1</samp>’ to ‘<samp>8</samp>’. The code is just visible, when the
19669
key is part of the inventory. This helps the user to distinguish multiple keys
19670
in the inventory and to assign them to the matching <a href="#st_005fkey">st_key</a>s.
19672
<p>An ‘<samp>invisible</samp>’ key reveals its code when being inserted in a matching,
19673
unveiled <a href="#st_005fkey">st_key</a>. The code remains visible, when the user withdraws the
19674
key from the stone and adds it to his inventory.
19676
<dl compact="compact">
19677
<dt> <b>Attributes:</b></dt>
19678
<dd><dl compact="compact">
19679
<dt> <b>code</b>, <i>values</i>: number or string; <i>default</i>: <code>1</code></dt>
19680
<dd><p>The code of a key must match that of an <a href="#st_005fkey">st_key</a> to unlock it.
19682
<dt> <b>invisible</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code></dt>
19683
<dd><p>A visible key unveils its ‘<samp>code</samp>’ by a color spot when being lifted.
19685
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
19686
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
19687
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
19691
<dt> <b>Messages:</b> none</dt>
19692
<dt> <b>Variants:</b></dt>
19693
<dd><dl compact="compact">
19694
<dt> <img src="images/it_key.png" alt="images/it_key"><p> <b>it_key</b>
19701
<a name="it_005fmagicwand"></a>
19702
<table cellpadding="1" cellspacing="1" border="0">
19703
<tr><td valign="middle" align="left">[<a href="#it_005fkey" title="Previous section in reading order"> < </a>]</td>
19704
<td valign="middle" align="left">[<a href="#it_005fpencil" title="Next section in reading order"> > </a>]</td>
19705
<td valign="middle" align="left"> </td>
19706
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
19707
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
19708
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
19709
<td valign="middle" align="left"> </td>
19710
<td valign="middle" align="left"> </td>
19711
<td valign="middle" align="left"> </td>
19712
<td valign="middle" align="left"> </td>
19713
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
19714
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
19715
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
19716
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
19718
<a name="it_005fmagicwand-1"></a>
19719
<h3 class="subsection">8.3.19 it_magicwand</h3>
19720
<a name="index-it_005fmagicwand"></a>
19722
<p>The wizard’s tool, that allows to do all sort of magic things if it is the
19723
wielded item in the player’s inventory:
19726
<li> <a href="#st_005fblur">st_blur</a>, magic - transforms to <a href="#st_005fpassage">st_passage</a>,
19727
</li><li> <a href="#st_005fboulder">st_boulder</a> - changes orientation of a boulder,
19728
</li><li> <a href="#st_005fchess">st_chess</a> - changes the color of a chess stone,
19729
</li><li> <a href="#st_005fghost">st_ghost</a>, greenbrown - transforms to <a href="#st_005fgreenbrown">st_greenbrown</a>,
19730
</li><li> <a href="#st_005fmagic">st_magic</a>, brick - transforms to a <a href="#st_005frawglass">st_rawglass</a>,
19731
</li><li> <a href="#st_005foneway">st_oneway</a> - changes orientation of a oneway,
19732
</li><li> <a href="#st_005fpuzzle">st_puzzle</a> - scrambles blue puzzle stones instead of pushing, causes complete
19733
clusters to explode,
19734
</li><li> <a href="#st_005frubberband">st_rubberband</a> - makes rubberband stones movable,
19735
</li><li> <a href="#st_005fstoneimpulse">st_stoneimpulse</a>, movable - avoid pulsing on pushes.
19738
<dl compact="compact">
19739
<dt> <b>Attributes:</b></dt>
19740
<dd><dl compact="compact">
19741
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
19742
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
19743
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
19747
<dt> <b>Messages:</b> none</dt>
19748
<dt> <b>Action:</b> none</dt>
19749
<dt> <b>Variants:</b></dt>
19750
<dd><dl compact="compact">
19751
<dt> <img src="images/it_magicwand.png" alt="images/it_magicwand"><p> <b>it_magicwand</b>
19759
<a name="it_005fpencil"></a>
19760
<table cellpadding="1" cellspacing="1" border="0">
19761
<tr><td valign="middle" align="left">[<a href="#it_005fmagicwand" title="Previous section in reading order"> < </a>]</td>
19762
<td valign="middle" align="left">[<a href="#it_005fpin" title="Next section in reading order"> > </a>]</td>
19763
<td valign="middle" align="left"> </td>
19764
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
19765
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
19766
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
19767
<td valign="middle" align="left"> </td>
19768
<td valign="middle" align="left"> </td>
19769
<td valign="middle" align="left"> </td>
19770
<td valign="middle" align="left"> </td>
19771
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
19772
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
19773
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
19774
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
19776
<a name="it_005fpencil-1"></a>
19777
<h3 class="subsection">8.3.20 it_pencil</h3>
19778
<a name="index-it_005fpencil"></a>
19780
<p>An item to mark floors and stones.
19782
<p>An activated pencil scratches an <a href="#it_005fcross">it_cross</a> on most floors. As the pencil
19783
gets consumed by this operation the cross takes the pencils identity on
19784
this <a href="#Object-Transformation">Object Transformation</a>. But on <a href="#fl_005fice">fl_ice</a> the pencil makes a small
19785
<a href="#it_005fcrack">it_crack</a> as it is so sharp. On indestructible floors like <a href="#fl_005fabyss">fl_abyss</a>,
19786
<a href="#fl_005fwater">fl_water</a> and <a href="#fl_005fswamp">fl_swamp</a> and on <a href="#fl_005fbridge">fl_bridge</a> the pencil can not
19787
be activated at all. Any existing item on the floor does prevent a pencil
19788
application, too. The actor can only mark a floor if it is on the floor and not
19789
flying. During a jump an actor will just drop the pencil as an item.
19791
<p>On actor hits with a revealed pencil on a <a href="#st_005fflat">st_flat</a> the stones gets marked
19792
burnable. Again the pencil is consumed on this operation. Both the plain and
19793
the movable variants can be marked.
19795
<dl compact="compact">
19796
<dt> <b>Attributes:</b></dt>
19797
<dd><dl compact="compact">
19798
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
19799
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
19800
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
19803
<dt> <b>Messages:</b> none</dt>
19804
<dt> <b>Variants:</b></dt>
19805
<dd><dl compact="compact">
19806
<dt> <img src="images/it_pencil.png" alt="images/it_pencil"><p> <b>it_pencil</b>
19814
<a name="it_005fpin"></a>
19815
<table cellpadding="1" cellspacing="1" border="0">
19816
<tr><td valign="middle" align="left">[<a href="#it_005fpencil" title="Previous section in reading order"> < </a>]</td>
19817
<td valign="middle" align="left">[<a href="#it_005fpipe" title="Next section in reading order"> > </a>]</td>
19818
<td valign="middle" align="left"> </td>
19819
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
19820
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
19821
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
19822
<td valign="middle" align="left"> </td>
19823
<td valign="middle" align="left"> </td>
19824
<td valign="middle" align="left"> </td>
19825
<td valign="middle" align="left"> </td>
19826
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
19827
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
19828
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
19829
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
19831
<a name="it_005fpin-1"></a>
19832
<h3 class="subsection">8.3.21 it_pin</h3>
19833
<a name="index-it_005fpin"></a>
19835
<p>A pin is a friction increasing item that can be used as a crampon on <a href="#fl_005fice">fl_ice</a>.
19836
When it is picked up and is added to the inventory it significantly increases
19837
the floor friction applied to all actors owned by the inventory’s owner.
19839
<p>Pins do just increase friction as long as they are directly part of the
19840
inventory. A pin contained within an <a href="#it_005fbag">it_bag</a>, being part of the inventory,
19841
has no influence on the friction. Two or more pins do not apply more friction
19842
than a single pin. As soon as the last pin is dropped the friction returns
19843
to its standard values.
19845
<dl compact="compact">
19846
<dt> <b>Attributes:</b></dt>
19847
<dd><dl compact="compact">
19848
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
19849
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
19850
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
19853
<dt> <b>Messages:</b> none</dt>
19854
<dt> <b>Variants:</b></dt>
19855
<dd><dl compact="compact">
19856
<dt> <img src="images/it_pin.png" alt="images/it_pin"><p> <b>it_pin</b>
19864
<a name="it_005fpipe"></a>
19865
<table cellpadding="1" cellspacing="1" border="0">
19866
<tr><td valign="middle" align="left">[<a href="#it_005fpin" title="Previous section in reading order"> < </a>]</td>
19867
<td valign="middle" align="left">[<a href="#it_005fpuller" title="Next section in reading order"> > </a>]</td>
19868
<td valign="middle" align="left"> </td>
19869
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
19870
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
19871
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
19872
<td valign="middle" align="left"> </td>
19873
<td valign="middle" align="left"> </td>
19874
<td valign="middle" align="left"> </td>
19875
<td valign="middle" align="left"> </td>
19876
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
19877
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
19878
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
19879
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
19881
<a name="it_005fpipe-1"></a>
19882
<h3 class="subsection">8.3.22 it_pipe</h3>
19883
<a name="index-it_005fpipe"></a>
19885
<p>Pipe items are used to build item transporting pipes connected to an
19886
<a href="#st_005fmail">st_mail</a>.
19888
<p>Pipe items are described by their ‘<samp>connections</samp>’ to neighbor grids. A pipe
19889
is build up of items with fitting connections.
19891
<p>Even though there exist pipe ending items with just one connection there is
19892
currently no known usage of them besides decoration.
19894
<dl compact="compact">
19895
<dt> <b>Attributes:</b></dt>
19896
<dd><dl compact="compact">
19897
<dt> <b>connections</b>, <i>values</i>: string; <i>default</i>: <code>"ew"</code></dt>
19898
<dd><p>Describes the pipe connections to the neighbor grids. The string is a substring of
19899
<code>"nesw"</code> listing the existing connections. The sequence of the sides, north,
19900
east, south, west, is guaranteed on read access but arbitrary on write access.
19901
Currently only pipes with one or two connections do exist.
19903
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
19904
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
19905
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
19909
<dt> <b>Messages:</b> none</dt>
19910
<dt> <b>Action:</b> none</dt>
19911
<dt> <b>Variants:</b></dt>
19912
<dd><dl compact="compact">
19913
<dt> <img src="images/it_pipe_e.png" alt="images/it_pipe_e"><p> <b>it_pipe</b> connections = <code>"ew"</code> The horizontal pipe.
19915
<dt> <img src="images/it_pipe_f.png" alt="images/it_pipe_f"><p> <b>it_pipe_w</b> connections = <code>"w"</code>
19917
<dt> <img src="images/it_pipe_b.png" alt="images/it_pipe_b"><p> <b>it_pipe_s</b> connections = <code>"s"</code>
19919
<dt> <img src="images/it_pipe_d.png" alt="images/it_pipe_d"><p> <b>it_pipe_sw</b> connections = <code>"sw"</code>
19921
<dt> <img src="images/it_pipe.png" alt="images/it_pipe"><p> <b>it_pipe_e</b> connections = <code>"e"</code>
19923
<dt> <img src="images/it_pipe_e.png" alt="images/it_pipe_e"><p> <b>it_pipe_ew</b> connections = <code>"ew"</code> The horizontal pipe.
19925
<dt> <img src="images/it_pipe_c.png" alt="images/it_pipe_c"><p> <b>it_pipe_es</b> connections = <code>"es"</code>
19927
<dt> <img src="images/it_pipe_g.png" alt="images/it_pipe_g"><p> <b>it_pipe_n</b> connections = <code>"n"</code>
19929
<dt> <img src="images/it_pipe_i.png" alt="images/it_pipe_i"><p> <b>it_pipe_nw</b> connections = <code>"nw"</code>
19931
<dt> <img src="images/it_pipe_j.png" alt="images/it_pipe_j"><p> <b>it_pipe_ns</b> connections = <code>"ns"</code> The vertical pipe.
19933
<dt> <img src="images/it_pipe_h.png" alt="images/it_pipe_h"><p><b>it_pipe_ne</b> connections = <code>"ne"</code>
19940
<a name="it_005fpuller"></a>
19941
<table cellpadding="1" cellspacing="1" border="0">
19942
<tr><td valign="middle" align="left">[<a href="#it_005fpipe" title="Previous section in reading order"> < </a>]</td>
19943
<td valign="middle" align="left">[<a href="#it_005fring" title="Next section in reading order"> > </a>]</td>
19944
<td valign="middle" align="left"> </td>
19945
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
19946
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
19947
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
19948
<td valign="middle" align="left"> </td>
19949
<td valign="middle" align="left"> </td>
19950
<td valign="middle" align="left"> </td>
19951
<td valign="middle" align="left"> </td>
19952
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
19953
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
19954
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
19955
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
19957
<a name="it_005fpuller-1"></a>
19958
<h3 class="subsection">8.3.23 it_puller</h3>
19959
<a name="index-it_005fpuller"></a>
19961
<p>A puller item looks like a white arrow. It can be picked up. But when being
19962
dropped it gets activated and whirls around. The actor should leave the grid
19963
immediately as the puller will finally dissolve in a lethal explosion.
19965
<p>But the main purpose of the puller is its ability to pull stones. The arrow
19966
‘<samp>orientation</samp>’ indicates the direction into which a stone will be pulled
19967
when the item is dropped in front. The pull takes place immediately at the end
19968
of the short explosion. It is a full blown stone pull, that will pull others
19969
stones connected to the directly affected stone via <a href="#ot_005fwire">ot_wire</a>, too. With
19970
the explosion the puller item ceases to exist.
19972
<dl compact="compact">
19973
<dt> <b>Attributes:</b></dt>
19974
<dd><dl compact="compact">
19975
<dd><a name="index-orientation"></a>
19977
<dt> <b>orientation</b>, <i>values</i>: <code>NORTH</code>, <code>EAST</code>, <code>SOUTH</code>, <code>WEST</code>; <i>default</i>: <code>WEST</code></dt>
19978
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
19979
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
19980
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
19984
<dt> <b>Messages:</b> none</dt>
19985
<dt> <b>Action:</b> none</dt>
19986
<dt> <b>Variants:</b></dt>
19987
<dd><dl compact="compact">
19988
<dt> <img src="images/it_puller_4.png" alt="images/it_puller_4"><p> <b>it_puller</b> orientation = <code>WEST</code>
19990
<dt> <img src="images/it_puller_4.png" alt="images/it_puller_4"><p> <b>it_puller_w</b> orientation = <code>WEST</code>
19992
<dt> <img src="images/it_puller_3.png" alt="images/it_puller_3"><p> <b>it_puller_s</b> orientation = <code>SOUTH</code>
19994
<dt> <img src="images/it_puller_2.png" alt="images/it_puller_2"><p> <b>it_puller_e</b> orientation = <code>EAST</code>
19996
<dt> <img src="images/it_puller.png" alt="images/it_puller"><p> <b>it_puller_n</b> orientation = <code>NORTH</code>
20003
<a name="it_005fring"></a>
20004
<table cellpadding="1" cellspacing="1" border="0">
20005
<tr><td valign="middle" align="left">[<a href="#it_005fpuller" title="Previous section in reading order"> < </a>]</td>
20006
<td valign="middle" align="left">[<a href="#it_005frubberband" title="Next section in reading order"> > </a>]</td>
20007
<td valign="middle" align="left"> </td>
20008
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
20009
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
20010
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
20011
<td valign="middle" align="left"> </td>
20012
<td valign="middle" align="left"> </td>
20013
<td valign="middle" align="left"> </td>
20014
<td valign="middle" align="left"> </td>
20015
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
20016
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
20017
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
20018
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
20020
<a name="it_005fring-1"></a>
20021
<h3 class="subsection">8.3.24 it_ring</h3>
20022
<a name="index-it_005fring"></a>
20024
<p>The ring is a magic position exchange item. On activation the ring gets dropped
20025
onto the grid and the actor gets warped either to the actors respawn position
20026
or to the position of another actor that is warped to the initiators position in
20029
<p>Note that this object is currently just defined in the following cases:
20032
<li> just one arbitrary actor owned by player ‘<samp>YIN</samp>’ - the actor gets
20033
warped to its respawn position.
20034
</li><li> just an <a href="#ac_005fmarble">ac_marble</a>_black owned by player ‘<samp>YIN</samp>’ and an
20035
<a href="#ac_005fmarble">ac_marble</a>_white owned by player ‘<samp>YANG</samp>’ - both actors exchange their
20039
<p>Providing a ring in any other case will likely cause incompatibilities with
20040
future Enigma versions.
20042
<dl compact="compact">
20043
<dt> <b>Attributes:</b></dt>
20044
<dd><dl compact="compact">
20045
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
20046
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
20047
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
20050
<dt> <b>Messages:</b> none</dt>
20051
<dt> <b>Variants:</b></dt>
20052
<dd><dl compact="compact">
20053
<dt> <img src="images/it_ring.png" alt="images/it_ring"><p> <b>it_ring</b>
20061
<a name="it_005frubberband"></a>
20062
<table cellpadding="1" cellspacing="1" border="0">
20063
<tr><td valign="middle" align="left">[<a href="#it_005fring" title="Previous section in reading order"> < </a>]</td>
20064
<td valign="middle" align="left">[<a href="#it_005fseed" title="Next section in reading order"> > </a>]</td>
20065
<td valign="middle" align="left"> </td>
20066
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
20067
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
20068
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
20069
<td valign="middle" align="left"> </td>
20070
<td valign="middle" align="left"> </td>
20071
<td valign="middle" align="left"> </td>
20072
<td valign="middle" align="left"> </td>
20073
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
20074
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
20075
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
20076
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
20078
<a name="it_005frubberband-1"></a>
20079
<h3 class="subsection">8.3.25 it_rubberband</h3>
20080
<a name="index-it_005frubberband"></a>
20082
<p>A portable <a href="#ot_005frubberband">ot_rubberband</a> that gets connected to the bearer on activation.
20084
<p>As the rubberband’s ‘<samp>anchor1</samp>’ is given by the activator itself, just the
20085
‘<samp>anchor2</samp>’ reference can be configured by this item. It can be any stone
20086
or actor reference.
20088
<p>Of special interest may be the usage of dynamic nearest object references
20089
(see section <a href="#Object-Naming">Object Naming</a>). A marble will be able to connect to the nearest
20090
object out of a given group.
20092
<p>If ‘<samp>anchor2</samp>’ does not exist, the ‘<samp>it_rubberband</samp>’ will be dropped.
20094
<p>The other attributes describe the force and length parameters of the
20095
<a href="#ot_005frubberband">ot_rubberband</a>, that will be created on application of the item. In fact
20096
the item’s identity will be transferred to its successor
20097
(see section <a href="#Object-Transformation">Object Transformation</a>). After creation of the life rubberband the
20098
action message will be send to the target. Note that it is actually the
20099
<a href="#ot_005frubberband">ot_rubberband</a> as the successor that sends the message.
20101
<dl compact="compact">
20102
<dt> <b>Attributes:</b></dt>
20104
<dl compact="compact">
20105
<dt> <b>anchor2</b> <i>values</i>: actor or stone object; <i>default</i>: <code>nil</code></dt>
20106
<dd><p>Object reference or name of an actor or a stone that the rubber will be
20107
connected to. The reference will be evaluated on item activation.
20109
<dt> <b>strength</b> <i>values</i>: number; <i>default</i>: <code>10.0</code></dt>
20110
<dd><p>The force strength.
20112
<dt> <b>length</b> <i>values</i>: positive number or <code>AUTOLENGTH</code>; <i>default</i>: <code>1.0</code></dt>
20113
<dd><p>The natural length above which forces are applied.
20115
<dt> <b>threshold</b> <i>values</i>: positive number or zero; <i>default</i>: <code>0.0</code></dt>
20116
<dd><p>The length smaller than the natural length below which inverted forces are applied.
20118
<dt> <b>min</b> <i>values</i>: positive number or zero; <i>default</i>: <code>0.0</code></dt>
20119
<dd><p>The minimum length at which actors bounce.
20121
<dt> <b>max</b> <i>values</i>: positive number or zero; <i>default</i>: <code>0.0</code></dt>
20122
<dd><p>The maximum length at which actors bounce.
20124
<dt> <b>scissor</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
20125
<dd><p>Rubberband cutting behaviour on connection. On a value of <code>true</code> the
20126
activation of this rubberband will cut all existing rubberbands which are
20127
currently connected to the activating actor.
20129
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
20130
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
20131
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
20135
<dt> <b>Messages:</b> none</dt>
20136
<dt> <b>Action:</b> See section <a href="#target">target</a>, See section <a href="#action">action</a></dt>
20137
<dd><p>On successful activation of this item the action message is send with a value of
20138
‘<samp>true</samp>’. Note that the parameter ‘<samp>sender</samp>’ will report the new
20139
<a href="#ot_005frubberband">ot_rubberband</a>.
20142
<dt> <b>Variants:</b></dt>
20143
<dd><dl compact="compact">
20144
<dt> <img src="images/it_rubberband.png" alt="images/it_rubberband"><p> <b>it_rubberband</b>
20152
<a name="it_005fseed"></a>
20153
<table cellpadding="1" cellspacing="1" border="0">
20154
<tr><td valign="middle" align="left">[<a href="#it_005frubberband" title="Previous section in reading order"> < </a>]</td>
20155
<td valign="middle" align="left">[<a href="#it_005fspade" title="Next section in reading order"> > </a>]</td>
20156
<td valign="middle" align="left"> </td>
20157
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
20158
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
20159
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
20160
<td valign="middle" align="left"> </td>
20161
<td valign="middle" align="left"> </td>
20162
<td valign="middle" align="left"> </td>
20163
<td valign="middle" align="left"> </td>
20164
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
20165
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
20166
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
20167
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
20169
<a name="it_005fseed-1"></a>
20170
<h3 class="subsection">8.3.26 it_seed</h3>
20171
<a name="index-it_005fseed"></a>
20173
<p>Stone seeds are items that start growing and finally transforming to stones
20174
on activation. There are different ‘<samp>flavor</samp>’s of seeds that all look the
20175
same, but do grow to different stones. While a <code>"wood"</code> seed grows to an
20176
<a href="#st_005fbox">st_box</a>_wood, a <code>"hay"</code> seed grows to an <a href="#st_005fbox">st_box</a>_hay, a
20177
<code>"greenbrown"</code> seed grows to an unmovable <a href="#st_005fgreenbrown">st_greenbrown</a> and a
20178
<code>"volcano"</code> seed grows to an active <a href="#st_005fvolcano">st_volcano</a>.
20180
<p>Seeds can be dropped on any item free grid position, even beneath another stone
20181
that will get killed by the seed successor stone.
20183
<p>Seeds get automatically activated when being dropped, when hit by a laser beam
20184
or a stone being pushed on them. You can activate them by ‘<samp>grow</samp>’ and
20185
‘<samp>signal</samp>’ messages, too.
20187
<p>The identity of the seed gets transferred to the emerging stone including the
20188
attribute ‘<samp>secure</samp>’.
20190
<p>The only method of handling seeds without activation are containment within a
20191
<a href="#it_005fbag">it_bag</a> or sending them via <a href="#st_005fmail">st_mail</a> to a destination grid.
20193
<dl compact="compact">
20194
<dt> <b>Attributes:</b></dt>
20195
<dd><dl compact="compact">
20196
<dt> <b>flavor</b>, <i>values</i>: <code>"wood"</code>, <code>"hay"</code>, <code>"greenbrown"</code>, <code>"volcano"</code>; <i>default</i>: <code>"wood"</code></dt>
20197
<dd><p>The type of the resulting stone.
20199
<dt> <b>secure</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
20200
<dd><p>This attribute is transferred to the resulting stone. The <a href="#st_005fvolcano">st_volcano</a> and
20201
<a href="#st_005fbox">st_box</a> make use of it.
20203
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
20204
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
20205
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
20209
<dt> <b>Messages:</b></dt>
20210
<dd><dl compact="compact">
20211
<dt> <b>grow</b></dt>
20212
<dd><p>Start growing the seed.
20214
<dt> <b>signal</b> See section <a href="#signal">signal</a></dt>
20215
<dd><p>Start growing the seed.
20220
<dt> <b>Variants:</b></dt>
20221
<dd><dl compact="compact">
20222
<dt> <img src="images/it_seed.png" alt="images/it_seed"><p> <b>it_seed</b> flavor = <code>"wood"</code>
20224
<dt> <img src="images/it_seed.png" alt="images/it_seed"><p> <b>it_seed_wood</b> flavor = <code>"wood"</code>
20226
<dt> <img src="images/it_seed.png" alt="images/it_seed"><p> <b>it_seed_hay</b> flavor = <code>"hay"</code>
20228
<dt> <img src="images/it_seed.png" alt="images/it_seed"><p> <b>it_seed_greenbrown</b> flavor = <code>"greenbrown"</code>
20230
<dt> <img src="images/it_seed.png" alt="images/it_seed"><p> <b>it_seed_volcano</b> flavor = <code>"volcano"</code>
20238
<a name="it_005fspade"></a>
20239
<table cellpadding="1" cellspacing="1" border="0">
20240
<tr><td valign="middle" align="left">[<a href="#it_005fseed" title="Previous section in reading order"> < </a>]</td>
20241
<td valign="middle" align="left">[<a href="#it_005fspoon" title="Next section in reading order"> > </a>]</td>
20242
<td valign="middle" align="left"> </td>
20243
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
20244
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
20245
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
20246
<td valign="middle" align="left"> </td>
20247
<td valign="middle" align="left"> </td>
20248
<td valign="middle" align="left"> </td>
20249
<td valign="middle" align="left"> </td>
20250
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
20251
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
20252
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
20253
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
20255
<a name="it_005fspade-1"></a>
20256
<h3 class="subsection">8.3.27 it_spade</h3>
20257
<a name="index-it_005fspade"></a>
20259
<p>A spade activated while being on the grid position of an <a href="#it_005fmeditation">it_meditation</a>
20260
will flatten this by one degree and will finally eliminate it completely.
20262
<dl compact="compact">
20263
<dt> <b>Attributes:</b></dt>
20264
<dd><dl compact="compact">
20265
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
20266
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
20267
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
20270
<dt> <b>Messages:</b> none</dt>
20271
<dt> <b>Variants:</b></dt>
20272
<dd><dl compact="compact">
20273
<dt> <img src="images/it_spade.png" alt="images/it_spade"><p> <b>it_spade</b>
20281
<a name="it_005fspoon"></a>
20282
<table cellpadding="1" cellspacing="1" border="0">
20283
<tr><td valign="middle" align="left">[<a href="#it_005fspade" title="Previous section in reading order"> < </a>]</td>
20284
<td valign="middle" align="left">[<a href="#it_005fspring" title="Next section in reading order"> > </a>]</td>
20285
<td valign="middle" align="left"> </td>
20286
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
20287
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
20288
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
20289
<td valign="middle" align="left"> </td>
20290
<td valign="middle" align="left"> </td>
20291
<td valign="middle" align="left"> </td>
20292
<td valign="middle" align="left"> </td>
20293
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
20294
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
20295
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
20296
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
20298
<a name="it_005fspoon-1"></a>
20299
<h3 class="subsection">8.3.28 it_spoon</h3>
20300
<a name="index-it_005fspoon"></a>
20302
<p>Dropping a spoon is a medieval synonym for dying. The poor people had nothing
20303
besides a wooden spoon. They never dropped it. They had to peg out to give away
20306
<p>Thus an Enigma spoon shatters the actor who drops it. When a player owns
20307
multiple actors just the active one gets killed. This is an essential difference
20308
to pressing F3, what shatters all actors of all players. When providing a spoon
20309
you may sometimes want to revoke the ability to commit a global suicide by
20310
pressing F3. You can do this by setting the global variable <a href="#AllowSuicide">AllowSuicide</a>
20311
to ‘<samp>false</samp>’.
20313
<dl compact="compact">
20314
<dt> <b>Attributes:</b></dt>
20315
<dd><dl compact="compact">
20316
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
20317
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
20318
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
20321
<dt> <b>Messages:</b> none</dt>
20322
<dt> <b>Variants:</b></dt>
20323
<dd><dl compact="compact">
20324
<dt> <img src="images/it_spoon.png" alt="images/it_spoon"><p> <b>it_spoon</b>
20332
<a name="it_005fspring"></a>
20333
<table cellpadding="1" cellspacing="1" border="0">
20334
<tr><td valign="middle" align="left">[<a href="#it_005fspoon" title="Previous section in reading order"> < </a>]</td>
20335
<td valign="middle" align="left">[<a href="#it_005fsurprise" title="Next section in reading order"> > </a>]</td>
20336
<td valign="middle" align="left"> </td>
20337
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
20338
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
20339
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
20340
<td valign="middle" align="left"> </td>
20341
<td valign="middle" align="left"> </td>
20342
<td valign="middle" align="left"> </td>
20343
<td valign="middle" align="left"> </td>
20344
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
20345
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
20346
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
20347
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
20349
<a name="it_005fspring-1"></a>
20350
<h3 class="subsection">8.3.29 it_spring</h3>
20351
<a name="index-it_005fspring"></a>
20353
<p>Springs let <a href="#Flying-Actors">Flying Actors</a> jump on activation.
20355
<p>There are two types of portable springs. A thin one that is kept in the
20356
inventory on activation and can thus be used multiple times in sequence. And
20357
a thick, condensed one that gets dropped on activation. A static jump
20358
facility that can not be picked up by an actor is the <a href="#it_005fspringboard">it_springboard</a>.
20360
<dl compact="compact">
20361
<dt> <b>Attributes:</b></dt>
20362
<dd><dl compact="compact">
20363
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
20364
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
20365
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
20368
<dt> <b>Messages:</b> none</dt>
20369
<dt> <b>Variants:</b></dt>
20370
<dd><dl compact="compact">
20371
<dt> <img src="images/it_spring.png" alt="images/it_spring"><p> <b>it_spring</b>
20373
<dt> <img src="images/it_spring.png" alt="images/it_spring"><p> <b>it_spring_keep</b>
20375
<dt> <img src="images/it_spring_2.png" alt="images/it_spring_2"><p> <b>it_spring_drop</b>
20382
<a name="it_005fsurprise"></a>
20383
<table cellpadding="1" cellspacing="1" border="0">
20384
<tr><td valign="middle" align="left">[<a href="#it_005fspring" title="Previous section in reading order"> < </a>]</td>
20385
<td valign="middle" align="left">[<a href="#it_005fsword" title="Next section in reading order"> > </a>]</td>
20386
<td valign="middle" align="left"> </td>
20387
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
20388
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
20389
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
20390
<td valign="middle" align="left"> </td>
20391
<td valign="middle" align="left"> </td>
20392
<td valign="middle" align="left"> </td>
20393
<td valign="middle" align="left"> </td>
20394
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
20395
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
20396
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
20397
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
20399
<a name="it_005fsurprise-1"></a>
20400
<h3 class="subsection">8.3.30 it_surprise</h3>
20401
<a name="index-it_005fsurprise"></a>
20403
<p>An item that transforms into a random item as soon as the player drops it.
20405
<p>The replacement item is a random one out of a given selection. You can set
20406
the ‘<samp>selection</samp>’ attribute with tokens of strings. Every string needs either
20407
to be an <a href="#Object-Kind">Object Kind</a> or a tile key prefixed by an equal sign ‘<samp>=</samp>’.
20409
<table><tr><td> </td><td><pre class="example">ti["m"] = {"it_magicwand"}
20410
ti["e"] = {"it_extralife"}
20411
ti["s"] = {"it_surprise", selection={"it_seed", "=m", "=e", "=e"}}
20412
</pre></td></tr></table>
20414
<p>The replacement item is randomly chosen out of the given selection. By listing
20415
an item several times you can take influence on the likelihood.
20417
<p>The tile declarations referenced by a key may even contain objects besides
20418
items. But you should make rare and proper usage of this feature.
20420
<p>The surprise item will perform its action after being dropped but before
20421
being replaced. You can use this action to modify the selection or to
20422
set objects on your own.
20424
<p>The surprise item is killed by any replacement item set to the grid position.
20425
If your selection does not resolve to an item you may need to add ‘<samp>"it_nil"</samp>’
20426
to the replacement tile declaration.
20428
<dl compact="compact">
20429
<dt> <b>Attributes:</b></dt>
20430
<dd><dl compact="compact">
20431
<dt> <b>selection</b>, <i>values</i>: tokens of item kinds and tile keys; <i>default</i>: <code>{"it_umbrella", "it_spring_keep", "it_dynamite", "it_coffee", "it_hammer"}</code></dt>
20432
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
20433
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
20434
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
20438
<dt> <b>Messages:</b></dt>
20439
<dt> <b>Action:</b> See section <a href="#target">target</a>, See section <a href="#action">action</a></dt>
20440
<dt> <b>Variants:</b></dt>
20441
<dd><dl compact="compact">
20442
<dt> <img src="images/it_surprise.png" alt="images/it_surprise"><p> <b>it_surprise</b>
20450
<a name="it_005fsword"></a>
20451
<table cellpadding="1" cellspacing="1" border="0">
20452
<tr><td valign="middle" align="left">[<a href="#it_005fsurprise" title="Previous section in reading order"> < </a>]</td>
20453
<td valign="middle" align="left">[<a href="#it_005fumbrella" title="Next section in reading order"> > </a>]</td>
20454
<td valign="middle" align="left"> </td>
20455
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
20456
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
20457
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
20458
<td valign="middle" align="left"> </td>
20459
<td valign="middle" align="left"> </td>
20460
<td valign="middle" align="left"> </td>
20461
<td valign="middle" align="left"> </td>
20462
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
20463
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
20464
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
20465
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
20467
<a name="it_005fsword-1"></a>
20468
<h3 class="subsection">8.3.31 it_sword</h3>
20469
<a name="index-it_005fsword"></a>
20471
<p>The sword is used to neutralize <a href="#st_005fknight">st_knight</a>.
20473
<p>It transforms into <a href="#it_005fhammer">it_hammer</a> when hit by a laser beam and is itself a
20474
laser transformation result of an <a href="#it_005fhammer">it_hammer</a>.
20476
<p>A sword that comes into existence on an illuminated grid position will not
20477
transform due to already existing laser beams. But it will transform on the first
20478
additional beam and on laser beams that are switched off and on again.
20480
<p>If another item transforms into a sword this new sword will be immune to
20481
further light transformations for a short latency period to avoid unstable
20482
flickering of repeated item transformations.
20484
<dl compact="compact">
20485
<dt> <b>Attributes:</b></dt>
20486
<dd><dl compact="compact">
20487
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
20488
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
20489
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
20493
<dt> <b>Variants:</b></dt>
20494
<dd><dl compact="compact">
20495
<dt> <img src="images/it_sword.png" alt="images/it_sword"><p> <b>it_sword</b> A standard sword item.
20497
<dt> <img src="images/it_sword.png" alt="images/it_sword"><p> <b>it_sword_new</b> A sword that is immune to light transformations for a short latency period.
20505
<a name="it_005fumbrella"></a>
20506
<table cellpadding="1" cellspacing="1" border="0">
20507
<tr><td valign="middle" align="left">[<a href="#it_005fsword" title="Previous section in reading order"> < </a>]</td>
20508
<td valign="middle" align="left">[<a href="#it_005fweight" title="Next section in reading order"> > </a>]</td>
20509
<td valign="middle" align="left"> </td>
20510
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
20511
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
20512
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
20513
<td valign="middle" align="left"> </td>
20514
<td valign="middle" align="left"> </td>
20515
<td valign="middle" align="left"> </td>
20516
<td valign="middle" align="left"> </td>
20517
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
20518
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
20519
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
20520
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
20522
<a name="it_005fumbrella-1"></a>
20523
<h3 class="subsection">8.3.32 it_umbrella</h3>
20524
<a name="index-it_005fumbrella"></a>
20526
<p>An activated umbrella temporarily protects a marble from <a href="#st_005fdeath">st_death</a>,
20527
<a href="#st_005fknight">st_knight</a>, <a href="#st_005fthief">st_thief</a>, <a href="#fl_005fabyss">fl_abyss</a>, <a href="#fl_005fwater">fl_water</a>,
20528
<a href="#fl_005fswamp">fl_swamp</a>, <a href="#fl_005fthief">fl_thief</a>, <a href="#it_005fdeath">it_death</a>, <a href="#it_005ftrap">it_trap</a>,
20529
broken <a href="#it_005fbottle">it_bottle</a>, explosions, moving stones and all other internal
20530
‘<samp>shatter</samp>’ and ‘<samp>fall</samp>’ events; in other words, from all lethal
20531
situations and thieves. The protection lasts for 10 seconds. Multiple umbrellas
20532
activated in sequence will prolong the protection period.
20534
<p>An umbrella gets destroyed when hit by a laser beam and is itself a
20535
laser transformation result of an ‘<samp>it_coin_s</samp>’(see section <a href="#it_005fcoin">it_coin</a>).
20537
<p>An umbrella that comes into existence on an illuminated grid position will not
20538
be destroyed due to already existing laser beams. But it will be destroyed on
20539
the first additional beam and on laser beams that are switched off and on again.
20541
<p>If another item transforms into an umbrella this new umbrella will be immune to
20542
light destruction for a short latency period to avoid repeated item
20545
<dl compact="compact">
20546
<dt> <b>Attributes:</b></dt>
20547
<dd><dl compact="compact">
20548
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
20549
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
20550
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
20554
<dt> <b>Variants:</b></dt>
20555
<dd><dl compact="compact">
20556
<dt> <img src="images/it_umbrella.png" alt="images/it_umbrella"><p> <b>it_umbrella</b> A standard umbrella item.
20558
<dt> <img src="images/it_umbrella.png" alt="images/it_umbrella"><p> <b>it_umbrella_new</b> An umbrella that is immune to light destruction for a short latency period.
20566
<a name="it_005fweight"></a>
20567
<table cellpadding="1" cellspacing="1" border="0">
20568
<tr><td valign="middle" align="left">[<a href="#it_005fumbrella" title="Previous section in reading order"> < </a>]</td>
20569
<td valign="middle" align="left">[<a href="#it_005fwrench" title="Next section in reading order"> > </a>]</td>
20570
<td valign="middle" align="left"> </td>
20571
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
20572
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
20573
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
20574
<td valign="middle" align="left"> </td>
20575
<td valign="middle" align="left"> </td>
20576
<td valign="middle" align="left"> </td>
20577
<td valign="middle" align="left"> </td>
20578
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
20579
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
20580
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
20581
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
20583
<a name="it_005fweight-1"></a>
20584
<h3 class="subsection">8.3.33 it_weight</h3>
20585
<a name="index-it_005fweight"></a>
20587
<p>A weight is an item with a mass, that defaults to the mass of 10 <a href="#ac_005fmarble">ac_marble</a>s.
20588
When it is picked up it is added to the inventory and increases the mass of
20589
all actors owned by the inventory’s owner.
20591
<p>Weights can easily be picked up, but the player can not drop them. Just indirect
20592
methods like hitting <a href="#st_005fmail">st_mail</a>, <a href="#st_005fthief">st_thief</a> or crossing a <a href="#fl_005fthief">fl_thief</a>
20593
may remove this item from the inventory.
20595
<p>The inventories mass is always updated to the mass of all weights kept in the
20596
inventory or contained in any <a href="#it_005fbag">it_bag</a> contained in the inventory.
20598
<dl compact="compact">
20599
<dt> <b>Attributes:</b> none</dt>
20600
<dd><dl compact="compact">
20601
<dt> <b>mass</b> <i>values</i>: positive float number; <i>default</i>: <code>+10.0</code></dt>
20602
<dd><p>Mass unit is the mass of an <a href="#ac_005fmarble">ac_marble</a>
20604
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
20605
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
20606
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
20610
<dt> <b>Messages:</b> none</dt>
20611
<dt> <b>Variants:</b></dt>
20612
<dd><dl compact="compact">
20613
<dt> <img src="images/it_weight.png" alt="images/it_weight"><p> <b>it_weight</b>
20621
<a name="it_005fwrench"></a>
20622
<table cellpadding="1" cellspacing="1" border="0">
20623
<tr><td valign="middle" align="left">[<a href="#it_005fweight" title="Previous section in reading order"> < </a>]</td>
20624
<td valign="middle" align="left">[<a href="#it_005fyinyang" title="Next section in reading order"> > </a>]</td>
20625
<td valign="middle" align="left"> </td>
20626
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
20627
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
20628
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
20629
<td valign="middle" align="left"> </td>
20630
<td valign="middle" align="left"> </td>
20631
<td valign="middle" align="left"> </td>
20632
<td valign="middle" align="left"> </td>
20633
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
20634
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
20635
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
20636
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
20638
<a name="it_005fwrench-1"></a>
20639
<h3 class="subsection">8.3.34 it_wrench</h3>
20640
<a name="index-it_005fwrench"></a>
20642
<p>A wrench wielded as first item in the players inventory causes some objects
20643
to react on actor hits. An <a href="#st_005frotator">st_rotator</a> changes its turning direction.
20644
A green <a href="#st_005fturnstile">st_turnstile</a> rotates backwards when hit. An <a href="#st_005fwindow">st_window</a>
20645
face pushed with an wrench will swap to the opposite side of the stone if
20648
<dl compact="compact">
20649
<dt> <b>Attributes:</b></dt>
20650
<dd><dl compact="compact">
20651
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
20652
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
20653
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
20656
<dt> <b>Messages:</b> none</dt>
20657
<dt> <b>Variants:</b></dt>
20658
<dd><dl compact="compact">
20659
<dt> <img src="images/it_wrench.png" alt="images/it_wrench"><p> <b>it_wrench</b>
20667
<a name="it_005fyinyang"></a>
20668
<table cellpadding="1" cellspacing="1" border="0">
20669
<tr><td valign="middle" align="left">[<a href="#it_005fwrench" title="Previous section in reading order"> < </a>]</td>
20670
<td valign="middle" align="left">[<a href="#Static-Items" title="Next section in reading order"> > </a>]</td>
20671
<td valign="middle" align="left"> </td>
20672
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
20673
<td valign="middle" align="left">[<a href="#Liftable-Items" title="Up section"> Up </a>]</td>
20674
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
20675
<td valign="middle" align="left"> </td>
20676
<td valign="middle" align="left"> </td>
20677
<td valign="middle" align="left"> </td>
20678
<td valign="middle" align="left"> </td>
20679
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
20680
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
20681
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
20682
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
20684
<a name="it_005fyinyang-1"></a>
20685
<h3 class="subsection">8.3.35 it_yinyang</h3>
20686
<a name="index-it_005fyinyang"></a>
20688
<p>A special switch that allows the user to toggle the <a href="#Player-and-Inventory">Player and Inventory</a>
20689
between <code>YIN</code> and <code>YANG</code>.
20691
<p>On activation this item does not get dropped but remains unchanged in the
20694
<p>If a level has been declared to be a full blown two player network level in
20695
<a href="#g_t_003cmodes_003e"><modes></a>, but is currently played on a single computer both players
20696
get automatically an yinyang item added to their inventory to allow all actors
20697
to be controlled at every point of time.
20699
<dl compact="compact">
20700
<dt> <b>Attributes:</b></dt>
20701
<dd><dl compact="compact">
20702
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
20703
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
20704
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
20707
<dt> <b>Messages:</b> none</dt>
20708
<dt> <b>Variants:</b></dt>
20709
<dd><dl compact="compact">
20710
<dt> <img src="images/it_yinyang.png" alt="images/it_yinyang"><p> <b>it_yinyang</b>
20718
<a name="Static-Items"></a>
20719
<table cellpadding="1" cellspacing="1" border="0">
20720
<tr><td valign="middle" align="left">[<a href="#it_005fyinyang" title="Previous section in reading order"> < </a>]</td>
20721
<td valign="middle" align="left">[<a href="#it_005fblocker" title="Next section in reading order"> > </a>]</td>
20722
<td valign="middle" align="left"> </td>
20723
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
20724
<td valign="middle" align="left">[<a href="#Item-Objects" title="Up section"> Up </a>]</td>
20725
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
20726
<td valign="middle" align="left"> </td>
20727
<td valign="middle" align="left"> </td>
20728
<td valign="middle" align="left"> </td>
20729
<td valign="middle" align="left"> </td>
20730
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
20731
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
20732
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
20733
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
20735
<a name="Static-Items-1"></a>
20736
<h2 class="section">8.4 Static Items</h2>
20738
<table class="menu" border="0" cellspacing="0">
20739
<tr><td align="left" valign="top"><a href="#it_005fblocker">8.4.1 it_blocker</a></td><td> </td><td align="left" valign="top"> Shrinked Blocker Stone
20741
<tr><td align="left" valign="top"><a href="#it_005fbomb">8.4.2 it_bomb</a></td><td> </td><td align="left" valign="top"> Big Explosive Charge
20743
<tr><td align="left" valign="top"><a href="#it_005fburnable">8.4.3 it_burnable</a></td><td> </td><td align="left" valign="top"> Fire State
20745
<tr><td align="left" valign="top"><a href="#it_005fcrack">8.4.4 it_crack</a></td><td> </td><td align="left" valign="top"> Crack in the Floor
20747
<tr><td align="left" valign="top"><a href="#it_005fcross">8.4.5 it_cross</a></td><td> </td><td align="left" valign="top"> Floor Switch for patient Actors
20749
<tr><td align="left" valign="top"><a href="#it_005fdeath">8.4.6 it_death</a></td><td> </td><td align="left" valign="top"> Impassable grid blocker
20751
<tr><td align="left" valign="top"><a href="#it_005fexplosion">8.4.7 it_explosion</a></td><td> </td><td align="left" valign="top"> Short Explosion Animation
20753
<tr><td align="left" valign="top"><a href="#it_005flandmine">8.4.8 it_landmine</a></td><td> </td><td align="left" valign="top"> Buried Explosive
20755
<tr><td align="left" valign="top"><a href="#it_005flaserbeam">8.4.9 it_laserbeam</a></td><td> </td><td align="left" valign="top"> Laser Beam
20757
<tr><td align="left" valign="top"><a href="#it_005fmagnet">8.4.10 it_magnet</a></td><td> </td><td align="left" valign="top"> Actor attracting Magnet
20759
<tr><td align="left" valign="top"><a href="#it_005fmeditation">8.4.11 it_meditation</a></td><td> </td><td align="left" valign="top"> Hills and Hollows
20761
<tr><td align="left" valign="top"><a href="#it_005fsensor">8.4.12 it_sensor</a></td><td> </td><td align="left" valign="top"> Floor Switch for passing Actors
20763
<tr><td align="left" valign="top"><a href="#it_005fshogun">8.4.13 it_shogun</a></td><td> </td><td align="left" valign="top"> Dot for Shogun Stones
20765
<tr><td align="left" valign="top"><a href="#it_005fspringboard">8.4.14 it_springboard</a></td><td> </td><td align="left" valign="top"> Static Spring
20767
<tr><td align="left" valign="top"><a href="#it_005fsquashed">8.4.15 it_squashed</a></td><td> </td><td align="left" valign="top"> Remnant of squashed Fruits
20769
<tr><td align="left" valign="top"><a href="#it_005fstrip">8.4.16 it_strip</a></td><td> </td><td align="left" valign="top"> Narrow Bridge
20771
<tr><td align="left" valign="top"><a href="#it_005ftrap">8.4.17 it_trap</a></td><td> </td><td align="left" valign="top"> Invisible, covered Abyss
20773
<tr><td align="left" valign="top"><a href="#it_005ftrigger">8.4.18 it_trigger</a></td><td> </td><td align="left" valign="top"> Floor Switch for Actors and Stones
20775
<tr><td align="left" valign="top"><a href="#it_005fvortex">8.4.19 it_vortex</a></td><td> </td><td align="left" valign="top"> Teleport of Marbles
20777
<tr><td align="left" valign="top"><a href="#it_005fwormhole">8.4.20 it_wormhole</a></td><td> </td><td align="left" valign="top"> Teleport of Actors
20783
<a name="it_005fblocker"></a>
20784
<table cellpadding="1" cellspacing="1" border="0">
20785
<tr><td valign="middle" align="left">[<a href="#Static-Items" title="Previous section in reading order"> < </a>]</td>
20786
<td valign="middle" align="left">[<a href="#it_005fbomb" title="Next section in reading order"> > </a>]</td>
20787
<td valign="middle" align="left"> </td>
20788
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
20789
<td valign="middle" align="left">[<a href="#Static-Items" title="Up section"> Up </a>]</td>
20790
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
20791
<td valign="middle" align="left"> </td>
20792
<td valign="middle" align="left"> </td>
20793
<td valign="middle" align="left"> </td>
20794
<td valign="middle" align="left"> </td>
20795
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
20796
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
20797
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
20798
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
20800
<a name="it_005fblocker-1"></a>
20801
<h3 class="subsection">8.4.1 it_blocker</h3>
20802
<a name="index-it_005fblocker"></a>
20804
<p>A door like object that grows to <a href="#st_005fblocker">st_blocker</a> when an <a href="#st_005fboulder">st_boulder</a>
20805
passes. When the boulder did shrink and pass the blocker again it stays in its
20806
item like open state until it is passed again by a boulder which causes it to
20807
grow again to a blocker stone.
20809
<p>It fully supports the messages of any door like object and can be opened and
20810
closed by any switch like object. Note that due to the transformation between
20811
stone and item during opening and closing you should name the blocker
20812
(see section <a href="#name">name</a>) and address the blocker by this name. The complete identity
20813
with all attributes including any user attributes will be transferred between
20814
stone and item. E.g. <code>{it_switch, target="myblocker", action="toggle"}</code>
20815
will open and close a given blocker multiple times.
20817
<p>Note that the blocker is the only door object that allows a stone to be pushed
20818
through. Just boulders cause the growing. Any other stone keeps the open state.
20820
<p>Another unique door feature is the closing of a blocker item caused by a
20821
passing actor if the autoclose attribute is set to true.
20823
<p>Note that a dropped <a href="#it_005fbrake">it_brake</a> destroys this item.
20825
<dl compact="compact">
20826
<dt> <b>Attributes:</b></dt>
20828
<dl compact="compact">
20829
<dt> <b>state</b>, <i>values</i>: <code>0</code>, <code>1</code>; <i>default</i>: <code>1</code> See section <a href="#state">state</a></dt>
20830
<dd><p>Use CLOSED and OPEN macros as values. The item represents the open state
20831
and will always return state 1. But you can set its state what is equivalent
20832
to sending an open message in case of value 1 and a close message in case of
20835
<a name="index-autoclose"></a>
20837
<dt> <b>autoclose</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
20838
<dd><p>A true value causes any actor passing this item to close and grow the blocker.
20841
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
20842
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
20843
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
20847
<dt> <b>Messages:</b></dt>
20849
<dl compact="compact">
20850
<dt> <b>signal</b> See section <a href="#signal">signal</a></dt>
20851
<dd><p>A signal of value 1 sends an open message, a signal of value 0 sends a close
20854
<dt> <b>toggle</b> See section <a href="#toggle">toggle</a></dt>
20855
<dd><p>A toggle causes a close message.
20857
<dt> <b>close</b> See section <a href="#close">close</a></dt>
20858
<dd><p>A close message take immediate effect if the item is not covered by a stone.
20859
The item transforms to a new growing <a href="#st_005fblocker">st_blocker</a>. If it is covered by a
20860
stone of whatever kind it will be marked as unlocked. The closing process starts
20861
when the stone moves away.
20863
<dt> <b>open</b> See section <a href="#open">open</a></dt>
20864
<dd><p>As the item is open this message takes only effect if it is currently covered
20865
by a stone and marked as unlocked. That means it should grow as soon as the
20866
stone moves away what happens when an <a href="#st_005fboulder">st_boulder</a> passes an idle blocker
20867
item. In this case an open message locks the blocker again to avoid a growing
20868
when the stone moves away.
20873
<dt> <b>Action:</b> See section <a href="#target">target</a>, See section <a href="#action">action</a></dt>
20874
<dd><p>Sends an action at the moment the blocker reaches the open state. That means
20875
an <a href="#st_005fblocker">st_blocker</a> did open and did generate this blocker item as its
20876
successor. The value will be <code>true</code> to express the open state.
20879
<dt> <b>Variants:</b></dt>
20880
<dd><dl compact="compact">
20881
<dt> <img src="images/st_blocker_4.png" alt="images/st_blocker_4"><p> <b>it_blocker</b>
20883
<dd><p>A standard blocker item.
20885
<dt> <img src="images/st_blocker_4.png" alt="images/st_blocker_4"><p> <b>it_blocker_new</b>
20887
<dd><p>A blocker that just finished shrinking. Mainly used internally as the direct
20888
successor of an <a href="#st_005fblocker">st_blocker</a>. But it may be useful to generate an initial
20889
snapshot of a moving boulder over a blocker line, too. See example levels.
20897
<a name="it_005fbomb"></a>
20898
<table cellpadding="1" cellspacing="1" border="0">
20899
<tr><td valign="middle" align="left">[<a href="#it_005fblocker" title="Previous section in reading order"> < </a>]</td>
20900
<td valign="middle" align="left">[<a href="#it_005fburnable" title="Next section in reading order"> > </a>]</td>
20901
<td valign="middle" align="left"> </td>
20902
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
20903
<td valign="middle" align="left">[<a href="#Static-Items" title="Up section"> Up </a>]</td>
20904
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
20905
<td valign="middle" align="left"> </td>
20906
<td valign="middle" align="left"> </td>
20907
<td valign="middle" align="left"> </td>
20908
<td valign="middle" align="left"> </td>
20909
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
20910
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
20911
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
20912
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
20914
<a name="it_005fbomb-1"></a>
20915
<h3 class="subsection">8.4.2 it_bomb</h3>
20916
<a name="index-it_005fbomb"></a>
20918
<p>A bomb is an explosive that can not be picked up. It ignites on laser light,
20919
nearby fire and other nearby explosions as those caused by other <a href="#it_005fbomb">it_bomb</a>s,
20920
<a href="#it_005fdynamite">it_dynamite</a>, <a href="#st_005fdispenser">st_dispenser</a> exploding directly above a bomb, or simply
20921
by a solid stone being pushed over them (just a few stones like <a href="#st_005fshogun">st_shogun</a>,
20922
<a href="#st_005fbox">st_box</a>_hay do not cause bombs to ignite). A falling <a href="#ot_005fcannonball">ot_cannonball</a>
20923
lets it explode immediately without prior ignition.
20925
<p>On ignition its fuse starts burning. After a short time the bomb explodes
20926
causing on the 8 neighboring positions items to ignite and some stones like
20927
<a href="#st_005fbreak">st_break</a> to dissolve, too.
20929
<p>‘<samp>BLACK</samp>’ bombs will cause destructible items on the 4 neighboring positions
20930
to be blown away, and dissolves the floor beneath to a <a href="#fl_005fabyss">fl_abyss</a>.
20932
<p>‘<samp>WHITE</samp>’ bombs will cause destructible items on the 8 neighboring positions
20933
to be blown away, and dissolves the floor beneath and the 8 neighboring
20934
positions to <a href="#fl_005fabyss">fl_abyss</a>.
20936
<p>Bomb items will be added to the inventory when an actor hits a
20937
<a href="#st_005fdispenser">st_dispenser</a>_bombblack or <a href="#st_005fdispenser">st_dispenser</a>_bombwhite.
20939
<dl compact="compact">
20940
<dt> <b>Attributes:</b></dt>
20941
<dd><dl compact="compact">
20942
<dt> <b>state</b>, <i>values</i>: <code>IDLE</code>, <code>ACTIVE</code>; <i>default</i>: <code>IDLE</code> See section <a href="#state">state</a></dt>
20943
<dt> <b>color</b> <i>values</i>: <code>BLACK</code>, <code>WHITE</code>; <i>default</i>: <code>BLACK</code></dt>
20944
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
20945
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
20946
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
20947
<dd><p>Just bombs in ‘<samp>state</samp>’ ‘<samp>IDLE</samp>’ are portable, burning ‘<samp>ACTIVE</samp>’ ones
20948
can not be added to the inventory or an <a href="#it_005fbag">it_bag</a>.
20953
<dt> <b>Messages:</b></dt>
20954
<dd><dl compact="compact">
20955
<dt> <b>explode</b></dt>
20956
<dd><p>Direct explosion without burning fuse.
20958
<dt> <b>ignite</b></dt>
20959
<dd><p>Ignite the fuse.
20961
<dt> <b>heat</b></dt>
20962
<dd><p>Ignite the fuse.
20967
<dt> <b>Variants:</b></dt>
20968
<dd><dl compact="compact">
20969
<dt> <img src="images/it_bomb.png" alt="images/it_bomb"><p> <b>it_bomb</b>: color = <code>BLACK</code>
20971
<dt> <img src="images/it_bomb.png" alt="images/it_bomb"><p> <b>it_bomb_black</b>: color = <code>BLACK</code>
20973
<dt> <img src="images/it_bomb_b.png" alt="images/it_bomb_b"><p> <b>it_bomb_white</b>: color = <code>WHITE</code>
20981
<a name="it_005fburnable"></a>
20982
<table cellpadding="1" cellspacing="1" border="0">
20983
<tr><td valign="middle" align="left">[<a href="#it_005fbomb" title="Previous section in reading order"> < </a>]</td>
20984
<td valign="middle" align="left">[<a href="#it_005fcrack" title="Next section in reading order"> > </a>]</td>
20985
<td valign="middle" align="left"> </td>
20986
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
20987
<td valign="middle" align="left">[<a href="#Static-Items" title="Up section"> Up </a>]</td>
20988
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
20989
<td valign="middle" align="left"> </td>
20990
<td valign="middle" align="left"> </td>
20991
<td valign="middle" align="left"> </td>
20992
<td valign="middle" align="left"> </td>
20993
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
20994
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
20995
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
20996
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
20998
<a name="it_005fburnable-1"></a>
20999
<h3 class="subsection">8.4.3 it_burnable</h3>
21000
<a name="index-it_005fburnable"></a>
21002
<p>A legacy item representing the fire state and handling the visible animation.
21003
This item is nowadays mainly an internal system item as the <a href="#Fire-Spreading">Fire Spreading</a>
21004
with its attributes and messages is mainly handled by the <a href="#Floor-Objects">Floor Objects</a>.
21005
But it may be essential for your understanding to be aware of this object in
21006
all its variants. You may also need to make use of all variants on level
21007
initialization due to the <a href="#Snapshot-Principle">Snapshot Principle</a>.
21009
<p>The following variants do exist:
21011
<li> ‘<samp>invisible</samp>’ - allow a floor tile to catch fire, and to ignite on
21012
explosions; set the attributes <a href="#burnable">burnable</a> and <a href="#ignitable">ignitable</a> on the floor
21014
</li><li> ‘<samp>oil</samp>’ - is the visible variant of the invisible burnable item.
21015
</li><li> ‘<samp>ignited</samp>’ - carries the starting-animation of fire; send the
21016
‘<samp>setfire</samp>’ message to a floor or set the floor with attribute
21017
‘<samp>initfire</samp>’ instead.
21018
</li><li> ‘<samp>burning</samp>’ - carries the animation of burning fire. Use setfire instead.
21019
</li><li> ‘<samp>ash</samp>’ - the unburnable remnant of a fire.
21020
</li><li> ‘<samp>fireproof</samp>’ - the extinguisher foam that protects from fire.
21023
<p>Note that you are not allowed to set or change the ‘<samp>state</samp>’ of a burnable
21024
item. But you can investigate the kind of a burnable.
21026
<p>Besides by <a href="#Fire-Spreading">Fire Spreading</a> the user can interact with burnable items with
21027
the following other objects:
21029
<li> <a href="#it_005fextinguisher">it_extinguisher</a> sprays ‘<samp>fireproof</samp>’ foam
21030
</li><li> <a href="#it_005fbrush">it_brush</a> removes ‘<samp>ash</samp>’ and ‘<samp>fireproof</samp>’
21031
</li><li> <a href="#st_005fice">st_ice</a> removes all burnable besides ‘<samp>oil</samp>’ when being pushed over them
21034
<dl compact="compact">
21035
<dt> <b>Attributes:</b></dt>
21036
<dd><dl compact="compact">
21037
<dt> <b>state</b>, <i>values</i>: integer numbers between 0 and 5; <i>default</i>: <code>0</code>; <i>access</i>: <code>read only</code> See section <a href="#state">state</a></dt>
21038
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
21039
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
21040
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
21044
<dt> <b>Messages:</b></dt>
21045
<dd><dl compact="compact">
21046
<dt> <b>ignite</b> See section <a href="#ignite">ignite</a></dt>
21047
<dd><p>Ignites the floor beneath.
21049
<dt> <b>extinguish</b></dt>
21050
<dd><p>Changes burnable immediately to extinguisher foam.
21055
<dt> <b>Variants:</b></dt>
21056
<dd><dl compact="compact">
21057
<dt> <img src="images/fl_white.png" alt="images/fl_white"><p> <b>it_burnable</b>: state = <code>0</code>
21059
<dt> <img src="images/fl_white.png" alt="images/fl_white"><p> <b>it_burnable_invisible</b>: state = <code>0</code>
21061
<dt> <img src="images/it_burnable_oil.png" alt="images/it_burnable_oil"><p> <b>it_burnable_oil</b>: state = <code>1</code>
21063
<dt> <img src="images/fl_white.png" alt="images/fl_white"><p> <b>it_burnable_ignited</b>: state = <code>2</code>
21065
<dt> <img src="images/it_burnable_burning.png" alt="images/it_burnable_burning"><p> <b>it_burnable_burning</b>: state = <code>3</code>
21067
<dt> <img src="images/it_burnable_ash.png" alt="images/it_burnable_ash"><p> <b>it_burnable_ash</b>: state = <code>4</code>
21069
<dt> <img src="images/it_burnable_fireproof.png" alt="images/it_burnable_fireproof"><p> <b>it_burnable_fireproof</b>: state = <code>5</code>
21077
<a name="it_005fcrack"></a>
21078
<table cellpadding="1" cellspacing="1" border="0">
21079
<tr><td valign="middle" align="left">[<a href="#it_005fburnable" title="Previous section in reading order"> < </a>]</td>
21080
<td valign="middle" align="left">[<a href="#it_005fcross" title="Next section in reading order"> > </a>]</td>
21081
<td valign="middle" align="left"> </td>
21082
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
21083
<td valign="middle" align="left">[<a href="#Static-Items" title="Up section"> Up </a>]</td>
21084
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
21085
<td valign="middle" align="left"> </td>
21086
<td valign="middle" align="left"> </td>
21087
<td valign="middle" align="left"> </td>
21088
<td valign="middle" align="left"> </td>
21089
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
21090
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
21091
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
21092
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
21094
<a name="it_005fcrack-1"></a>
21095
<h3 class="subsection">8.4.4 it_crack</h3>
21096
<a name="index-it_005fcrack"></a>
21098
<p>A legacy item that features a crack in the floor. A crack increases every time
21099
an actor enters and finally dissolves the floor either into an <a href="#fl_005fabyss">fl_abyss</a>
21100
or an <a href="#fl_005fwater">fl_water</a>. The color of the fissures shows the upcoming new floor
21101
kind and corresponds to the attribute ‘<samp>flavor</samp>’.
21103
<p>The progress of the floor destruction is described by the attribute ‘<samp>state</samp>’.
21104
On every crack event the state advances by one and a cracking ‘<samp>LARGE</samp>’ crack
21105
finally dissolves giving an actor on top just enough time to leave the grid at
21106
once. Of course an actor jumping over a crack does not causes change on the
21109
<p>You can control the crack progress by the two attributes ‘<samp>spreading</samp>’ and
21110
‘<samp>fragility</samp>’. Where as the first attribute describes the likelihood that the
21111
crack spreads to a neighboring crack free grid, does the second attribute
21112
describe the likelihood that an existing crack advances its state.
21114
<p>An actor entering a crack causes the crack itself to advance its state with the
21115
given likelihood. A default ‘<samp>abyss</samp>’ crack causes existing cracks on any of
21116
the 4 neighboring grid positions to advance their states, too. But a
21117
‘<samp>water</samp>’ crack does not advance neighboring cracks. Both do cause a spread
21118
with the given likelihood of an invisible crack to any of the 4 neighboring grid
21119
positions in case no crack or any other items exists on it.
21121
<p>Let us have another look on a spreading crack. An actor entering a crack causes
21122
an invisible crack on the next grid. If the actor continues to move to this grid
21123
the invisible crack advances to a small visible one, of cause just with the
21124
given likelihood. Note that this first and just this first crack progress takes
21125
place with the likelihood of spreading, too. That means even if the fragility is
21126
zero the invisible crack gets visible.
21128
<p>Another special feature is the behaviour of a large crack. An actor entering
21129
causes it to dissolve. But this causes neither a spreading nor a crack advancing
21130
on neighboring grids. This feature is essential to allow an actor to walk over
21131
a path of large cracks, as the next grid may not dissolve on an actor entering
21134
<p>Common attribute patterns besides the default ones are:
21136
<li> ‘<samp>spreading=0, fragility=0</samp>’ - a fake crack that neither spreads nor dissolves
21137
</li><li> ‘<samp>spreading=0, fragility=1</samp>’ - a crack that dissolves and causes neighbor cracks to dissolve, but does not spread to new floors
21140
<p>Both attributes are inherited to new cracks during the process of spreading.
21141
If not set they take as default the value of the global attributes. For a maximum
21142
control you can set individual floors their own <a href="#fragility-_0028floor_0029">fragility (floor)</a>. These
21143
values supersede the global <a href="#Fragility">Fragility</a> default.
21145
<p>Indestructible floors like <a href="#fl_005fabyss">fl_abyss</a>, <a href="#fl_005fwater">fl_water</a>, <a href="#fl_005fswamp">fl_swamp</a> will
21146
never crack. As any other item cracks do block laser light and prohibit other items to be
21147
dropped on the same grid. Nearby fire, explosions and hitting
21148
<a href="#ot_005fcannonball">ot_cannonball</a>s will dissolve a crack by another step.
21150
<p>On the other hand <a href="#st_005fice">st_ice</a> will putty any existing crack when being pushed
21153
<dl compact="compact">
21154
<dt> <b>Attributes:</b></dt>
21156
<dl compact="compact">
21157
<dt> <b>state</b>, <i>values</i>: <code>INVISIBLE</code>, <code>SMALL</code>, <code>MEDIUM</code>, <code>LARGE</code>; <i>default</i>: <code>SMALL</code> See section <a href="#state">state</a></dt>
21158
<dt> <b>flavor</b>, <i>values</i>: <code>"abyss"</code>, <code>"water"</code>; <i>default</i>: <code>"abyss"</code></dt>
21159
<dt> <b>spreading</b> <i>values</i>: positive number between 0.0 and 1.0; <i>default</i>: <code>0.5</code>, See section <a href="#CrackSpreading">CrackSpreading</a></dt>
21160
<dt> <b>fragility</b> <i>values</i>: positive number between 0.0 and 1.0; <i>default</i>: <code>1.0</code>, See section <a href="#Fragility">Fragility</a></dt>
21161
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
21162
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
21163
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
21167
<dt> <b>Messages:</b></dt>
21169
<dl compact="compact">
21170
<dt> <b>crack</b></dt>
21171
<dt> <b>toggle</b> See section <a href="#toggle">toggle</a></dt>
21172
<dt> <b>ignite</b> See section <a href="#ignite">ignite</a></dt>
21173
<dt> <b>heat</b> See section <a href="#heat">heat</a></dt>
21177
<dt> <b>Variants:</b></dt>
21179
<tr><td width="8%"><img src="images/it_crack_abyss.png" alt="images/it_crack_abyss"></td><td width="42%"><b>it_crack</b>: state = <code>SMALL</code>, flavor = <code>"abyss"</code></td><td width="8%"><img src="images/it_crack_water.png" alt="images/it_crack_water"></td><td width="42%"><b>it_crack</b>: state = <code>SMALL</code>, flavor = <code>"water"</code></td></tr>
21180
<tr><td width="8%"><img src="images/fl_white.png" alt="images/fl_white"></td><td width="42%"><b>it_crack_i</b>: state = <code>INVISIBLE</code>, flavor = <code>"abyss"</code></td><td width="8%"><img src="images/fl_white.png" alt="images/fl_white"></td><td width="42%"><b>it_crack_i</b>: state = <code>INVISIBLE</code>, flavor = <code>"water"</code></td></tr>
21181
<tr><td width="8%"><img src="images/it_crack_abyss.png" alt="images/it_crack_abyss"></td><td width="42%"><b>it_crack_s</b>: state = <code>SMALL</code>, flavor = <code>"abyss"</code></td><td width="8%"><img src="images/it_crack_water.png" alt="images/it_crack_water"></td><td width="42%"><b>it_crack_s</b>: state = <code>SMALL</code>, flavor = <code>"water"</code></td></tr>
21182
<tr><td width="8%"><img src="images/it_crack_abyss_2.png" alt="images/it_crack_abyss_2"></td><td width="42%"><b>it_crack_m</b>: state = <code>MEDIUM</code>, flavor = <code>"abyss"</code></td><td width="8%"><img src="images/it_crack_water_2.png" alt="images/it_crack_water_2"></td><td width="42%"><b>it_crack_m</b>: state = <code>MEDIUM</code>, flavor = <code>"water"</code></td></tr>
21183
<tr><td width="8%"><img src="images/it_crack_abyss_3.png" alt="images/it_crack_abyss_3"></td><td width="42%"><b>it_crack_l</b>: state = <code>LARGE</code>, flavor = <code>"abyss"</code></td><td width="8%"><img src="images/it_crack_water_3.png" alt="images/it_crack_water_3"></td><td width="42%"><b>it_crack_l</b>: state = <code>LARGE</code>, flavor = <code>"water"</code></td></tr>
21190
<a name="it_005fcross"></a>
21191
<table cellpadding="1" cellspacing="1" border="0">
21192
<tr><td valign="middle" align="left">[<a href="#it_005fcrack" title="Previous section in reading order"> < </a>]</td>
21193
<td valign="middle" align="left">[<a href="#it_005fdeath" title="Next section in reading order"> > </a>]</td>
21194
<td valign="middle" align="left"> </td>
21195
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
21196
<td valign="middle" align="left">[<a href="#Static-Items" title="Up section"> Up </a>]</td>
21197
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
21198
<td valign="middle" align="left"> </td>
21199
<td valign="middle" align="left"> </td>
21200
<td valign="middle" align="left"> </td>
21201
<td valign="middle" align="left"> </td>
21202
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
21203
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
21204
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
21205
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
21207
<a name="it_005fcross-1"></a>
21208
<h3 class="subsection">8.4.5 it_cross</h3>
21209
<a name="index-it_005fcross"></a>
21211
<p>An eye-catching cross spot that can detect actors staying on it for a given
21212
time. When an actor remains on top of the cross for the given ‘<samp>interval</samp>’
21213
without any other actor leaving or passing the cross grid the cross will perform
21214
its action. Similar, but instant sensors for actors are <a href="#it_005fsensor">it_sensor</a> and
21215
<a href="#it_005ftrigger">it_trigger</a>
21217
<p>A cross can be drawn with an <a href="#it_005fpencil">it_pencil</a> and it can be removed with an
21218
<a href="#it_005fbrush">it_brush</a>.
21220
<p>An <a href="#st_005flightpassenger">st_lightpassenger</a> moving onto a cross item will switch off.
21222
<dl compact="compact">
21223
<dt> <b>Attributes:</b></dt>
21225
<dl compact="compact">
21226
<dt> <b>state</b>, <i>values</i>: <code>0</code>, <code>1</code>; <i>access</i>: <code>read only</code> See section <a href="#state">state</a></dt>
21227
<dd><p>The current state - ‘<samp>0</samp>’ for the last event being an actor leaving the cross,
21228
‘<samp>1</samp>’ for the last event being an actor entering the cross.
21231
<dt> <b>interval</b> <i>values</i>: positive number; <i>default</i>: <code>10.0</code></dt>
21232
<dd><p>Number of seconds that the actor must stay on the sensor to cause an action.
21234
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
21235
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
21236
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
21240
<dt> <b>Messages:</b> none</dt>
21241
<dt> <b>Action:</b> See section <a href="#target">target</a>, See section <a href="#action">action</a></dt>
21242
<dt> <b>Variants:</b></dt>
21243
<dd><dl compact="compact">
21244
<dt> <img src="images/it_cross.png" alt="images/it_cross"><p> <b>it_cross</b>
21251
<a name="it_005fdeath"></a>
21252
<table cellpadding="1" cellspacing="1" border="0">
21253
<tr><td valign="middle" align="left">[<a href="#it_005fcross" title="Previous section in reading order"> < </a>]</td>
21254
<td valign="middle" align="left">[<a href="#it_005fexplosion" title="Next section in reading order"> > </a>]</td>
21255
<td valign="middle" align="left"> </td>
21256
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
21257
<td valign="middle" align="left">[<a href="#Static-Items" title="Up section"> Up </a>]</td>
21258
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
21259
<td valign="middle" align="left"> </td>
21260
<td valign="middle" align="left"> </td>
21261
<td valign="middle" align="left"> </td>
21262
<td valign="middle" align="left"> </td>
21263
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
21264
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
21265
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
21266
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
21268
<a name="it_005fdeath-1"></a>
21269
<h3 class="subsection">8.4.6 it_death</h3>
21270
<a name="index-it_005fdeath"></a>
21272
<p>This item shatters any marble that tries to pass the grid. Even jumping marbles
21273
will be shattered. Just marbles protected by an activated <a href="#it_005fumbrella">it_umbrella</a> can
21274
pass without taking harm. Apart from that an ‘<samp>it_death</samp>’ barrier can only be
21275
passed by walking around the complete barrier or by warping through an
21276
<a href="#it_005fvortex">it_vortex</a>, an <a href="#it_005fwormhole">it_wormhole</a> or by means of an <a href="#it_005fring">it_ring</a>.
21278
<p>The death item is the most secure barrier object. Comparable objects are
21279
<a href="#it_005fbottle">it_bottle</a>_broken, <a href="#fl_005fabyss">fl_abyss</a>, <a href="#fl_005fwater">fl_water</a>, <a href="#it_005ftrap">it_trap</a> or simply
21280
any solid wall of stones. Usually these alternatives should be favored. The
21281
death item should mainly be used when all other alternatives are too insecure.
21283
<dl compact="compact">
21284
<dt> <b>Attributes:</b></dt>
21285
<dd><dl compact="compact">
21286
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
21287
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
21288
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
21292
<dt> <b>Messages:</b> none</dt>
21293
<dt> <b>Variants:</b></dt>
21294
<dd><dl compact="compact">
21295
<dt> <img src="images/it_death.png" alt="images/it_death"><p> <b>it_death</b>
21303
<a name="it_005fexplosion"></a>
21304
<table cellpadding="1" cellspacing="1" border="0">
21305
<tr><td valign="middle" align="left">[<a href="#it_005fdeath" title="Previous section in reading order"> < </a>]</td>
21306
<td valign="middle" align="left">[<a href="#it_005flandmine" title="Next section in reading order"> > </a>]</td>
21307
<td valign="middle" align="left"> </td>
21308
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
21309
<td valign="middle" align="left">[<a href="#Static-Items" title="Up section"> Up </a>]</td>
21310
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
21311
<td valign="middle" align="left"> </td>
21312
<td valign="middle" align="left"> </td>
21313
<td valign="middle" align="left"> </td>
21314
<td valign="middle" align="left"> </td>
21315
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
21316
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
21317
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
21318
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
21320
<a name="it_005fexplosion-1"></a>
21321
<h3 class="subsection">8.4.7 it_explosion</h3>
21322
<a name="index-it_005fexplosion"></a>
21324
<p>An intermediate short living system item representing and visualizing an
21325
explosion. There are very few acceptable usages of this item besides the
21326
internal setting due to explosions of <a href="#it_005fbomb">it_bomb</a>, <a href="#it_005fdynamite">it_dynamite</a>,
21327
<a href="#it_005flandmine">it_landmine</a> and <a href="#ot_005fcannonball">ot_cannonball</a>.
21329
<p>All explosions do shatter ball like actors.
21331
<p>The following variants do exist:
21333
<li> ‘<samp>nil</samp>’ - no remnants.
21334
</li><li> ‘<samp>hollow</samp>’ - leave an <a href="#it_005fmeditation">it_meditation</a>_hollow.
21335
</li><li> ‘<samp>crack</samp>’ - make an <a href="#it_005fcrack">it_crack</a>_water.
21336
</li><li> ‘<samp>debris</samp>’ - dissolve the floor to <a href="#SubSoil">SubSoil</a>, which defaults to <a href="#fl_005fabyss">fl_abyss</a>
21339
<p>Note that you are not allowed to set or change the ‘<samp>state</samp>’ of an explosion
21340
item. But you can investigate the kind of an explosion.
21342
<dl compact="compact">
21343
<dt> <b>Attributes:</b></dt>
21344
<dd><dl compact="compact">
21345
<dt> <b>state</b>, <i>values</i>: integer numbers between 0 and 3; <i>default</i>: <code>0</code>; <i>access</i>: <code>read only</code> See section <a href="#state">state</a></dt>
21346
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
21347
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
21348
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
21352
<dt> <b>Messages:</b> none</dt>
21353
<dt> <b>Variants:</b></dt>
21354
<dd><dl compact="compact">
21355
<dt> <img src="images/it_explosion.png" alt="images/it_explosion"><p> <b>it_explosion</b>: state = <code>0</code>
21357
<dt> <img src="images/it_explosion.png" alt="images/it_explosion"><p> <b>it_explosion_nil</b>: state = <code>0</code>
21359
<dt> <img src="images/it_explosion.png" alt="images/it_explosion"><p> <b>it_explosion_hollow</b>: state = <code>1</code>
21361
<dt> <img src="images/it_explosion.png" alt="images/it_explosion"><p> <b>it_explosion_crack</b>: state = <code>2</code>
21363
<dt> <img src="images/it_explosion.png" alt="images/it_explosion"><p> <b>it_explosion_debris</b>: state = <code>3</code>
21371
<a name="it_005flandmine"></a>
21372
<table cellpadding="1" cellspacing="1" border="0">
21373
<tr><td valign="middle" align="left">[<a href="#it_005fexplosion" title="Previous section in reading order"> < </a>]</td>
21374
<td valign="middle" align="left">[<a href="#it_005flaserbeam" title="Next section in reading order"> > </a>]</td>
21375
<td valign="middle" align="left"> </td>
21376
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
21377
<td valign="middle" align="left">[<a href="#Static-Items" title="Up section"> Up </a>]</td>
21378
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
21379
<td valign="middle" align="left"> </td>
21380
<td valign="middle" align="left"> </td>
21381
<td valign="middle" align="left"> </td>
21382
<td valign="middle" align="left"> </td>
21383
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
21384
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
21385
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
21386
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
21388
<a name="it_005flandmine-1"></a>
21389
<h3 class="subsection">8.4.8 it_landmine</h3>
21390
<a name="index-it_005flandmine"></a>
21392
<p>A static item that explodes on actors stepping onto its critical center part and
21393
on stones being pushed onto the mine.
21395
<p>The landmine explodes shattering nearby marbles on the same grid and leaves an
21396
hollow <a href="#it_005fmeditation">it_meditation</a> behind.
21398
<p>Actors can jump over a landmine and pass carefully between two adjacent
21399
landmines without activating the mines. Landmines do neither react on nearby
21400
explosions, nor fire, nor laserbeams.
21402
<dl compact="compact">
21403
<dt> <b>Attributes:</b></dt>
21404
<dd><dl compact="compact">
21405
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
21406
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
21407
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
21411
<dt> <b>Messages:</b> none</dt>
21412
<dt> <b>Action:</b> none</dt>
21413
<dt> <b>Variants:</b></dt>
21414
<dd><dl compact="compact">
21415
<dt> <img src="images/it_landmine.png" alt="images/it_landmine"><p> <b>it_landmine</b>
21423
<a name="it_005flaserbeam"></a>
21424
<table cellpadding="1" cellspacing="1" border="0">
21425
<tr><td valign="middle" align="left">[<a href="#it_005flandmine" title="Previous section in reading order"> < </a>]</td>
21426
<td valign="middle" align="left">[<a href="#it_005fmagnet" title="Next section in reading order"> > </a>]</td>
21427
<td valign="middle" align="left"> </td>
21428
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
21429
<td valign="middle" align="left">[<a href="#Static-Items" title="Up section"> Up </a>]</td>
21430
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
21431
<td valign="middle" align="left"> </td>
21432
<td valign="middle" align="left"> </td>
21433
<td valign="middle" align="left"> </td>
21434
<td valign="middle" align="left"> </td>
21435
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
21436
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
21437
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
21438
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
21440
<a name="it_005flaserbeam-1"></a>
21441
<h3 class="subsection">8.4.9 it_laserbeam</h3>
21442
<a name="index-it_005flaserbeam"></a>
21444
<p>A beam of laser light. This item is caused by an <a href="#st_005flaser">st_laser</a> that is switched
21445
on. The beam is automatically calculated and the items are set by the engine.
21446
You can not set laser beam items on your own. But you may detect a beam as an
21447
item being located on the item layer. You are free to replace a laser beam item
21448
by another item. This causes automatically a recalculation of the laser light.
21450
<dl compact="compact">
21451
<dt> <b>Attributes:</b></dt>
21452
<dd><dl compact="compact">
21453
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
21454
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
21455
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
21458
<dt> <b>Messages:</b> none</dt>
21459
<dt> <b>Variants:</b></dt>
21460
<dd><dl compact="compact">
21461
<dt> <img src="images/it_laser.png" alt="images/it_laser"><p> <b>it_laserbeam</b> can not be instantiated by levels
21468
<a name="it_005fmagnet"></a>
21469
<table cellpadding="1" cellspacing="1" border="0">
21470
<tr><td valign="middle" align="left">[<a href="#it_005flaserbeam" title="Previous section in reading order"> < </a>]</td>
21471
<td valign="middle" align="left">[<a href="#it_005fmeditation" title="Next section in reading order"> > </a>]</td>
21472
<td valign="middle" align="left"> </td>
21473
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
21474
<td valign="middle" align="left">[<a href="#Static-Items" title="Up section"> Up </a>]</td>
21475
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
21476
<td valign="middle" align="left"> </td>
21477
<td valign="middle" align="left"> </td>
21478
<td valign="middle" align="left"> </td>
21479
<td valign="middle" align="left"> </td>
21480
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
21481
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
21482
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
21483
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
21485
<a name="it_005fmagnet-1"></a>
21486
<h3 class="subsection">8.4.10 it_magnet</h3>
21487
<a name="index-it_005fmagnet"></a>
21489
<p>Attracts or repels actors in its ‘<samp>range</samp>’ with a force proportional to the
21490
‘<samp>strength</samp>’ and the inverse of the squared distance. A magnet can be
21491
switched ‘<samp>ON</samp>’ and ‘<samp>OFF</samp>’.
21493
<p>Note that no forces are applied to actors at a distance smaller than 0.05 grids
21494
to avoid extraordinary large forces.
21496
<dl compact="compact">
21497
<dt> <b>Attributes:</b></dt>
21499
<dl compact="compact">
21500
<dt> <b>state</b>, <i>values</i>: <code>ON</code>, <code>OFF</code>; <i>default</i>: <code>OFF</code> See section <a href="#state">state</a></dt>
21501
<dd><p>The current magnet state - ‘<samp>ON</samp>’ for an active magnet, ‘<samp>OFF</samp>’ for an
21505
<dt> <b>range</b> <i>values</i>: float number greater or equal 0; <i>default</i>: <code>10.0</code> See section <a href="#MagnetRange">MagnetRange</a></dt>
21506
<dd><p>The distance up to which the magnet applies forces to actors.
21509
<dt> <b>strength</b> <i>values</i>: float number; <i>default</i>: <code>+30.0</code> See section <a href="#MagnetStrength">MagnetStrength</a></dt>
21510
<dd><p>A scalar factor for magnet forces. Positive numbers are attracting forces
21511
where as negative numbers are repelling forces.
21513
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
21514
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
21515
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
21519
<dt> <b>Messages:</b></dt>
21521
<dl compact="compact">
21522
<dt> <b>signal</b> See section <a href="#signal">signal</a></dt>
21523
<dd><p>A signal of value 1 switches the magnet on, a value of 0 switches the magnet off.
21525
<dt> <b>toggle</b> See section <a href="#toggle">toggle</a></dt>
21526
<dd><p>A toggle causes a change in the magnet activity state.
21528
<dt> <b>on</b> See section <a href="#on">on</a></dt>
21529
<dd><p>Switches the magnet on.
21531
<dt> <b>off</b> See section <a href="#off">off</a></dt>
21532
<dd><p>Switches the magnet off.
21537
<dt> <b>Action:</b></dt>
21541
<dt> <b>Variants:</b></dt>
21542
<dd><dl compact="compact">
21543
<dt> <img src="images/it_magnet_off.png" alt="images/it_magnet_off"><p> <b>it_magnet</b> state = ‘<samp>OFF</samp>’.
21545
<dt> <img src="images/it_magnet_on.png" alt="images/it_magnet_on"><p> <b>it_magnet_on</b> state = ‘<samp>ON</samp>’.
21547
<dt> <img src="images/it_magnet_off.png" alt="images/it_magnet_off"><p> <b>it_magnet_off</b> state = ‘<samp>OFF</samp>’.
21555
<a name="it_005fmeditation"></a>
21556
<table cellpadding="1" cellspacing="1" border="0">
21557
<tr><td valign="middle" align="left">[<a href="#it_005fmagnet" title="Previous section in reading order"> < </a>]</td>
21558
<td valign="middle" align="left">[<a href="#it_005fsensor" title="Next section in reading order"> > </a>]</td>
21559
<td valign="middle" align="left"> </td>
21560
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
21561
<td valign="middle" align="left">[<a href="#Static-Items" title="Up section"> Up </a>]</td>
21562
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
21563
<td valign="middle" align="left"> </td>
21564
<td valign="middle" align="left"> </td>
21565
<td valign="middle" align="left"> </td>
21566
<td valign="middle" align="left"> </td>
21567
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
21568
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
21569
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
21570
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
21572
<a name="it_005fmeditation-1"></a>
21573
<h3 class="subsection">8.4.11 it_meditation</h3>
21574
<a name="index-it_005fmeditation"></a>
21576
<p>Meditation items are small round areas of flatness imperfection. All actors will
21577
experience the slope forces that can be modified by the global scalar factor
21578
<a href="#MeditationStrength">MeditationStrength</a>. There are different shapes of meditation items that
21579
are named according to their shape: <code>MEDITATION_CALDERA</code>,
21580
<code>MEDITATION_HOLLOW</code>, <code>MEDITATION_DENT</code>, <code>MEDITATION_BUMP</code>,
21581
<code>MEDITATION_HILL</code>, <code>MEDITATION_VOLCANO</code>.
21583
<p>Of special interest are <a href="#ac_005fpearl">ac_pearl</a>s resting on a meditation item. They are
21584
counted as meditating after staying continuously for one second within the round
21585
area of the item. One of the two <a href="#Ending-Conditions">Ending Conditions</a> of the game is that all
21586
meditation marbles come to rest on mediation items.
21588
<p>As meditation items can dynamically be generated during the game by exploding
21589
<a href="#it_005flandmine">it_landmine</a> or <a href="#it_005fdynamite">it_dynamite</a> it may be necessary for an author to
21590
mark those meditation items that are required to be filled with meditation
21591
marbles. You do this by setting the ‘<samp>essential</samp>’ attribute to <code>true</code>.
21592
Please make rare and obvious usage of this attribute, as the player can not
21593
distinguish essential from not essential meditation items by their images.
21595
<p>Meditation items can transform into other shapes by various means.
21597
<p>First a user can push a solid stone over a meditation item or activate an
21598
<a href="#it_005fspade">it_spade</a> on it. Both actions flatten the meditation, either
21599
<code>MEDITATION_VOLCANO</code> -> <code>MEDITATION_HILL</code> -> <code>MEDITATION_BUMP</code>
21600
-> <code>it_nil</code> or <code>MEDITATION_CALDERA</code> -> <code>MEDITATION_HOLLOW</code> ->
21601
<code>MEDITATION_DENT</code> -> <code>it_nil</code>.
21603
<p>Secondly you can send a <code>"flip"</code> message to a meditation item which
21604
transforms hollow like items into their hill like counterparts and vice versa:
21605
<code>MEDITATION_VOLCANO</code> <-> <code>MEDITATION_CALDERA</code>, <code>MEDITATION_HILL</code>
21606
<-> <code>MEDITATION_HOLLOW</code>, <code>MEDITATION_BUMP</code> <-> <code>MEDITATION_DENT</code>.
21608
<p>Third a <code>"signal"</code> message flips on a <code>1</code> value all meditations to
21609
their hill like counterparts, keeping hill like meditations unchanged, and on a
21610
<code>0</code> value to their hollow like counterparts, keeping hollow like meditations
21613
<p>A fourth message is <code>"toggle"</code>. It transforms <code>MEDITATION_HOLLOW</code> <->
21614
<code>MEDITATION_VOLCANO</code>, <code>MEDITATION_CALDERA</code> <-> <code>MEDITATION_HILL</code>,
21615
<code>MEDITATION_BUMP</code> <-> <code>MEDITATION_DENT</code>.
21617
<p>Of course you can change the state by setting the attribute anytime in any sequence
21618
you like. Essentialness is kept on shape transformations and mediation actor
21619
counting is updated and continues.
21621
<dl compact="compact">
21622
<dt> <b>Attributes:</b></dt>
21623
<dd><dl compact="compact">
21624
<dt> <b>state</b>, <i>values</i>: <code>MEDITATION_CALDERA</code>, <code>MEDITATION_HOLLOW</code>, <code>MEDITATION_DENT</code>, <code>MEDITATION_BUMP</code>, <code>MEDITATION_HILL</code>, <code>MEDITATION_VOLCANO</code>; <i>default</i>: <code>MEDITATION_HOLLOW</code> See section <a href="#state">state</a></dt>
21625
<dd><p>The shape of the meditation.
21627
<dt> <b>essential</b> <i>values</i>: <code>DISPENSABLE</code>, <code>INDISPENSABLE</code>; <i>default</i>: <code>DISPENSABLE</code></dt>
21628
<dd><p>Essentialness of being filled with a meditation marble to fulfill the
21629
<a href="#Ending-Conditions">Ending Conditions</a>.
21631
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: <code>nil</code> See section <a href="#friction">friction</a></dt>
21632
<dd><p>Deviating friction that defaults to floor friction.
21634
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: <code>nil</code> See section <a href="#adhesion">adhesion</a></dt>
21635
<dd><p>Deviating adhesion that defaults to floor adhesion.
21637
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
21638
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
21639
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
21643
<dt> <b>Messages:</b></dt>
21644
<dd><dl compact="compact">
21645
<dt> <b>flip</b></dt>
21646
<dd><p>Shape transformation. See text above.
21648
<dt> <b>shovel</b></dt>
21649
<dd><p>Shape transformation like an activated <a href="#it_005fspade">it_spade</a>. See text above.
21651
<dt> <b>signal</b> See section <a href="#signal">signal</a></dt>
21652
<dd><p>Shape transformation. See text above.
21654
<dt> <b>toggle</b></dt>
21655
<dd><p>Shape transformation. See text above.
21660
<dt> <b>Variants:</b></dt>
21661
<dd><dl compact="compact">
21662
<dt> <img src="images/it_meditation_hollow.png" alt="images/it_meditation_hollow"><p> <b>it_meditation</b> state = <code>MEDITATION_HOLLOW</code>
21664
<dt> <img src="images/it_meditation_caldera.png" alt="images/it_meditation_caldera"><p> <b>it_meditation_caldera</b> state = <code>MEDITATION_CALDERA</code>
21666
<dt> <img src="images/it_meditation_hollow.png" alt="images/it_meditation_hollow"><p> <b>it_meditation_hollow</b> state = <code>MEDITATION_HOLLOW</code>
21668
<dt> <img src="images/it_meditation_dent.png" alt="images/it_meditation_dent"><p> <b>it_meditation_dent</b> state = <code>MEDITATION_DENT</code>
21670
<dt> <img src="images/it_meditation_bump.png" alt="images/it_meditation_bump"><p> <b>it_meditation_bump</b> state = <code>MEDITATION_BUMP</code>
21672
<dt> <img src="images/it_meditation_hill.png" alt="images/it_meditation_hill"><p> <b>it_meditation_hill</b> state = <code>MEDITATION_HILL</code>
21674
<dt> <img src="images/it_meditation_volcano.png" alt="images/it_meditation_volcano"><p> <b>it_meditation_volcano</b> state = <code>MEDITATION_VOLCANO</code>
21682
<a name="it_005fsensor"></a>
21683
<table cellpadding="1" cellspacing="1" border="0">
21684
<tr><td valign="middle" align="left">[<a href="#it_005fmeditation" title="Previous section in reading order"> < </a>]</td>
21685
<td valign="middle" align="left">[<a href="#it_005fshogun" title="Next section in reading order"> > </a>]</td>
21686
<td valign="middle" align="left"> </td>
21687
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
21688
<td valign="middle" align="left">[<a href="#Static-Items" title="Up section"> Up </a>]</td>
21689
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
21690
<td valign="middle" align="left"> </td>
21691
<td valign="middle" align="left"> </td>
21692
<td valign="middle" align="left"> </td>
21693
<td valign="middle" align="left"> </td>
21694
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
21695
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
21696
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
21697
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
21699
<a name="it_005fsensor-1"></a>
21700
<h3 class="subsection">8.4.12 it_sensor</h3>
21701
<a name="index-it_005fsensor"></a>
21703
<p>The sensor item is a switch on top of a floor that reacts on actors passing it.
21704
It performs actions on actors either entering or exiting the sensors grid
21705
depending on its attribute ‘<samp>exit</samp>’. It will send the causing actor as action
21706
value, which evaluates like ‘<samp>true</samp>’ in Lua, but nevertheless the <a href="#inverse">inverse</a>
21707
attribute can be used to send an action value of ‘<samp>false</samp>’ instead.
21709
<p>Any actors passing the grid, either on the floor or jumping over it will be
21712
<p>Sensors do not cause any noise. Visible sensors will nevertheless flash on
21713
passing actors. You can make the trigger invisible by setting its attribute.
21714
Be aware that the user will still notice that actors cannot drop items onto the
21715
same grid position.
21717
<p>The level author can configure <a href="#it_005fglasses">it_glasses</a> by addition of
21718
‘<samp>SPOT_SENSOR</samp>’ to show invisible sensor items. An actor with such an
21719
<a href="#it_005fglasses">it_glasses</a> in its inventory will be able to spot invisible sensor items.
21720
With the global attribute <a href="#ExtralifeGlasses">ExtralifeGlasses</a> even glasses generated by laser
21721
lighting an <a href="#it_005fextralife">it_extralife</a> can be configured not to show invisible sensor
21724
<p>Alternative objects that react on actors are <a href="#it_005ftrigger">it_trigger</a> and
21725
<a href="#it_005fcross">it_cross</a>.
21727
<dl compact="compact">
21728
<dt> <b>Attributes:</b></dt>
21729
<dd><dl compact="compact">
21730
<dt> <b>invisible</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
21731
<dd><p>An invisible sensor is totally transparent. But the user may notice it, as actors
21732
cannot drop items onto the same grid position.
21734
<dt> <b>exit</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
21735
<dd><p>React either on an actor exiting or entering the grid.
21737
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
21738
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
21739
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
21743
<dt> <b>Messages:</b> none</dt>
21744
<dt> <b>Action:</b> See section <a href="#target">target</a>, See section <a href="#action">action</a></dt>
21745
<dt> <b>Variants:</b></dt>
21746
<dd><dl compact="compact">
21747
<dt> <img src="images/it_sensor.png" alt="images/it_sensor"><p> <b>it_sensor</b>: exit = <code>false</code>
21749
<dt> <img src="images/it_sensor_exit.png" alt="images/it_sensor_exit"><p> <b>it_sensor_exit</b>: exit = <code>true</code>
21758
<a name="it_005fshogun"></a>
21759
<table cellpadding="1" cellspacing="1" border="0">
21760
<tr><td valign="middle" align="left">[<a href="#it_005fsensor" title="Previous section in reading order"> < </a>]</td>
21761
<td valign="middle" align="left">[<a href="#it_005fspringboard" title="Next section in reading order"> > </a>]</td>
21762
<td valign="middle" align="left"> </td>
21763
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
21764
<td valign="middle" align="left">[<a href="#Static-Items" title="Up section"> Up </a>]</td>
21765
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
21766
<td valign="middle" align="left"> </td>
21767
<td valign="middle" align="left"> </td>
21768
<td valign="middle" align="left"> </td>
21769
<td valign="middle" align="left"> </td>
21770
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
21771
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
21772
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
21773
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
21775
<a name="it_005fshogun-1"></a>
21776
<h3 class="subsection">8.4.13 it_shogun</h3>
21777
<a name="index-it_005fshogun"></a>
21779
<p>A dot like, blue animated sensor item for <a href="#st_005fshogun">st_shogun</a> stones. The dot comes
21780
in three variations matching the different hole sizes of shogun stones.
21782
<p>Shogun dots detect stacks of <a href="#st_005fshogun">st_shogun</a> that contain all variations from
21783
small up to the size of the dot. Thus the small dot requires just a single small
21784
shogun stone, the middle sized dot requires a stack of a small shogun beneath
21785
a middle sized shogun stone, whereas the large dot requires a stack of all three
21786
shogun stones on top.
21788
<p>There is no way to set the state of a dot manually. But the state can
21789
nevertheless be read. At initialization a dot with a matching shogun stack on
21790
top will start in state ‘<samp>ON</samp>’ without sending actions due to the
21791
<a href="#Snapshot-Principle">Snapshot Principle</a>.
21793
<p>Note that a dot is freezable by an <a href="#st_005fice">st_ice</a> and can thus be relocated to
21796
<dl compact="compact">
21797
<dt> <b>Attributes:</b></dt>
21798
<dd><dl compact="compact">
21799
<dt> <b>state</b>, <i>values</i>: <code>OFF</code>, <code>ON</code>; <i>default</i>: <code>OFF</code>; <i>access</i>: <code>read only</code> See section <a href="#state">state</a></dt>
21800
<dd><p>The current state of the dot - ‘<samp>ON</samp>’ for a matching <a href="#st_005fshogun">st_shogun</a> stack
21801
on top, ‘<samp>OFF</samp>’ otherwise.
21803
<dt> <b>flavor</b>, <i>values</i>: <code>"s"</code>, <code>"m"</code>, <code>"l"</code>; <i>default</i>: <code>"s"</code></dt>
21804
<dd><p>A string describing the hole size. <code>"s"</code> for a small hole, <code>"m"</code> for
21805
a medium hole, <code>"l"</code> for a large hole.
21808
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
21809
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
21810
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
21814
<dt> <b>Messages:</b> none</dt>
21815
<dt> <b>Action:</b> See section <a href="#target">target</a>, See section <a href="#action">action</a></dt>
21816
<dt> <b>Variants:</b></dt>
21817
<dd><dl compact="compact">
21818
<dt> <img src="images/it_shogun_s.png" alt="images/it_shogun_s"><p> <b>it_shogun</b>: flavor = <code>"s"</code>
21820
<dt> <img src="images/it_shogun_s.png" alt="images/it_shogun_s"><p> <b>it_shogun_s</b>: flavor = <code>"s"</code>
21822
<dt> <img src="images/it_shogun_m.png" alt="images/it_shogun_m"><p> <b>it_shogun_m</b>: flavor = <code>"m"</code>
21824
<dt> <img src="images/it_shogun_l.png" alt="images/it_shogun_l"><p> <b>it_shogun_l</b>: flavor = <code>"l"</code>
21832
<a name="it_005fspringboard"></a>
21833
<table cellpadding="1" cellspacing="1" border="0">
21834
<tr><td valign="middle" align="left">[<a href="#it_005fshogun" title="Previous section in reading order"> < </a>]</td>
21835
<td valign="middle" align="left">[<a href="#it_005fsquashed" title="Next section in reading order"> > </a>]</td>
21836
<td valign="middle" align="left"> </td>
21837
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
21838
<td valign="middle" align="left">[<a href="#Static-Items" title="Up section"> Up </a>]</td>
21839
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
21840
<td valign="middle" align="left"> </td>
21841
<td valign="middle" align="left"> </td>
21842
<td valign="middle" align="left"> </td>
21843
<td valign="middle" align="left"> </td>
21844
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
21845
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
21846
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
21847
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
21849
<a name="it_005fspringboard-1"></a>
21850
<h3 class="subsection">8.4.14 it_springboard</h3>
21851
<a name="index-it_005fspringboard"></a>
21853
<p>A static jump facility that lets <a href="#Flying-Actors">Flying Actors</a> jump on passing its center
21854
square. A springboard can catapult any number of actors anytime with an idle
21855
reloading time after an activation.
21857
<p>A springboard positioned on top of a floor can not be picked up. But nevertheless
21858
as being portable, it can be added to the initial inventory, to an <a href="#it_005fbag">it_bag</a>
21859
or can be picked up as a result of a <a href="#it_005fsurprise">it_surprise</a>.
21861
<p>Another catapulting, but liftable item is <a href="#it_005fspring">it_spring</a>.
21863
<dl compact="compact">
21864
<dt> <b>Attributes:</b></dt>
21865
<dd><dl compact="compact">
21866
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
21867
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
21868
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
21871
<dt> <b>Messages:</b> none</dt>
21872
<dt> <b>Variants:</b></dt>
21873
<dd><dl compact="compact">
21874
<dt> <img src="images/it_springboard.png" alt="images/it_springboard"><p> <b>it_springboard</b>
21882
<a name="it_005fsquashed"></a>
21883
<table cellpadding="1" cellspacing="1" border="0">
21884
<tr><td valign="middle" align="left">[<a href="#it_005fspringboard" title="Previous section in reading order"> < </a>]</td>
21885
<td valign="middle" align="left">[<a href="#it_005fstrip" title="Next section in reading order"> > </a>]</td>
21886
<td valign="middle" align="left"> </td>
21887
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
21888
<td valign="middle" align="left">[<a href="#Static-Items" title="Up section"> Up </a>]</td>
21889
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
21890
<td valign="middle" align="left"> </td>
21891
<td valign="middle" align="left"> </td>
21892
<td valign="middle" align="left"> </td>
21893
<td valign="middle" align="left"> </td>
21894
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
21895
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
21896
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
21897
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
21899
<a name="it_005fsquashed-1"></a>
21900
<h3 class="subsection">8.4.15 it_squashed</h3>
21901
<a name="index-it_005fsquashed"></a>
21903
<p>The remnants of fruits like <a href="#it_005fcherry">it_cherry</a> and <a href="#it_005fbanana">it_banana</a> after pushing
21906
<p>The squashed remnants are scarcely visible on some floor types. The player can
21907
not pick them up. But it can be wiped away by application of an <a href="#it_005fbrush">it_brush</a>,
21908
by a nearby exploding <a href="#it_005fbomb">it_bomb</a> or by an <a href="#st_005fice">st_ice</a> being pushed over it.
21910
<dl compact="compact">
21911
<dt> <b>Attributes:</b></dt>
21912
<dd><dl compact="compact">
21913
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
21914
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
21915
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
21918
<dt> <b>Messages:</b> none</dt>
21919
<dt> <b>Variants:</b></dt>
21920
<dd><dl compact="compact">
21921
<dt> <img src="images/it_squashed.png" alt="images/it_squashed"><p> <b>it_squashed</b>
21928
<a name="it_005fstrip"></a>
21929
<table cellpadding="1" cellspacing="1" border="0">
21930
<tr><td valign="middle" align="left">[<a href="#it_005fsquashed" title="Previous section in reading order"> < </a>]</td>
21931
<td valign="middle" align="left">[<a href="#it_005ftrap" title="Next section in reading order"> > </a>]</td>
21932
<td valign="middle" align="left"> </td>
21933
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
21934
<td valign="middle" align="left">[<a href="#Static-Items" title="Up section"> Up </a>]</td>
21935
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
21936
<td valign="middle" align="left"> </td>
21937
<td valign="middle" align="left"> </td>
21938
<td valign="middle" align="left"> </td>
21939
<td valign="middle" align="left"> </td>
21940
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
21941
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
21942
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
21943
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
21945
<a name="it_005fstrip-1"></a>
21946
<h3 class="subsection">8.4.16 it_strip</h3>
21947
<a name="index-it_005fstrip"></a>
21949
<p>These items cover a small strip of the ground below them and provide a narrow
21950
bridge for the marble to safely pass <a href="#fl_005fabyss">fl_abyss</a>, <a href="#fl_005fswamp">fl_swamp</a>,
21951
<a href="#fl_005fwater">fl_water</a>, or any other floor.
21953
<p>A strip connects zero, what is just a central small unconnected square, or up
21954
to 4 neighboring floor grids. A marble can pass from one connected floor to
21955
another connected floor via the strip.
21957
<p>Any stone on a directly neighboring grid can be touched or hit by a large marble
21958
and prevents it from falling off the strip on this side. Small marbles can not
21959
touch neighboring stones and will not be protected from falling.
21961
<p>Per default an actor on a covering strip is exposed to the same friction and
21962
adhesion as on the floor below. But strips can provide its own deviating
21963
values for these factors.
21965
<dl compact="compact">
21966
<dt> <b>Attributes:</b></dt>
21967
<dd><dl compact="compact">
21968
<dt> <b>connections</b>, <i>values</i>: string; <i>default</i>: <code>nil</code></dt>
21969
<dd><p>Describes the connections to the neighbor grids. The string is a substring of
21970
<code>"nesw"</code> listing the existing connections. The sequence of the sides, north,
21971
east, south, west, is guaranteed on read access but arbitrary on write access.
21973
<dt> <b>friction</b>, <i>values</i>: number; <i>default</i>: <code>nil</code> See section <a href="#friction">friction</a></dt>
21974
<dd><p>Deviating friction that defaults to floor friction.
21976
<dt> <b>adhesion</b>, <i>values</i>: number; <i>default</i>: <code>nil</code> See section <a href="#adhesion">adhesion</a></dt>
21977
<dd><p>Deviating adhesion that defaults to floor adhesion.
21979
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
21980
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
21981
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
21985
<dt> <b>Variants:</b></dt>
21987
<tr><td width="8%"><img src="images/it_strip.png" alt="images/it_strip"></td><td width="42%"><b>it_strip</b>: connections = <code>""</code></td><td width="8%"><img src="images/it_strip_2.png" alt="images/it_strip_2"></td><td width="42%"><b>it_strip_w</b>: connections = <code>"w"</code></td></tr>
21988
<tr><td width="8%"><img src="images/it_strip_3.png" alt="images/it_strip_3"></td><td width="42%"><b>it_strip_s</b>: connections = <code>"s"</code></td><td width="8%"><img src="images/it_strip_4.png" alt="images/it_strip_4"></td><td width="42%"><b>it_strip_sw</b>: connections = <code>"sw"</code></td></tr>
21989
<tr><td width="8%"><img src="images/it_strip_b.png" alt="images/it_strip_b"></td><td width="42%"><b>it_strip_e</b>: connections = <code>"e"</code></td><td width="8%"><img src="images/it_strip_b2.png" alt="images/it_strip_b2"></td><td width="42%"><b>it_strip_ew</b>: connections = <code>"ew"</code></td></tr>
21990
<tr><td width="8%"><img src="images/it_strip_b3.png" alt="images/it_strip_b3"></td><td width="42%"><b>it_strip_es</b>: connections = <code>"es"</code></td><td width="8%"><img src="images/it_strip_b4.png" alt="images/it_strip_b4"></td><td width="42%"><b>it_strip_esw</b>: connections = <code>"esw"</code></td></tr>
21991
<tr><td width="8%"><img src="images/it_strip_c.png" alt="images/it_strip_c"></td><td width="42%"><b>it_strip_n</b>: connections = <code>"n"</code></td><td width="8%"><img src="images/it_strip_c2.png" alt="images/it_strip_c2"></td><td width="42%"><b>it_strip_nw</b>: connections = <code>"nw"</code></td></tr>
21992
<tr><td width="8%"><img src="images/it_strip_c3.png" alt="images/it_strip_c3"></td><td width="42%"><b>it_strip_ns</b>: connections = <code>"ns"</code></td><td width="8%"><img src="images/it_strip_c4.png" alt="images/it_strip_c4"></td><td width="42%"><b>it_strip_nsw</b>: connections = <code>"nsw"</code></td></tr>
21993
<tr><td width="8%"><img src="images/it_strip_d.png" alt="images/it_strip_d"></td><td width="42%"><b>it_strip_ne</b>: connections = <code>"ne"</code></td><td width="8%"><img src="images/it_strip_d2.png" alt="images/it_strip_d2"></td><td width="42%"><b>it_strip_new</b>: connections = <code>"new"</code></td></tr>
21994
<tr><td width="8%"><img src="images/it_strip_d3.png" alt="images/it_strip_d3"></td><td width="42%"><b>it_strip_nes</b>: connections = <code>"nes"</code></td><td width="8%"><img src="images/it_strip_d4.png" alt="images/it_strip_d4"></td><td width="42%"><b>it_strip_nesw</b>: connections = <code>"nesw"</code></td></tr>
22000
<a name="it_005ftrap"></a>
22001
<table cellpadding="1" cellspacing="1" border="0">
22002
<tr><td valign="middle" align="left">[<a href="#it_005fstrip" title="Previous section in reading order"> < </a>]</td>
22003
<td valign="middle" align="left">[<a href="#it_005ftrigger" title="Next section in reading order"> > </a>]</td>
22004
<td valign="middle" align="left"> </td>
22005
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
22006
<td valign="middle" align="left">[<a href="#Static-Items" title="Up section"> Up </a>]</td>
22007
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
22008
<td valign="middle" align="left"> </td>
22009
<td valign="middle" align="left"> </td>
22010
<td valign="middle" align="left"> </td>
22011
<td valign="middle" align="left"> </td>
22012
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
22013
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
22014
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
22015
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
22017
<a name="it_005ftrap-1"></a>
22018
<h3 class="subsection">8.4.17 it_trap</h3>
22019
<a name="index-it_005ftrap"></a>
22021
<p>A classical trap that is camouflaged by a floor image. Any marble stepping onto
22022
this trap will break the trap and fall into the trap’s abyss. But marbles can
22023
jump unharmed over a trap. Movable stones can be pushed over a trap without any
22026
<p>Any marble falling into a trap causes it to break and to become visible by the
22027
remnants of the trap. The trap can be opened by messages, too.
22029
<p>The level author can configure <a href="#it_005fglasses">it_glasses</a> by addition of
22030
‘<samp>SPOT_TRAP</samp>’ to show invisible traps. An actor with such an
22031
<a href="#it_005fglasses">it_glasses</a> in its inventory will be able to spot invisible traps.
22032
With the global attribute <a href="#ExtralifeGlasses">ExtralifeGlasses</a> even glasses generated by laser
22033
lighting an <a href="#it_005fextralife">it_extralife</a> can be configured to show invisible traps.
22035
<dl compact="compact">
22036
<dt> <b>Attributes:</b></dt>
22038
<dl compact="compact">
22039
<dt> <b>state</b>, <i>values</i>: <code>CLOSED</code>, <code>OPEN</code>; <i>default</i>: <code>CLOSED</code> See section <a href="#state">state</a></dt>
22040
<dd><p>A ‘<samp>CLOSED</samp>’ trap is intact and invisible, an ‘<samp>OPEN</samp>’ trap is broken and
22043
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
22044
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
22045
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
22048
<dt> <b>Messages:</b></dt>
22050
<dl compact="compact">
22051
<dt> <b>signal</b> See section <a href="#signal">signal</a></dt>
22052
<dd><p>Opens the trap on value ‘<samp>1</samp>’
22054
<dt> <b>toggle</b> See section <a href="#toggle">toggle</a></dt>
22055
<dd><p>Opens the trap.
22057
<dt> <b>open</b> See section <a href="#open">open</a></dt>
22058
<dd><p>Opens the trap.
22062
<dt> <b>Variants:</b></dt>
22063
<dd><dl compact="compact">
22064
<dt> <img src="images/it_trap.png" alt="images/it_trap"><p> <b>it_trap</b>
22072
<a name="it_005ftrigger"></a>
22073
<table cellpadding="1" cellspacing="1" border="0">
22074
<tr><td valign="middle" align="left">[<a href="#it_005ftrap" title="Previous section in reading order"> < </a>]</td>
22075
<td valign="middle" align="left">[<a href="#it_005fvortex" title="Next section in reading order"> > </a>]</td>
22076
<td valign="middle" align="left"> </td>
22077
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
22078
<td valign="middle" align="left">[<a href="#Static-Items" title="Up section"> Up </a>]</td>
22079
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
22080
<td valign="middle" align="left"> </td>
22081
<td valign="middle" align="left"> </td>
22082
<td valign="middle" align="left"> </td>
22083
<td valign="middle" align="left"> </td>
22084
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
22085
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
22086
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
22087
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
22089
<a name="it_005ftrigger-1"></a>
22090
<h3 class="subsection">8.4.18 it_trigger</h3>
22091
<a name="index-it_005ftrigger"></a>
22093
<p>The trigger item is a switch on top of a floor that reacts on actors and
22094
stones on top of it that may press it. It performs actions when it is initially
22095
pressed and again when it releases after the last object left it. A pressed
22096
trigger is in state ‘<samp>ON</samp>’ and will send an action value of ‘<samp>true</samp>’, a
22097
released trigger is in state ‘<samp>OFF</samp>’ and will send an action value of
22098
‘<samp>false</samp>’.
22100
<p>Only actors moving on the floor will press triggers. An actor jumping over a
22101
trigger will not press it. An actor jumping on a trigger will release and press
22104
<p>Just solid stones will press the trigger when pushed onto it. Floating, hollow
22105
stones will generally not press the trigger with the exception of the hollow,
22106
central puzzle stone (see section <a href="#st_005fpuzzle">st_puzzle</a>).
22108
<p>There is no way to set the state of a trigger manually. But the state can
22109
nevertheless be read. At initialization a trigger that is pressed by objects
22110
will start in state ‘<samp>ON</samp>’ without sending actions due to the
22111
<a href="#Snapshot-Principle">Snapshot Principle</a>.
22113
<p>You can make the trigger invisible by setting its attribute. Be aware that it
22114
still produces its click-sounds and the user will notice that actors cannot drop
22115
items onto the same grid position.
22117
<p>Alternative items that react just on actors are <a href="#it_005fsensor">it_sensor</a> and
22118
<a href="#it_005fcross">it_cross</a>. Another switch that reacts on the actors mass and stones are
22119
the <a href="#fl_005fscales">fl_scales</a>.
22121
<dl compact="compact">
22122
<dt> <b>Attributes:</b></dt>
22124
<dl compact="compact">
22125
<dt> <b>state</b>, <i>values</i>: <code>ON</code>, <code>OFF</code>; <i>access</i>: <code>read only</code> See section <a href="#state">state</a></dt>
22126
<dd><p>The current switch state - ‘<samp>ON</samp>’ for a pressed trigger, ‘<samp>OFF</samp>’ for a
22130
<dt> <b>invisible</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
22131
<dd><p>An invisible trigger is totally transparent. But the user may notice it, as actors
22132
cannot drop items onto the same grid position.
22135
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
22136
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
22137
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
22141
<dt> <b>Messages:</b> none</dt>
22142
<dt> <b>Action:</b> See section <a href="#target">target</a>, See section <a href="#action">action</a></dt>
22143
<dt> <b>Variants:</b></dt>
22144
<dd><dl compact="compact">
22145
<dt> <img src="images/it_trigger.png" alt="images/it_trigger"><p> <b>it_trigger</b>
22154
<a name="it_005fvortex"></a>
22155
<table cellpadding="1" cellspacing="1" border="0">
22156
<tr><td valign="middle" align="left">[<a href="#it_005ftrigger" title="Previous section in reading order"> < </a>]</td>
22157
<td valign="middle" align="left">[<a href="#it_005fwormhole" title="Next section in reading order"> > </a>]</td>
22158
<td valign="middle" align="left"> </td>
22159
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
22160
<td valign="middle" align="left">[<a href="#Static-Items" title="Up section"> Up </a>]</td>
22161
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
22162
<td valign="middle" align="left"> </td>
22163
<td valign="middle" align="left"> </td>
22164
<td valign="middle" align="left"> </td>
22165
<td valign="middle" align="left"> </td>
22166
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
22167
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
22168
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
22169
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
22171
<a name="it_005fvortex-1"></a>
22172
<h3 class="subsection">8.4.19 it_vortex</h3>
22173
<a name="index-it_005fvortex"></a>
22175
<p>Teleports <a href="#ac_005fmarble">ac_marble</a> and <a href="#ac_005fpearl">ac_pearl</a> to a given ‘<samp>destination</samp>’.
22176
Unlike <a href="#it_005fwormhole">it_wormhole</a> it does not teleport other <a href="#Actors">Actors</a>.
22178
<p>In the simplest case, a vortex is connected to a single destination given by
22179
an object or a position. If the destination is not blocked by a stone the
22180
actor will be teleported to the destination.
22182
<p>If multiple destination addresses are given, the actor will be teleported
22183
to the single destinations in sequence. Blocked destinations are indicated by
22184
sparkles. Finally the actor exists on the first unblocked destination. If no
22185
unblocked destination exists the marble exists at the starting vortex. A level
22186
author can write nice puzzle which require the user to block destinations to
22187
reach the final destination of a vortex.
22189
<p>Vortices can be ‘<samp>OPEN</samp>’ or ‘<samp>CLOSED</samp>’. Of course an actor can enter just
22190
an open vortex. Closed vortices at the destination are opened automatically.
22191
By default such vortices remain open. By usage of the attribute ‘<samp>autoclose</samp>’
22192
you can configure a vortex to close after an actor has been emitted. This helps
22193
the user to leave the vortex by keeping the marble from being reinserted into
22194
the vortex. Of course an autoclose disables the user to return, too. If this
22195
is not your intention you set additionally the attribute ‘<samp>autoopen</samp>’ to
22196
<code>true</code>. The vortex will reopen again when the marble leaves the closed
22197
vortex. If the user did directly jump out of the vortex, it will reopen when
22198
the user enters the vortex grid again.
22200
<p>Actors are emitted by vortices in a jumping fashion. The user can accelerate
22201
the actor for a short period and the actor may jump out of a vortex into the
22204
<p>Vortex teleportation takes a short amount of time and the involved vortices are
22205
blocked for other teleporting request during this process. Thus it is no problem
22206
to set up destinations of vortices that build a cycle.
22208
<p>Rubberbands bound to teleported actors are cut by default. The attribute
22209
‘<samp>scissor</samp>’ allows you to control the cutting behaviour.
22211
<p>But the teleporting feature of a vortices is not limited to actors. A water
22212
flood will spread through a vortex, too. In contrast to actors the flood will
22213
spread to all destinations at the same time. Of course a closed vortex on
22214
either side of the teleportation will block a flood from spreading. But the
22215
flood continues as soon as the vortices are opened again. Destinations will
22216
not be blocked by stones for a flood penetrating the grid from beneath, but
22217
may block the water from spreading further from the destination grid positions.
22218
All important details are explained in section <a href="#Flood-Spreading">Flood Spreading</a>.
22220
<dl compact="compact">
22221
<dt> <b>Attributes:</b></dt>
22222
<dd><dl compact="compact">
22223
<dt> <b>state</b>, <i>values</i>: <code>OPEN</code>, <code>CLOSED</code>; <i>default</i>: <code>OPEN</code> See section <a href="#state">state</a></dt>
22224
<dd><p>The visual state of a vortex. An ‘<samp>OPEN</samp>’ vortex may still be busy due
22225
to ongoing teleportations and may not accept a marble.
22228
<dt> <b>destination</b>, <i>values</i>: tokens or position; <i>default</i>: <code>nil</code> See section <a href="#destination">destination</a></dt>
22229
<dd><p>The destination of the teleport given by an object or a position.
22232
<dt> <b>autoclose</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
22233
<dd><p>Flag that indicates whether the vortex should be closed after a teleport.
22236
<dt> <b>autoopen</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
22237
<dd><p>Flag that indicates whether the vortex should open when an actor enters the grid
22238
or leaves the vortex.
22241
<dt> <b>scissor</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code></dt>
22242
<dd><p>Rubberband cutting behaviour on teleporting.
22244
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
22245
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
22246
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
22250
<dt> <b>Messages:</b></dt>
22251
<dd><dl compact="compact">
22252
<dt> <b>signal</b> See section <a href="#signal">signal</a></dt>
22253
<dd><p>Opens the vortex on value ‘<samp>1</samp>’, and closes the vortex on value ‘<samp>0</samp>’.
22255
<dt> <b>toggle</b> See section <a href="#toggle">toggle</a></dt>
22256
<dd><p>Opens a closed vortex and closes an open vortex if possible.
22258
<dt> <b>open</b> See section <a href="#open">open</a></dt>
22259
<dd><p>Tries to open the vortex.
22261
<dt> <b>close</b> See section <a href="#close">close</a></dt>
22262
<dd><p>Tries to close the vortex.
22267
<dt> <b>Action:</b> none</dt>
22268
<dt> <b>Variants:</b></dt>
22269
<dd><dl compact="compact">
22270
<dt> <img src="images/it_vortex.png" alt="images/it_vortex"><p> <b>it_vortex</b>: state = <code>OPEN</code>.
22272
<dt> <img src="images/it_vortex.png" alt="images/it_vortex"><p> <b>it_vortex_open</b>: state = <code>OPEN</code>.
22274
<dt> <img src="images/it_vortex_4.png" alt="images/it_vortex_4"><p> <b>it_vortex_closed</b>: state ‘<samp>CLOSED</samp>’.
22281
<a name="it_005fwormhole"></a>
22282
<table cellpadding="1" cellspacing="1" border="0">
22283
<tr><td valign="middle" align="left">[<a href="#it_005fvortex" title="Previous section in reading order"> < </a>]</td>
22284
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next section in reading order"> > </a>]</td>
22285
<td valign="middle" align="left"> </td>
22286
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
22287
<td valign="middle" align="left">[<a href="#Static-Items" title="Up section"> Up </a>]</td>
22288
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Next chapter"> >> </a>]</td>
22289
<td valign="middle" align="left"> </td>
22290
<td valign="middle" align="left"> </td>
22291
<td valign="middle" align="left"> </td>
22292
<td valign="middle" align="left"> </td>
22293
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
22294
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
22295
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
22296
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
22298
<a name="it_005fwormhole-1"></a>
22299
<h3 class="subsection">8.4.20 it_wormhole</h3>
22300
<a name="index-it_005fwormhole"></a>
22302
<p>Teleports <a href="#Actors">Actors</a> of any kind to a given ‘<samp>destination</samp>’. Unlike
22303
<a href="#it_005fvortex">it_vortex</a> every wormhole has a unique destination. But of course the
22304
destination may be another wormhole which instantly teleports the actor again.
22305
An infinite circle of wormholes that are connected by destinations is forbidden.
22307
<p>A wormhole can attract or repel actors in its ‘<samp>range</samp>’ with a force
22308
proportional to the ‘<samp>strength</samp>’ and the inverse of the squared distance.
22309
The force can be switched ‘<samp>ON</samp>’ and ‘<samp>OFF</samp>’ and is represented by its
22310
external ‘<samp>state</samp>’. Note that no forces are applied to actors at a distance
22311
smaller than 0.05 grids to avoid extraordinary large forces.
22313
<p>Rubberbands bound to teleported actors are cut by default. The attribute
22314
‘<samp>scissor</samp>’ allows you to control the cutting behaviour.
22316
<p>After teleporting an actor, the wormhole’s teleporting ability may be switched
22317
off for a short latency period given by ‘<samp>interval</samp>’. A latency separates
22318
actors traveling through a wormhole and avoids overlapping actors at the
22321
<p>But the teleporting feature of a wormhole is not limited to actors. A water
22322
flood will spread through a wormhole, too. Of course all actor related
22323
attributes described above have no influence on the flood. Just the
22324
‘<samp>destination</samp>’ is important as explained in details in <a href="#Flood-Spreading">Flood Spreading</a>.
22326
<dl compact="compact">
22327
<dt> <b>Attributes:</b></dt>
22328
<dd><dl compact="compact">
22329
<dt> <b>state</b>, <i>values</i>: <code>ON</code>, <code>OFF</code>; <i>default</i>: <code>ON</code> See section <a href="#state">state</a></dt>
22330
<dd><p>The current force state - ‘<samp>ON</samp>’ for a force applying wormholes, ‘<samp>OFF</samp>’
22331
for force neutral wormholes.
22333
<dt> <b>destination</b>, <i>values</i>: tokens or position; <i>default</i>: <code>nil</code> See section <a href="#destination">destination</a></dt>
22334
<dd><p>The destination of the teleport given by an object or a position.
22336
<dt> <b>range</b> <i>values</i>: float number greater or equal 0; <i>default</i>: <code>10.0</code> See section <a href="#WormholeRange">WormholeRange</a></dt>
22337
<dd><p>The distance up to which the wormhole applies forces to actors.
22339
<dt> <b>strength</b> <i>values</i>: float number; <i>default</i>: <code>+30.0</code> See section <a href="#WormholeStrength">WormholeStrength</a></dt>
22340
<dd><p>A scalar factor for the wormhole force. Positive numbers are attracting forces
22341
where as negative numbers are repelling forces.
22343
<dt> <b>scissor</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code></dt>
22344
<dd><p>Rubberband cutting behaviour on teleporting.
22346
<dt> <b>interval</b> <i>values</i>: float number greater or equal 0; <i>default</i>: <code>0.0</code></dt>
22347
<dd><p>The latency time after a teleport during which no further teleports take place.
22349
<dt> <b>freezable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#freezable">freezable</a></dt>
22350
<dt> <b>liftable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#liftable">liftable</a></dt>
22351
<dt> <b>portable</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: <code>read only</code> See section <a href="#portable">portable</a></dt>
22355
<dt> <b>Messages:</b></dt>
22356
<dd><dl compact="compact">
22357
<dt> <b>signal</b> See section <a href="#signal">signal</a></dt>
22358
<dd><p>A signal of value 1 switches the wormhole force on, a value of 0 switches the
22359
wormhole force off.
22361
<dt> <b>toggle</b> See section <a href="#toggle">toggle</a></dt>
22362
<dd><p>A toggle causes a change in the wormhole force activity state.
22364
<dt> <b>on</b> See section <a href="#on">on</a></dt>
22365
<dd><p>Switches the wormhole on.
22367
<dt> <b>off</b> See section <a href="#off">off</a></dt>
22368
<dd><p>Switches the wormhole off.
22373
<dt> <b>Action:</b> none</dt>
22374
<dt> <b>Variants:</b></dt>
22375
<dd><dl compact="compact">
22376
<dt> <img src="images/it_wormhole.png" alt="images/it_wormhole"><p> <b>it_wormhole</b>: state = <code>ON</code>.
22378
<dt> <img src="images/it_wormhole.png" alt="images/it_wormhole"><p> <b>it_wormhole_on</b>: state = <code>ON</code>.
22380
<dt> <img src="images/fl_white.png" alt="images/fl_white"><p> <b>it_wormhole_off</b>: state <code>OFF</code>.
22388
<a name="Stone-Objects"></a>
22389
<table cellpadding="1" cellspacing="1" border="0">
22390
<tr><td valign="middle" align="left">[<a href="#it_005fwormhole" title="Previous section in reading order"> < </a>]</td>
22391
<td valign="middle" align="left">[<a href="#Stone-Overview" title="Next section in reading order"> > </a>]</td>
22392
<td valign="middle" align="left"> </td>
22393
<td valign="middle" align="left">[<a href="#Item-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
22394
<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up </a>]</td>
22395
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
22396
<td valign="middle" align="left"> </td>
22397
<td valign="middle" align="left"> </td>
22398
<td valign="middle" align="left"> </td>
22399
<td valign="middle" align="left"> </td>
22400
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
22401
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
22402
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
22403
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
22405
<a name="Stone-Objects-1"></a>
22406
<h1 class="chapter">9. Stone Objects</h1>
22408
<table class="menu" border="0" cellspacing="0">
22409
<tr><td align="left" valign="top"><a href="#Stone-Overview">9.1 Stone Overview</a></td><td> </td><td align="left" valign="top">
22411
<tr><td align="left" valign="top"><a href="#Stone-Attributes">9.2 Stone Attributes</a></td><td> </td><td align="left" valign="top">
22413
<tr><td align="left" valign="top"><a href="#Standard-Stones">9.3 Standard Stones</a></td><td> </td><td align="left" valign="top">
22415
<tr><td align="left" valign="top"><a href="#Cluster-Stones">9.4 Cluster Stones</a></td><td> </td><td align="left" valign="top">
22417
<tr><td align="left" valign="top"><a href="#Special-Stones">9.5 Special Stones</a></td><td> </td><td align="left" valign="top">
22419
<tr><td align="left" valign="top"><a href="#Stone-Feature-Summaries">9.6 Stone Feature Summaries</a></td><td> </td><td align="left" valign="top"> Tables of transparent, breakable, ... stones
22424
<a name="Stone-Overview"></a>
22425
<table cellpadding="1" cellspacing="1" border="0">
22426
<tr><td valign="middle" align="left">[<a href="#Stone-Objects" title="Previous section in reading order"> < </a>]</td>
22427
<td valign="middle" align="left">[<a href="#Stone-Attributes" title="Next section in reading order"> > </a>]</td>
22428
<td valign="middle" align="left"> </td>
22429
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
22430
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Up section"> Up </a>]</td>
22431
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
22432
<td valign="middle" align="left"> </td>
22433
<td valign="middle" align="left"> </td>
22434
<td valign="middle" align="left"> </td>
22435
<td valign="middle" align="left"> </td>
22436
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
22437
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
22438
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
22439
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
22441
<a name="Stone-Overview-1"></a>
22442
<h2 class="section">9.1 Stone Overview</h2>
22445
<tr><td width="8%"><img src="images/st_actorimpulse.png" alt="images/st_actorimpulse"></td><td width="25%"><a href="#st_005factorimpulse">st_actorimpulse</a></td><td width="8%"><img src="images/st_ancient.png" alt="images/st_ancient"></td><td width="25%"><a href="#st_005fancient">st_ancient</a></td><td width="9%"><img src="images/st_barrier.png" alt="images/st_barrier"></td><td width="25%"><a href="#st_005fbarrier">st_barrier</a></td></tr>
22446
<tr><td width="8%"><img src="images/st_beads.png" alt="images/st_beads"></td><td width="25%"><a href="#st_005fbeads">st_beads</a></td><td width="8%"><img src="images/st_blocker.png" alt="images/st_blocker"></td><td width="25%"><a href="#st_005fblocker">st_blocker</a></td><td width="9%"><img src="images/st_boulder.png" alt="images/st_boulder"></td><td width="25%"><a href="#st_005fboulder">st_boulder</a></td></tr>
22447
<tr><td width="8%"><img src="images/st_bluegray.png" alt="images/st_bluegray"></td><td width="25%"><a href="#st_005fbluegray">st_bluegray</a> or <a href="#st_005fthief">st_thief</a></td><td width="8%"><img src="images/st_bluesand.png" alt="images/st_bluesand"></td><td width="25%"><a href="#st_005fbluesand">st_bluesand</a></td><td width="9%"><img src="images/st_blur_cross.png" alt="images/st_blur_cross"></td><td width="25%"><a href="#st_005fblur">st_blur</a>_cross</td></tr>
22448
<tr><td width="8%"><img src="images/st_blur_straight.png" alt="images/st_blur_straight"></td><td width="25%"><a href="#st_005fblur">st_blur</a>_straight</td><td width="8%"><img src="images/st_box_hay.png" alt="images/st_box_hay"></td><td width="25%"><a href="#st_005fbox">st_box</a>_hay</td><td width="9%"><img src="images/st_box_rock.png" alt="images/st_box_rock"></td><td width="25%"><a href="#st_005fbox">st_box</a>_rock</td></tr>
22449
<tr><td width="8%"><img src="images/st_box_wood.png" alt="images/st_box_wood"></td><td width="25%"><a href="#st_005fbox">st_box</a>_wood</td><td width="8%"><img src="images/st_brake.png" alt="images/st_brake"></td><td width="25%"><a href="#st_005fbrake">st_brake</a></td><td width="9%"><img src="images/st_break_black.png" alt="images/st_break_black"></td><td width="25%"><a href="#st_005fbreak">st_break</a>_black</td></tr>
22450
<tr><td width="8%"><img src="images/st_break_boulder.png" alt="images/st_break_boulder"></td><td width="25%"><a href="#st_005fbreak">st_break</a>_boulder</td><td width="8%"><img src="images/st_break_bug.png" alt="images/st_break_bug"></td><td width="25%"><a href="#st_005fbreak">st_break</a>_bug</td><td width="9%"><img src="images/st_break_oxydc.png" alt="images/st_break_oxydc"></td><td width="25%"><a href="#st_005fbreak">st_break</a>_oxydc</td></tr>
22451
<tr><td width="8%"><img src="images/st_break_plain.png" alt="images/st_break_plain"></td><td width="25%"><a href="#st_005fbreak">st_break</a>_plain</td><td width="8%"><img src="images/st_break_white.png" alt="images/st_break_white"></td><td width="25%"><a href="#st_005fbreak">st_break</a>_white</td><td width="9%"><img src="images/st_brick.png" alt="images/st_brick"></td><td width="25%"><a href="#st_005fbrick">st_brick</a></td></tr>
22452
<tr><td width="8%"><img src="images/st_brownie.png" alt="images/st_brownie"></td><td width="25%"><a href="#st_005fbrownie">st_brownie</a></td><td width="8%"><img src="images/st_brownmarble.png" alt="images/st_brownmarble"></td><td width="25%"><a href="#st_005fbrownmarble">st_brownmarble</a></td><td width="9%"><img src="images/st_brownpyramid.png" alt="images/st_brownpyramid"></td><td width="25%"><a href="#st_005fbrownpyramid">st_brownpyramid</a></td></tr>
22453
<tr><td width="8%"><img src="images/st_camouflage.png" alt="images/st_camouflage"></td><td width="25%"><a href="#st_005fcamouflage">st_camouflage</a></td><td width="8%"><img src="images/st_charge_minus.png" alt="images/st_charge_minus"></td><td width="25%"><a href="#st_005fcharge">st_charge</a>_minus</td><td width="9%"><img src="images/st_charge_plus.png" alt="images/st_charge_plus"></td><td width="25%"><a href="#st_005fcharge">st_charge</a>_plus</td></tr>
22454
<tr><td width="8%"><img src="images/st_charge_zero.png" alt="images/st_charge_zero"></td><td width="25%"><a href="#st_005fcharge">st_charge</a>_zero</td><td width="8%"><img src="images/st_chess_black.png" alt="images/st_chess_black"></td><td width="25%"><a href="#st_005fchess">st_chess</a>_black</td><td width="9%"><img src="images/st_chess_white.png" alt="images/st_chess_white"></td><td width="25%"><a href="#st_005fchess">st_chess</a>_white</td></tr>
22455
<tr><td width="8%"><img src="images/st_coinslot.png" alt="images/st_coinslot"></td><td width="25%"><a href="#st_005fcoinslot">st_coinslot</a></td><td width="8%"><img src="images/st_concrete.png" alt="images/st_concrete"></td><td width="25%"><a href="#st_005fconcrete">st_concrete</a></td><td width="9%"><img src="images/st_darkglass.png" alt="images/st_darkglass"></td><td width="25%"><a href="#st_005fdarkglass">st_darkglass</a></td></tr>
22456
<tr><td width="8%"><img src="images/st_darkgray.png" alt="images/st_darkgray"></td><td width="25%"><a href="#st_005fdarkgray">st_darkgray</a></td><td width="8%"><img src="images/st_death.png" alt="images/st_death"></td><td width="25%"><a href="#st_005fdeath">st_death</a></td><td width="9%"><img src="images/st_disco.png" alt="images/st_disco"></td><td width="25%"><a href="#st_005fdisco">st_disco</a>_light</td></tr>
22457
<tr><td width="8%"><img src="images/st_disco_2.png" alt="images/st_disco_2"></td><td width="25%"><a href="#st_005fdisco">st_disco</a>_medium</td><td width="8%"><img src="images/st_disco_3.png" alt="images/st_disco_3"></td><td width="25%"><a href="#st_005fdisco">st_disco</a>_dark</td><td width="9%"><img src="images/st_door_d_ew_g.png" alt="images/st_door_d_ew_g"></td><td width="25%"><a href="#st_005fdoor">st_door</a>_d (ew)</td></tr>
22458
<tr><td width="8%"><img src="images/st_door_d_ns_7.png" alt="images/st_door_d_ns_7"></td><td width="25%"><a href="#st_005fdoor">st_door</a>_d (ns)</td><td width="8%"><img src="images/st_dispenser_bombblack.png" alt="images/st_dispenser_bombblack"></td><td width="25%"><a href="#st_005fdispenser">st_dispenser</a>_bombblack</td><td width="9%"><img src="images/st_dispenser_bombwhite.png" alt="images/st_dispenser_bombwhite"></td><td width="25%"><a href="#st_005fdispenser">st_dispenser</a>_bombwhite</td></tr>
22459
<tr><td width="8%"><img src="images/st_dispenser_dynamite.png" alt="images/st_dispenser_dynamite"></td><td width="25%"><a href="#st_005fdispenser">st_dispenser</a>_dynamite</td><td width="8%"><img src="images/st_dispenser_extralife.png" alt="images/st_dispenser_extralife"></td><td width="25%"><a href="#st_005fdispenser">st_dispenser</a>_extralife</td><td width="9%"><img src="images/st_oxydc_open.png" alt="images/st_oxydc_open"></td><td width="25%"><a href="#st_005ffake">st_fake</a>_oxydc (open)</td></tr>
22460
<tr><td width="8%"><img src="images/st_flash.png" alt="images/st_flash"></td><td width="25%"><a href="#st_005fflash">st_flash</a></td><td width="8%"><img src="images/st_flat.png" alt="images/st_flat"></td><td width="25%"><a href="#st_005fflat">st_flat</a></td><td width="9%"><img src="images/st_floppy_off.png" alt="images/st_floppy_off"></td><td width="25%"><a href="#st_005ffloppy">st_floppy</a>_off</td></tr>
22461
<tr><td width="8%"><img src="images/st_floppy_on.png" alt="images/st_floppy_on"></td><td width="25%"><a href="#st_005ffloppy">st_floppy</a>_on</td><td width="8%"><img src="images/st_fourswitch.png" alt="images/st_fourswitch"></td><td width="25%"><a href="#st_005ffourswitch">st_fourswitch</a></td><td width="9%"><img src="images/st_granite.png" alt="images/st_granite"></td><td width="25%"><a href="#st_005fgranite">st_granite</a></td></tr>
22462
<tr><td width="8%"><img src="images/st_grate_cross.png" alt="images/st_grate_cross"></td><td width="25%"><a href="#st_005fgrate">st_grate</a>_cross</td><td width="8%"><img src="images/st_grate_framed.png" alt="images/st_grate_framed"></td><td width="25%"><a href="#st_005fgrate">st_grate</a>_framed</td><td width="9%"><img src="images/st_greenbrown.png" alt="images/st_greenbrown"></td><td width="25%"><a href="#st_005fgreenbrown">st_greenbrown</a></td></tr>
22463
<tr><td width="8%"><img src="images/st_greengray.png" alt="images/st_greengray"></td><td width="25%"><a href="#st_005fgreengray">st_greengray</a></td><td width="8%"><img src="images/st_ice.png" alt="images/st_ice"></td><td width="25%"><a href="#st_005fice">st_ice</a></td><td width="9%"></td><td width="25%"><a href="#st_005finvisible">st_invisible</a> or <a href="#st_005fghost">st_ghost</a></td></tr>
22464
<tr><td width="8%"><img src="images/st_jamb_black.png" alt="images/st_jamb_black"></td><td width="25%"><a href="#st_005fjamb">st_jamb</a>_black</td><td width="8%"><img src="images/st_jamb_white.png" alt="images/st_jamb_white"></td><td width="25%"><a href="#st_005fjamb">st_jamb</a>_white</td><td width="9%"><img src="images/st_key_off.png" alt="images/st_key_off"></td><td width="25%"><a href="#st_005fkey">st_key</a>_off</td></tr>
22465
<tr><td width="8%"><img src="images/st_key_on.png" alt="images/st_key_on"></td><td width="25%"><a href="#st_005fkey">st_key</a>_on</td><td width="8%"><img src="images/st_knight.png" alt="images/st_knight"></td><td width="25%"><a href="#st_005fknight">st_knight</a></td><td width="9%"><img src="images/st_laser_d.png" alt="images/st_laser_d"></td><td width="25%"><a href="#st_005flaser">st_laser</a></td></tr>
22466
<tr><td width="8%"><img src="images/st_lightglass.png" alt="images/st_lightglass"></td><td width="25%"><a href="#st_005flightglass">st_lightglass</a></td><td width="8%"><img src="images/st_lightpassenger.png" alt="images/st_lightpassenger"></td><td width="25%"><a href="#st_005flightpassenger">st_lightpassenger</a></td><td width="9%"><img src="images/st_mail.png" alt="images/st_mail"></td><td width="25%"><a href="#st_005fmail">st_mail</a></td></tr>
22467
<tr><td width="8%"><img src="images/st_metal.png" alt="images/st_metal"></td><td width="25%"><a href="#st_005fmetal">st_metal</a></td><td width="8%"><img src="images/st_mirror_static_2.png" alt="images/st_mirror_static_2"></td><td width="25%"><a href="#st_005fmirror">st_mirror</a>_triangle</td><td width="9%"><img src="images/st_mirror_static_b2.png" alt="images/st_mirror_static_b2"></td><td width="25%"><a href="#st_005fmirror">st_mirror</a>_triangle</td></tr>
22468
<tr><td width="8%"><img src="images/st_mirror_static_c2.png" alt="images/st_mirror_static_c2"></td><td width="25%"><a href="#st_005fmirror">st_mirror</a>_slab</td><td width="8%"><img src="images/st_mirror_static_d2.png" alt="images/st_mirror_static_d2"></td><td width="25%"><a href="#st_005fmirror">st_mirror</a>_slab</td><td width="9%"><img src="images/st_mirror_static_e2.png" alt="images/st_mirror_static_e2"></td><td width="25%"><a href="#st_005fmirror">st_mirror</a>_sheets</td></tr>
22469
<tr><td width="8%"><img src="images/st_monoflop.png" alt="images/st_monoflop"></td><td width="25%"><a href="#st_005fmonoflop">st_monoflop</a></td><td width="8%"><img src="images/st_monoflop_2.png" alt="images/st_monoflop_2"></td><td width="25%"><a href="#st_005fmonoflop">st_monoflop</a></td><td width="9%"><img src="images/st_oneway.png" alt="images/st_oneway"></td><td width="25%"><a href="#st_005foneway">st_oneway</a></td></tr>
22470
<tr><td width="8%"><img src="images/st_oneway_b.png" alt="images/st_oneway_b"></td><td width="25%"><a href="#st_005foneway">st_oneway</a>_black</td><td width="8%"><img src="images/st_oneway_c.png" alt="images/st_oneway_c"></td><td width="25%"><a href="#st_005foneway">st_oneway</a>_white</td><td width="9%"><img src="images/st_oxyda.png" alt="images/st_oxyda"></td><td width="25%"><a href="#st_005foxyd">st_oxyd</a>_a</td></tr>
22471
<tr><td width="8%"><img src="images/st_oxydb.png" alt="images/st_oxydb"></td><td width="25%"><a href="#st_005foxyd">st_oxyd</a>_b or <a href="#st_005fquake">st_quake</a> <br> or <a href="#st_005flaserswitch">st_laserswitch</a></td><td width="8%"><img src="images/st_oxydc.png" alt="images/st_oxydc"></td><td width="25%"><a href="#st_005foxyd">st_oxyd</a>_c</td><td width="9%"><img src="images/st_oxydd.png" alt="images/st_oxydd"></td><td width="25%"><a href="#st_005foxyd">st_oxyd</a>_d</td></tr>
22472
<tr><td width="8%"><img src="images/st_oxyde.png" alt="images/st_oxyde"></td><td width="25%"><a href="#st_005foxyd">st_oxyd</a>_e</td><td width="8%"><img src="images/st_panel.png" alt="images/st_panel"></td><td width="25%"><a href="#st_005fpanel">st_panel</a></td><td width="9%"><img src="images/st_passage_black_square.png" alt="images/st_passage_black_square"></td><td width="25%"><a href="#st_005fpassage">st_passage</a>_black</td></tr>
22473
<tr><td width="8%"><img src="images/st_passage_black_slash.png" alt="images/st_passage_black_slash"></td><td width="25%"><a href="#st_005fpassage">st_passage</a>_black</td><td width="8%"><img src="images/st_passage_black_cross.png" alt="images/st_passage_black_cross"></td><td width="25%"><a href="#st_005fpassage">st_passage</a>_black</td><td width="9%"><img src="images/st_passage_black_frame.png" alt="images/st_passage_black_frame"></td><td width="25%"><a href="#st_005fpassage">st_passage</a>_black</td></tr>
22474
<tr><td width="8%"><img src="images/st_passage_white_square.png" alt="images/st_passage_white_square"></td><td width="25%"><a href="#st_005fpassage">st_passage</a>_white</td><td width="8%"><img src="images/st_passage_white_slash.png" alt="images/st_passage_white_slash"></td><td width="25%"><a href="#st_005fpassage">st_passage</a>_white</td><td width="9%"><img src="images/st_passage_white_cross.png" alt="images/st_passage_white_cross"></td><td width="25%"><a href="#st_005fpassage">st_passage</a>_white</td></tr>
22475
<tr><td width="8%"><img src="images/st_passage_white_frame.png" alt="images/st_passage_white_frame"></td><td width="25%"><a href="#st_005fpassage">st_passage</a>_white</td><td width="8%"><img src="images/st_pinkbumps.png" alt="images/st_pinkbumps"></td><td width="25%"><a href="#st_005fpinkbumps">st_pinkbumps</a></td><td width="9%"><img src="images/st_plaster.png" alt="images/st_plaster"></td><td width="25%"><a href="#st_005fplaster">st_plaster</a></td></tr>
22476
<tr><td width="8%"><img src="images/st_plop_slate.png" alt="images/st_plop_slate"></td><td width="25%"><a href="#st_005fplop">st_plop</a>_slate</td><td width="8%"><img src="images/st_portal_horse.png" alt="images/st_portal_horse"></td><td width="25%"><a href="#st_005fportal">st_portal</a></td><td width="9%"><img src="images/st_pull.png" alt="images/st_pull"></td><td width="25%"><a href="#st_005fpull">st_pull</a></td></tr>
22477
<tr><td width="8%"><img src="images/st_purplegray.png" alt="images/st_purplegray"></td><td width="25%"><a href="#st_005fpurplegray">st_purplegray</a></td><td width="8%"><img src="images/st_purplemarble.png" alt="images/st_purplemarble"></td><td width="25%"><a href="#st_005fpurplemarble">st_purplemarble</a></td><td width="9%"><img src="images/st_puzzle_blue_3.png" alt="images/st_puzzle_blue_3"></td><td width="25%"><a href="#st_005fpuzzle">st_puzzle</a>_blue or <a href="#st_005fturnstilearm">st_turnstilearm</a>_n</td></tr>
22478
<tr><td width="8%"><img src="images/st_puzzle_blue_d3.png" alt="images/st_puzzle_blue_d3"></td><td width="25%"><a href="#st_005fpuzzle">st_puzzle</a>_blue</td><td width="8%"><img src="images/st_puzzle_blue_hollow_d3.png" alt="images/st_puzzle_blue_hollow_d3"></td><td width="25%"><a href="#st_005fpuzzle">st_puzzle</a>_blue</td><td width="9%"><img src="images/st_puzzle_yellow_d3.png" alt="images/st_puzzle_yellow_d3"></td><td width="25%"><a href="#st_005fpuzzle">st_puzzle</a>_yellow</td></tr>
22479
<tr><td width="8%"><img src="images/st_puzzle_yellow_hollow_d3.png" alt="images/st_puzzle_yellow_hollow_d3"></td><td width="25%"><a href="#st_005fpuzzle">st_puzzle</a>_yellow</td><td width="8%"><img src="images/st_rawglass.png" alt="images/st_rawglass"></td><td width="25%"><a href="#st_005frawglass">st_rawglass</a></td><td width="9%"><img src="images/st_rawglass_quad.png" alt="images/st_rawglass_quad"></td><td width="25%"><a href="#st_005frawglass">st_rawglass</a>_quad</td></tr>
22480
<tr><td width="8%"><img src="images/st_redbrown.png" alt="images/st_redbrown"></td><td width="25%"><a href="#st_005fredbrown">st_redbrown</a></td><td width="8%"><img src="images/st_redfiber.png" alt="images/st_redfiber"></td><td width="25%"><a href="#st_005fredfiber">st_redfiber</a></td><td width="9%"><img src="images/st_redmarble.png" alt="images/st_redmarble"></td><td width="25%"><a href="#st_005fredmarble">st_redmarble</a></td></tr>
22481
<tr><td width="8%"><img src="images/st_redrock.png" alt="images/st_redrock"></td><td width="25%"><a href="#st_005fredrock">st_redrock</a></td><td width="8%"><img src="images/st_rotator_ccw.png" alt="images/st_rotator_ccw"></td><td width="25%"><a href="#st_005frotator">st_rotator</a>_ccw</td><td width="9%"><img src="images/st_rotator_cw.png" alt="images/st_rotator_cw"></td><td width="25%"><a href="#st_005frotator">st_rotator</a>_cw</td></tr>
22482
<tr><td width="8%"><img src="images/st_rubberband.png" alt="images/st_rubberband"></td><td width="25%"><a href="#st_005frubberband">st_rubberband</a></td><td width="8%"><img src="images/st_scissors.png" alt="images/st_scissors"></td><td width="25%"><a href="#st_005fscissors">st_scissors</a></td><td width="9%"><img src="images/st_shogun.png" alt="images/st_shogun"></td><td width="25%"><a href="#st_005fshogun">st_shogun</a>_s</td></tr>
22483
<tr><td width="8%"><img src="images/st_shogun_2.png" alt="images/st_shogun_2"></td><td width="25%"><a href="#st_005fshogun">st_shogun</a>_m</td><td width="8%"><img src="images/st_shogun_4.png" alt="images/st_shogun_4"></td><td width="25%"><a href="#st_005fshogun">st_shogun</a>_l</td><td width="9%"><img src="images/st_spitter_idle.png" alt="images/st_spitter_idle"></td><td width="25%"><a href="#st_005fspitter">st_spitter</a></td></tr>
22484
<tr><td width="8%"><img src="images/st_stoneimpulse.png" alt="images/st_stoneimpulse"></td><td width="25%"><a href="#st_005fstoneimpulse">st_stoneimpulse</a></td><td width="8%"><img src="images/st_stoneimpulse_hollow.png" alt="images/st_stoneimpulse_hollow"></td><td width="25%"><a href="#st_005fstoneimpulse">st_stoneimpulse</a>_hollow</td><td width="9%"><img src="images/st_surprise.png" alt="images/st_surprise"></td><td width="25%"><a href="#st_005fsurprise">st_surprise</a></td></tr>
22485
<tr><td width="8%"><img src="images/st_swap.png" alt="images/st_swap"></td><td width="25%"><a href="#st_005fswap">st_swap</a></td><td width="8%"><img src="images/st_switch.png" alt="images/st_switch"></td><td width="25%"><a href="#st_005fswitch">st_switch</a></td><td width="9%"><img src="images/st_switch_black.png" alt="images/st_switch_black"></td><td width="25%"><a href="#st_005fswitch">st_switch</a>_black</td></tr>
22486
<tr><td width="8%"><img src="images/st_switch_white.png" alt="images/st_switch_white"></td><td width="25%"><a href="#st_005fswitch">st_switch</a>_white</td><td width="8%"><img src="images/st_thief.png" alt="images/st_thief"></td><td width="25%"><a href="#st_005fthief">st_thief</a></td><td width="9%"><img src="images/st_thief_capture.png" alt="images/st_thief_capture"></td><td width="25%"><a href="#st_005fthief">st_thief</a></td></tr>
22487
<tr><td width="8%"><img src="images/st_thief_drunken.png" alt="images/st_thief_drunken"></td><td width="25%"><a href="#st_005fthief">st_thief</a></td><td width="8%"><img src="images/st_tigris.png" alt="images/st_tigris"></td><td width="25%"><a href="#st_005ftigris">st_tigris</a></td><td width="9%"><img src="images/st_timer_3.png" alt="images/st_timer_3"></td><td width="25%"><a href="#st_005ftimer">st_timer</a></td></tr>
22488
<tr><td width="8%"><img src="images/st_timer.png" alt="images/st_timer"></td><td width="25%"><a href="#st_005ftimer">st_timer</a></td><td width="8%"><img src="images/st_turnstile.png" alt="images/st_turnstile"></td><td width="25%"><a href="#st_005fturnstile">st_turnstile</a></td><td width="9%"><img src="images/st_turnstile_green.png" alt="images/st_turnstile_green"></td><td width="25%"><a href="#st_005fturnstile">st_turnstile</a>_green</td></tr>
22489
<tr><td width="8%"><img src="images/st_window_blue_3.png" alt="images/st_window_blue_3"></td><td width="25%"><a href="#st_005fwindow">st_window</a></td><td width="8%"><img src="images/st_window_green_3.png" alt="images/st_window_green_3"></td><td width="25%"><a href="#st_005fwindow">st_window</a></td><td width="9%"><img src="images/st_woven.png" alt="images/st_woven"></td><td width="25%"><a href="#st_005fwoven">st_woven</a></td></tr>
22490
<tr><td width="8%"><img src="images/st_yellow.png" alt="images/st_yellow"></td><td width="25%"><a href="#st_005fyellow">st_yellow</a></td><td width="8%"><img src="images/st_yinyang.png" alt="images/st_yinyang"></td><td width="25%"><a href="#st_005fyinyang">st_yinyang</a></td><td width="9%"><img src="images/st_yinyang_inactive.png" alt="images/st_yinyang_inactive"></td><td width="25%"><a href="#st_005fyinyang">st_yinyang</a>_inactive</td></tr>
22495
<a name="Stone-Attributes"></a>
22496
<table cellpadding="1" cellspacing="1" border="0">
22497
<tr><td valign="middle" align="left">[<a href="#Stone-Overview" title="Previous section in reading order"> < </a>]</td>
22498
<td valign="middle" align="left">[<a href="#breakable" title="Next section in reading order"> > </a>]</td>
22499
<td valign="middle" align="left"> </td>
22500
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
22501
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Up section"> Up </a>]</td>
22502
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
22503
<td valign="middle" align="left"> </td>
22504
<td valign="middle" align="left"> </td>
22505
<td valign="middle" align="left"> </td>
22506
<td valign="middle" align="left"> </td>
22507
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
22508
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
22509
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
22510
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
22512
<a name="Stone-Attributes-1"></a>
22513
<h2 class="section">9.2 Stone Attributes</h2>
22515
<table class="menu" border="0" cellspacing="0">
22516
<tr><td align="left" valign="top"><a href="#breakable">9.2.1 breakable</a></td><td> </td><td align="left" valign="top"> -
22518
<tr><td align="left" valign="top"><a href="#freeze_005fcheck-_0028stone_0029">9.2.2 freeze_check (stone)</a></td><td> </td><td align="left" valign="top"> Freeze Checking
22520
<tr><td align="left" valign="top"><a href="#hit_005f_002a">9.2.3 hit_*</a></td><td> </td><td align="left" valign="top"> -
22522
<tr><td align="left" valign="top"><a href="#hollow">9.2.4 hollow</a></td><td> </td><td align="left" valign="top"> -
22524
<tr><td align="left" valign="top"><a href="#hovering">9.2.5 hovering</a></td><td> </td><td align="left" valign="top"> -
22526
<tr><td align="left" valign="top"><a href="#movable">9.2.6 movable</a></td><td> </td><td align="left" valign="top"> -
22528
<tr><td align="left" valign="top"><a href="#transparent">9.2.7 transparent</a></td><td> </td><td align="left" valign="top"> -
22534
<a name="breakable"></a>
22535
<table cellpadding="1" cellspacing="1" border="0">
22536
<tr><td valign="middle" align="left">[<a href="#Stone-Attributes" title="Previous section in reading order"> < </a>]</td>
22537
<td valign="middle" align="left">[<a href="#freeze_005fcheck-_0028stone_0029" title="Next section in reading order"> > </a>]</td>
22538
<td valign="middle" align="left"> </td>
22539
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
22540
<td valign="middle" align="left">[<a href="#Stone-Attributes" title="Up section"> Up </a>]</td>
22541
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
22542
<td valign="middle" align="left"> </td>
22543
<td valign="middle" align="left"> </td>
22544
<td valign="middle" align="left"> </td>
22545
<td valign="middle" align="left"> </td>
22546
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
22547
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
22548
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
22549
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
22551
<a name="breakable-1"></a>
22552
<h3 class="subsection">9.2.1 breakable</h3>
22555
<dl compact="compact">
22556
<dt> <b>Type:</b> boolean</dt>
22557
<dt> <b>Values:</b> <code>false</code>, <code>true</code></dt>
22558
<dt> <b>Default:</b> <code>false</code></dt>
22559
<dt> <b>Access:</b> read/write</dt>
22563
<a name="freeze_005fcheck-_0028stone_0029"></a>
22564
<table cellpadding="1" cellspacing="1" border="0">
22565
<tr><td valign="middle" align="left">[<a href="#breakable" title="Previous section in reading order"> < </a>]</td>
22566
<td valign="middle" align="left">[<a href="#hit_005f_002a" title="Next section in reading order"> > </a>]</td>
22567
<td valign="middle" align="left"> </td>
22568
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
22569
<td valign="middle" align="left">[<a href="#Stone-Attributes" title="Up section"> Up </a>]</td>
22570
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
22571
<td valign="middle" align="left"> </td>
22572
<td valign="middle" align="left"> </td>
22573
<td valign="middle" align="left"> </td>
22574
<td valign="middle" align="left"> </td>
22575
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
22576
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
22577
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
22578
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
22580
<a name="freeze_005fcheck-_0028stone_0029-1"></a>
22581
<h3 class="subsection">9.2.2 freeze_check (stone)</h3>
22583
<p>If <code>true</code>, allows for <a href="#Freeze-Checking">Freeze Checking</a> for this stone. Note that
22584
Freeze Checking only works on those floors that have additionally set
22585
<code>freeze_check = true</code> on their own, see <a href="#freeze_005fcheck-_0028floor_0029">freeze_check (floor)</a>.
22587
<dl compact="compact">
22588
<dt> <b>Type:</b> boolean</dt>
22589
<dt> <b>Values:</b> <code>false</code>, <code>true</code></dt>
22590
<dt> <b>Default:</b> <code>false</code></dt>
22591
<dt> <b>Access:</b> read/write</dt>
22595
<a name="hit_005f_002a"></a>
22596
<table cellpadding="1" cellspacing="1" border="0">
22597
<tr><td valign="middle" align="left">[<a href="#freeze_005fcheck-_0028stone_0029" title="Previous section in reading order"> < </a>]</td>
22598
<td valign="middle" align="left">[<a href="#hollow" title="Next section in reading order"> > </a>]</td>
22599
<td valign="middle" align="left"> </td>
22600
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
22601
<td valign="middle" align="left">[<a href="#Stone-Attributes" title="Up section"> Up </a>]</td>
22602
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
22603
<td valign="middle" align="left"> </td>
22604
<td valign="middle" align="left"> </td>
22605
<td valign="middle" align="left"> </td>
22606
<td valign="middle" align="left"> </td>
22607
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
22608
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
22609
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
22610
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
22612
<a name="hit_005f_002a-1"></a>
22613
<h3 class="subsection">9.2.3 hit_*</h3>
22615
<p>A set of attributes that allow you to distort hit forces. Objects like
22616
<a href="#st_005fflash">st_flash</a>, <a href="#st_005fspitter">st_spitter</a> and <a href="#st_005factorimpulse">st_actorimpulse</a> apply forces that
22617
are either based on the hit velocity or the position.
22619
<p>By usage of a simple ‘<samp>hit_strength</samp>’ factor you can increase, decrease or
22620
invert the default factor. Note that you must not set this attribute, if you
22621
want to use the default.
22623
<p>By setting the four attributes ‘<samp>hit_distortion_xx</samp>’, ‘<samp>hit_distortion_xy</samp>’,
22624
‘<samp>hit_distortion_yx</samp>’ and ‘<samp>hit_distortion_yy</samp>’ you can describe a
22625
matrix to set up a new direction. These attributes default to 1, 0, 0, 1.
22626
A 90 degree clockwise turn is described by 0, 1, -1, 0.
22628
<dl compact="compact">
22629
<dt> <b>Type:</b> number</dt>
22630
<dt> <b>Values:</b> ?</dt>
22631
<dt> <b>Default:</b> factor - <code>nil</code>, xx, yy - <code>1</code>, xy, yx - <code>0</code></dt>
22632
<dd><p>By default no hit factor is applied. The hit matrix is the neutral one.
22634
<dt> <b>Access:</b> read/write</dt>
22635
<dt> <b>Support:</b> by some stones</dt>
22639
<a name="hollow"></a>
22640
<table cellpadding="1" cellspacing="1" border="0">
22641
<tr><td valign="middle" align="left">[<a href="#hit_005f_002a" title="Previous section in reading order"> < </a>]</td>
22642
<td valign="middle" align="left">[<a href="#hovering" title="Next section in reading order"> > </a>]</td>
22643
<td valign="middle" align="left"> </td>
22644
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
22645
<td valign="middle" align="left">[<a href="#Stone-Attributes" title="Up section"> Up </a>]</td>
22646
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
22647
<td valign="middle" align="left"> </td>
22648
<td valign="middle" align="left"> </td>
22649
<td valign="middle" align="left"> </td>
22650
<td valign="middle" align="left"> </td>
22651
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
22652
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
22653
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
22654
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
22656
<a name="hollow-1"></a>
22657
<h3 class="subsection">9.2.4 hollow</h3>
22660
<dl compact="compact">
22661
<dt> <b>Type:</b> boolean</dt>
22662
<dt> <b>Values:</b> <code>false</code>, <code>true</code></dt>
22663
<dt> <b>Default:</b> <code>false</code></dt>
22664
<dt> <b>Access:</b> read/write</dt>
22668
<a name="hovering"></a>
22669
<table cellpadding="1" cellspacing="1" border="0">
22670
<tr><td valign="middle" align="left">[<a href="#hollow" title="Previous section in reading order"> < </a>]</td>
22671
<td valign="middle" align="left">[<a href="#movable" title="Next section in reading order"> > </a>]</td>
22672
<td valign="middle" align="left"> </td>
22673
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
22674
<td valign="middle" align="left">[<a href="#Stone-Attributes" title="Up section"> Up </a>]</td>
22675
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
22676
<td valign="middle" align="left"> </td>
22677
<td valign="middle" align="left"> </td>
22678
<td valign="middle" align="left"> </td>
22679
<td valign="middle" align="left"> </td>
22680
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
22681
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
22682
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
22683
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
22685
<a name="hovering-1"></a>
22686
<h3 class="subsection">9.2.5 hovering</h3>
22689
<dl compact="compact">
22690
<dt> <b>Type:</b> boolean</dt>
22691
<dt> <b>Values:</b> <code>false</code>, <code>true</code></dt>
22692
<dt> <b>Default:</b> <code>false</code></dt>
22693
<dt> <b>Access:</b> read/write</dt>
22697
<a name="movable"></a>
22698
<table cellpadding="1" cellspacing="1" border="0">
22699
<tr><td valign="middle" align="left">[<a href="#hovering" title="Previous section in reading order"> < </a>]</td>
22700
<td valign="middle" align="left">[<a href="#transparent" title="Next section in reading order"> > </a>]</td>
22701
<td valign="middle" align="left"> </td>
22702
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
22703
<td valign="middle" align="left">[<a href="#Stone-Attributes" title="Up section"> Up </a>]</td>
22704
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
22705
<td valign="middle" align="left"> </td>
22706
<td valign="middle" align="left"> </td>
22707
<td valign="middle" align="left"> </td>
22708
<td valign="middle" align="left"> </td>
22709
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
22710
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
22711
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
22712
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
22714
<a name="movable-1"></a>
22715
<h3 class="subsection">9.2.6 movable</h3>
22717
<p>An attribute that describes if a stone is movable by actor impulses. It is
22718
supported by all stones.
22720
<p>Note that this attribute is not listed in the individual stone description
22721
if the stone is generally not movable.
22723
<dl compact="compact">
22724
<dt> <b>Type:</b> bool</dt>
22725
<dt> <b>Values:</b> <code>true</code>, <code>false</code></dt>
22726
<dt> <b>Default:</b> usually <code>false</code></dt>
22727
<dd><p>If a stone exists only in a movable variant this attribute will default to
22728
‘<samp>true</samp>’.
22730
<dt> <b>Access:</b> read/sometimes write</dt>
22731
<dd><p>This attribute is only writable for objects that exist in both variations.
22733
<dt> <b>Support:</b> by all stones</dt>
22737
<a name="transparent"></a>
22738
<table cellpadding="1" cellspacing="1" border="0">
22739
<tr><td valign="middle" align="left">[<a href="#movable" title="Previous section in reading order"> < </a>]</td>
22740
<td valign="middle" align="left">[<a href="#Standard-Stones" title="Next section in reading order"> > </a>]</td>
22741
<td valign="middle" align="left"> </td>
22742
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
22743
<td valign="middle" align="left">[<a href="#Stone-Attributes" title="Up section"> Up </a>]</td>
22744
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
22745
<td valign="middle" align="left"> </td>
22746
<td valign="middle" align="left"> </td>
22747
<td valign="middle" align="left"> </td>
22748
<td valign="middle" align="left"> </td>
22749
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
22750
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
22751
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
22752
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
22754
<a name="transparent-1"></a>
22755
<h3 class="subsection">9.2.7 transparent</h3>
22758
<dl compact="compact">
22759
<dt> <b>Type:</b> boolean</dt>
22760
<dt> <b>Values:</b> <code>false</code>, <code>true</code></dt>
22761
<dt> <b>Default:</b> <code>false</code></dt>
22762
<dt> <b>Access:</b> read/write</dt>
22768
<a name="Standard-Stones"></a>
22769
<table cellpadding="1" cellspacing="1" border="0">
22770
<tr><td valign="middle" align="left">[<a href="#transparent" title="Previous section in reading order"> < </a>]</td>
22771
<td valign="middle" align="left">[<a href="#st_005fancient" title="Next section in reading order"> > </a>]</td>
22772
<td valign="middle" align="left"> </td>
22773
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
22774
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Up section"> Up </a>]</td>
22775
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
22776
<td valign="middle" align="left"> </td>
22777
<td valign="middle" align="left"> </td>
22778
<td valign="middle" align="left"> </td>
22779
<td valign="middle" align="left"> </td>
22780
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
22781
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
22782
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
22783
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
22785
<a name="Standard-Stones-1"></a>
22786
<h2 class="section">9.3 Standard Stones</h2>
22788
<p>A standard stone is a passive wall stone. It might exist in a hollow or
22789
movable variant but provides no additional features.
22791
<table class="menu" border="0" cellspacing="0">
22792
<tr><td align="left" valign="top"><a href="#st_005fancient">9.3.1 st_ancient</a></td><td> </td><td align="left" valign="top"> rough green rock
22794
<tr><td align="left" valign="top"><a href="#st_005fbluegray">9.3.2 st_bluegray</a></td><td> </td><td align="left" valign="top"> light blue gray stone
22796
<tr><td align="left" valign="top"><a href="#st_005fbrownie">9.3.3 st_brownie</a></td><td> </td><td align="left" valign="top"> golden, hay stack like stone
22798
<tr><td align="left" valign="top"><a href="#st_005fbrownmarble">9.3.4 st_brownmarble</a></td><td> </td><td align="left" valign="top"> brown gray marble
22800
<tr><td align="left" valign="top"><a href="#st_005fcamouflage">9.3.5 st_camouflage</a></td><td> </td><td align="left" valign="top"> military green camouflage stone
22802
<tr><td align="left" valign="top"><a href="#st_005fconcrete">9.3.6 st_concrete</a></td><td> </td><td align="left" valign="top"> polished light gray stone
22804
<tr><td align="left" valign="top"><a href="#st_005fdarkgray">9.3.7 st_darkgray</a></td><td> </td><td align="left" valign="top"> dark gray rock
22806
<tr><td align="left" valign="top"><a href="#st_005fgranite">9.3.8 st_granite</a></td><td> </td><td align="left" valign="top"> light gray rock
22808
<tr><td align="left" valign="top"><a href="#st_005fgreengray">9.3.9 st_greengray</a></td><td> </td><td align="left" valign="top"> light green gray rock
22810
<tr><td align="left" valign="top"><a href="#st_005finvisible">9.3.10 st_invisible</a></td><td> </td><td align="left" valign="top"> invisible stone
22812
<tr><td align="left" valign="top"><a href="#st_005fmetal">9.3.11 st_metal</a></td><td> </td><td align="left" valign="top"> metal stone
22814
<tr><td align="left" valign="top"><a href="#st_005fpinkbumps">9.3.12 st_pinkbumps</a></td><td> </td><td align="left" valign="top"> pink stone with heavy bumps
22816
<tr><td align="left" valign="top"><a href="#st_005fpurplegray">9.3.13 st_purplegray</a></td><td> </td><td align="left" valign="top"> dark purple gray rock
22818
<tr><td align="left" valign="top"><a href="#st_005fpurplemarble">9.3.14 st_purplemarble</a></td><td> </td><td align="left" valign="top"> purple marble
22820
<tr><td align="left" valign="top"><a href="#st_005fredbrown">9.3.15 st_redbrown</a></td><td> </td><td align="left" valign="top"> brown stone with light red touches
22822
<tr><td align="left" valign="top"><a href="#st_005fredmarble">9.3.16 st_redmarble</a></td><td> </td><td align="left" valign="top"> red white marbled stone
22824
<tr><td align="left" valign="top"><a href="#st_005fredrock">9.3.17 st_redrock</a></td><td> </td><td align="left" valign="top"> dark red rock
22826
<tr><td align="left" valign="top"><a href="#st_005ftigris">9.3.18 st_tigris</a></td><td> </td><td align="left" valign="top"> red sandstone
22828
<tr><td align="left" valign="top"><a href="#st_005fwoven">9.3.19 st_woven</a></td><td> </td><td align="left" valign="top"> yellow gray woven stone
22830
<tr><td align="left" valign="top"><a href="#st_005fyellow">9.3.20 st_yellow</a></td><td> </td><td align="left" valign="top"> yellow stone with red green stripes
22832
<tr><th colspan="3" align="left" valign="top"><pre class="menu-comment">
22833
</pre></th></tr></table>
22836
<a name="st_005fancient"></a>
22837
<table cellpadding="1" cellspacing="1" border="0">
22838
<tr><td valign="middle" align="left">[<a href="#Standard-Stones" title="Previous section in reading order"> < </a>]</td>
22839
<td valign="middle" align="left">[<a href="#st_005fbluegray" title="Next section in reading order"> > </a>]</td>
22840
<td valign="middle" align="left"> </td>
22841
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
22842
<td valign="middle" align="left">[<a href="#Standard-Stones" title="Up section"> Up </a>]</td>
22843
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
22844
<td valign="middle" align="left"> </td>
22845
<td valign="middle" align="left"> </td>
22846
<td valign="middle" align="left"> </td>
22847
<td valign="middle" align="left"> </td>
22848
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
22849
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
22850
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
22851
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
22853
<a name="st_005fancient-1"></a>
22854
<h3 class="subsection">9.3.1 st_ancient</h3>
22855
<a name="index-st_005fancient"></a>
22857
<p>A rough green gray rock that looks ancient.
22859
<dl compact="compact">
22860
<dt> <b>Variants:</b></dt>
22861
<dd><dl compact="compact">
22862
<dt> <img src="images/st_ancient.png" alt="images/st_ancient"><p> <b>st_ancient</b>
22869
<a name="st_005fbluegray"></a>
22870
<table cellpadding="1" cellspacing="1" border="0">
22871
<tr><td valign="middle" align="left">[<a href="#st_005fancient" title="Previous section in reading order"> < </a>]</td>
22872
<td valign="middle" align="left">[<a href="#st_005fbrownie" title="Next section in reading order"> > </a>]</td>
22873
<td valign="middle" align="left"> </td>
22874
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
22875
<td valign="middle" align="left">[<a href="#Standard-Stones" title="Up section"> Up </a>]</td>
22876
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
22877
<td valign="middle" align="left"> </td>
22878
<td valign="middle" align="left"> </td>
22879
<td valign="middle" align="left"> </td>
22880
<td valign="middle" align="left"> </td>
22881
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
22882
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
22883
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
22884
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
22886
<a name="st_005fbluegray-1"></a>
22887
<h3 class="subsection">9.3.2 st_bluegray</h3>
22888
<a name="index-st_005fbluegray"></a>
22890
<p>A light blue gray stone that exists in all two variants. This stone is visually
22891
indistinguishable from a <a href="#st_005fthief">st_thief</a>.
22893
<dl compact="compact">
22894
<dt> <b>Variants:</b></dt>
22895
<dd><dl compact="compact">
22896
<dt> <img src="images/st_bluegray.png" alt="images/st_bluegray"><p> <b>st_bluegray</b>
22898
<dt> <img src="images/st_bluegray.png" alt="images/st_bluegray"><p> <b>st_bluegray_hollow</b>
22905
<a name="st_005fbrownie"></a>
22906
<table cellpadding="1" cellspacing="1" border="0">
22907
<tr><td valign="middle" align="left">[<a href="#st_005fbluegray" title="Previous section in reading order"> < </a>]</td>
22908
<td valign="middle" align="left">[<a href="#st_005fbrownmarble" title="Next section in reading order"> > </a>]</td>
22909
<td valign="middle" align="left"> </td>
22910
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
22911
<td valign="middle" align="left">[<a href="#Standard-Stones" title="Up section"> Up </a>]</td>
22912
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
22913
<td valign="middle" align="left"> </td>
22914
<td valign="middle" align="left"> </td>
22915
<td valign="middle" align="left"> </td>
22916
<td valign="middle" align="left"> </td>
22917
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
22918
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
22919
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
22920
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
22922
<a name="st_005fbrownie-1"></a>
22923
<h3 class="subsection">9.3.3 st_brownie</h3>
22924
<a name="index-st_005fbrownie"></a>
22926
<p>A golden, hay stack like stone that exists just in a movable variant.
22928
<dl compact="compact">
22929
<dt> <b>Variants:</b></dt>
22930
<dd><dl compact="compact">
22931
<dt> <img src="images/st_brownie.png" alt="images/st_brownie"><p> <b>st_brownie</b>
22938
<a name="st_005fbrownmarble"></a>
22939
<table cellpadding="1" cellspacing="1" border="0">
22940
<tr><td valign="middle" align="left">[<a href="#st_005fbrownie" title="Previous section in reading order"> < </a>]</td>
22941
<td valign="middle" align="left">[<a href="#st_005fcamouflage" title="Next section in reading order"> > </a>]</td>
22942
<td valign="middle" align="left"> </td>
22943
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
22944
<td valign="middle" align="left">[<a href="#Standard-Stones" title="Up section"> Up </a>]</td>
22945
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
22946
<td valign="middle" align="left"> </td>
22947
<td valign="middle" align="left"> </td>
22948
<td valign="middle" align="left"> </td>
22949
<td valign="middle" align="left"> </td>
22950
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
22951
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
22952
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
22953
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
22955
<a name="st_005fbrownmarble-1"></a>
22956
<h3 class="subsection">9.3.4 st_brownmarble</h3>
22957
<a name="index-st_005fbrownmarble"></a>
22959
<p>A brown gray marble like stone.
22961
<dl compact="compact">
22962
<dt> <b>Variants:</b></dt>
22963
<dd><dl compact="compact">
22964
<dt> <img src="images/st_brownmarble.png" alt="images/st_brownmarble"><p> <b>st_brownmarble</b>
22971
<a name="st_005fcamouflage"></a>
22972
<table cellpadding="1" cellspacing="1" border="0">
22973
<tr><td valign="middle" align="left">[<a href="#st_005fbrownmarble" title="Previous section in reading order"> < </a>]</td>
22974
<td valign="middle" align="left">[<a href="#st_005fconcrete" title="Next section in reading order"> > </a>]</td>
22975
<td valign="middle" align="left"> </td>
22976
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
22977
<td valign="middle" align="left">[<a href="#Standard-Stones" title="Up section"> Up </a>]</td>
22978
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
22979
<td valign="middle" align="left"> </td>
22980
<td valign="middle" align="left"> </td>
22981
<td valign="middle" align="left"> </td>
22982
<td valign="middle" align="left"> </td>
22983
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
22984
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
22985
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
22986
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
22988
<a name="st_005fcamouflage-1"></a>
22989
<h3 class="subsection">9.3.5 st_camouflage</h3>
22990
<a name="index-st_005fcamouflage"></a>
22992
<p>A military green camouflage stone that exists in all three variants.
22994
<dl compact="compact">
22995
<dt> <b>Variants:</b></dt>
22996
<dd><dl compact="compact">
22997
<dt> <img src="images/st_camouflage.png" alt="images/st_camouflage"><p> <b>st_camouflage</b>
22999
<dt> <b>st_camouflage_hollow</b></dt>
23000
<dt> <b>st_camouflage_movable</b></dt>
23006
<a name="st_005fconcrete"></a>
23007
<table cellpadding="1" cellspacing="1" border="0">
23008
<tr><td valign="middle" align="left">[<a href="#st_005fcamouflage" title="Previous section in reading order"> < </a>]</td>
23009
<td valign="middle" align="left">[<a href="#st_005fdarkgray" title="Next section in reading order"> > </a>]</td>
23010
<td valign="middle" align="left"> </td>
23011
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
23012
<td valign="middle" align="left">[<a href="#Standard-Stones" title="Up section"> Up </a>]</td>
23013
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
23014
<td valign="middle" align="left"> </td>
23015
<td valign="middle" align="left"> </td>
23016
<td valign="middle" align="left"> </td>
23017
<td valign="middle" align="left"> </td>
23018
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
23019
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
23020
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
23021
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
23023
<a name="st_005fconcrete-1"></a>
23024
<h3 class="subsection">9.3.6 st_concrete</h3>
23025
<a name="index-st_005fconcrete"></a>
23027
<p>A polished light gray stone.
23029
<dl compact="compact">
23030
<dt> <b>Variants:</b></dt>
23031
<dd><dl compact="compact">
23032
<dt> <img src="images/st_concrete.png" alt="images/st_concrete"><p> <b>st_concrete</b>
23039
<a name="st_005fdarkgray"></a>
23040
<table cellpadding="1" cellspacing="1" border="0">
23041
<tr><td valign="middle" align="left">[<a href="#st_005fconcrete" title="Previous section in reading order"> < </a>]</td>
23042
<td valign="middle" align="left">[<a href="#st_005fgranite" title="Next section in reading order"> > </a>]</td>
23043
<td valign="middle" align="left"> </td>
23044
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
23045
<td valign="middle" align="left">[<a href="#Standard-Stones" title="Up section"> Up </a>]</td>
23046
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
23047
<td valign="middle" align="left"> </td>
23048
<td valign="middle" align="left"> </td>
23049
<td valign="middle" align="left"> </td>
23050
<td valign="middle" align="left"> </td>
23051
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
23052
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
23053
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
23054
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
23056
<a name="st_005fdarkgray-1"></a>
23057
<h3 class="subsection">9.3.7 st_darkgray</h3>
23058
<a name="index-st_005fdarkgray"></a>
23060
<p>A dark gray rock that exists in all two variants.
23062
<dl compact="compact">
23063
<dt> <b>Variants:</b></dt>
23064
<dd><dl compact="compact">
23065
<dt> <img src="images/st_darkgray.png" alt="images/st_darkgray"><p> <b>st_darkgray</b>
23067
<dt> <b>st_darkgray_hollow</b></dt>
23073
<a name="st_005fgranite"></a>
23074
<table cellpadding="1" cellspacing="1" border="0">
23075
<tr><td valign="middle" align="left">[<a href="#st_005fdarkgray" title="Previous section in reading order"> < </a>]</td>
23076
<td valign="middle" align="left">[<a href="#st_005fgreengray" title="Next section in reading order"> > </a>]</td>
23077
<td valign="middle" align="left"> </td>
23078
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
23079
<td valign="middle" align="left">[<a href="#Standard-Stones" title="Up section"> Up </a>]</td>
23080
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
23081
<td valign="middle" align="left"> </td>
23082
<td valign="middle" align="left"> </td>
23083
<td valign="middle" align="left"> </td>
23084
<td valign="middle" align="left"> </td>
23085
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
23086
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
23087
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
23088
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
23090
<a name="st_005fgranite-1"></a>
23091
<h3 class="subsection">9.3.8 st_granite</h3>
23092
<a name="index-st_005fgranite"></a>
23094
<p>A light gray rock like stone that exists in all three variants.
23096
<dl compact="compact">
23097
<dt> <b>Variants:</b></dt>
23098
<dd><dl compact="compact">
23099
<dt> <img src="images/st_granite.png" alt="images/st_granite"><p> <b>st_granite</b>
23101
<dt> <b>st_granite_hollow</b></dt>
23102
<dt> <b>st_granite_movable</b></dt>
23108
<a name="st_005fgreengray"></a>
23109
<table cellpadding="1" cellspacing="1" border="0">
23110
<tr><td valign="middle" align="left">[<a href="#st_005fgranite" title="Previous section in reading order"> < </a>]</td>
23111
<td valign="middle" align="left">[<a href="#st_005finvisible" title="Next section in reading order"> > </a>]</td>
23112
<td valign="middle" align="left"> </td>
23113
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
23114
<td valign="middle" align="left">[<a href="#Standard-Stones" title="Up section"> Up </a>]</td>
23115
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
23116
<td valign="middle" align="left"> </td>
23117
<td valign="middle" align="left"> </td>
23118
<td valign="middle" align="left"> </td>
23119
<td valign="middle" align="left"> </td>
23120
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
23121
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
23122
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
23123
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
23125
<a name="st_005fgreengray-1"></a>
23126
<h3 class="subsection">9.3.9 st_greengray</h3>
23127
<a name="index-st_005fgreengray"></a>
23129
<p>A light green gray rock.
23131
<dl compact="compact">
23132
<dt> <b>Variants:</b></dt>
23133
<dd><dl compact="compact">
23134
<dt> <img src="images/st_greengray.png" alt="images/st_greengray"><p> <b>st_greengray</b>
23141
<a name="st_005finvisible"></a>
23142
<table cellpadding="1" cellspacing="1" border="0">
23143
<tr><td valign="middle" align="left">[<a href="#st_005fgreengray" title="Previous section in reading order"> < </a>]</td>
23144
<td valign="middle" align="left">[<a href="#st_005fmetal" title="Next section in reading order"> > </a>]</td>
23145
<td valign="middle" align="left"> </td>
23146
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
23147
<td valign="middle" align="left">[<a href="#Standard-Stones" title="Up section"> Up </a>]</td>
23148
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
23149
<td valign="middle" align="left"> </td>
23150
<td valign="middle" align="left"> </td>
23151
<td valign="middle" align="left"> </td>
23152
<td valign="middle" align="left"> </td>
23153
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
23154
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
23155
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
23156
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
23158
<a name="st_005finvisible-1"></a>
23159
<h3 class="subsection">9.3.10 st_invisible</h3>
23160
<a name="index-st_005finvisible"></a>
23162
<p>An invisible stone that exists in all three variants. Please make rare usage
23163
of this stone as it may be very annoying to users to guess that a stone
23164
exists that he can not see. Use it to maintain the WYSIWYG expected behaviour.
23166
<p>Invisibility is not equal to laser transparency. In fact this stone is not
23167
laser transparent. And invisibility does not mean that an invisible actor can
23168
pass (see section <a href="#Transparent-Stones">Transparent Stones</a>).
23170
<dl compact="compact">
23171
<dt> <b>Variants:</b></dt>
23172
<dd><dl compact="compact">
23173
<dt> <b>st_invisible</b></dt>
23174
<dt> <b>st_invisible_hollow</b></dt>
23175
<dt> <b>st_invisible_movable</b></dt>
23181
<a name="st_005fmetal"></a>
23182
<table cellpadding="1" cellspacing="1" border="0">
23183
<tr><td valign="middle" align="left">[<a href="#st_005finvisible" title="Previous section in reading order"> < </a>]</td>
23184
<td valign="middle" align="left">[<a href="#st_005fpinkbumps" title="Next section in reading order"> > </a>]</td>
23185
<td valign="middle" align="left"> </td>
23186
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
23187
<td valign="middle" align="left">[<a href="#Standard-Stones" title="Up section"> Up </a>]</td>
23188
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
23189
<td valign="middle" align="left"> </td>
23190
<td valign="middle" align="left"> </td>
23191
<td valign="middle" align="left"> </td>
23192
<td valign="middle" align="left"> </td>
23193
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
23194
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
23195
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
23196
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
23198
<a name="st_005fmetal-1"></a>
23199
<h3 class="subsection">9.3.11 st_metal</h3>
23200
<a name="index-st_005fmetal"></a>
23202
<p>A metal stone that exists in two variants.
23204
<dl compact="compact">
23205
<dt> <b>Variants:</b></dt>
23206
<dd><dl compact="compact">
23207
<dt> <img src="images/st_metal.png" alt="images/st_metal"><p> <b>st_metal</b>
23209
<dt> <b>st_metal_hollow</b></dt>
23215
<a name="st_005fpinkbumps"></a>
23216
<table cellpadding="1" cellspacing="1" border="0">
23217
<tr><td valign="middle" align="left">[<a href="#st_005fmetal" title="Previous section in reading order"> < </a>]</td>
23218
<td valign="middle" align="left">[<a href="#st_005fpurplegray" title="Next section in reading order"> > </a>]</td>
23219
<td valign="middle" align="left"> </td>
23220
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
23221
<td valign="middle" align="left">[<a href="#Standard-Stones" title="Up section"> Up </a>]</td>
23222
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
23223
<td valign="middle" align="left"> </td>
23224
<td valign="middle" align="left"> </td>
23225
<td valign="middle" align="left"> </td>
23226
<td valign="middle" align="left"> </td>
23227
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
23228
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
23229
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
23230
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
23232
<a name="st_005fpinkbumps-1"></a>
23233
<h3 class="subsection">9.3.12 st_pinkbumps</h3>
23234
<a name="index-st_005fpinkbumps"></a>
23236
<p>A pink stone with heavy white bumps.
23238
<dl compact="compact">
23239
<dt> <b>Variants:</b></dt>
23240
<dd><dl compact="compact">
23241
<dt> <img src="images/st_pinkbumps.png" alt="images/st_pinkbumps"><p> <b>st_pinkbumps</b>
23248
<a name="st_005fpurplegray"></a>
23249
<table cellpadding="1" cellspacing="1" border="0">
23250
<tr><td valign="middle" align="left">[<a href="#st_005fpinkbumps" title="Previous section in reading order"> < </a>]</td>
23251
<td valign="middle" align="left">[<a href="#st_005fpurplemarble" title="Next section in reading order"> > </a>]</td>
23252
<td valign="middle" align="left"> </td>
23253
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
23254
<td valign="middle" align="left">[<a href="#Standard-Stones" title="Up section"> Up </a>]</td>
23255
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
23256
<td valign="middle" align="left"> </td>
23257
<td valign="middle" align="left"> </td>
23258
<td valign="middle" align="left"> </td>
23259
<td valign="middle" align="left"> </td>
23260
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
23261
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
23262
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
23263
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
23265
<a name="st_005fpurplegray-1"></a>
23266
<h3 class="subsection">9.3.13 st_purplegray</h3>
23267
<a name="index-st_005fpurplegray"></a>
23269
<p>A dark purple gray rock.
23271
<dl compact="compact">
23272
<dt> <b>Variants:</b></dt>
23273
<dd><dl compact="compact">
23274
<dt> <img src="images/st_purplegray.png" alt="images/st_purplegray"><p> <b>st_purplegray</b>
23281
<a name="st_005fpurplemarble"></a>
23282
<table cellpadding="1" cellspacing="1" border="0">
23283
<tr><td valign="middle" align="left">[<a href="#st_005fpurplegray" title="Previous section in reading order"> < </a>]</td>
23284
<td valign="middle" align="left">[<a href="#st_005fredbrown" title="Next section in reading order"> > </a>]</td>
23285
<td valign="middle" align="left"> </td>
23286
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
23287
<td valign="middle" align="left">[<a href="#Standard-Stones" title="Up section"> Up </a>]</td>
23288
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
23289
<td valign="middle" align="left"> </td>
23290
<td valign="middle" align="left"> </td>
23291
<td valign="middle" align="left"> </td>
23292
<td valign="middle" align="left"> </td>
23293
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
23294
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
23295
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
23296
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
23298
<a name="st_005fpurplemarble-1"></a>
23299
<h3 class="subsection">9.3.14 st_purplemarble</h3>
23300
<a name="index-st_005fpurplemarble"></a>
23302
<p>A purple marble stone.
23304
<dl compact="compact">
23305
<dt> <b>Variants:</b></dt>
23306
<dd><dl compact="compact">
23307
<dt> <img src="images/st_purplemarble.png" alt="images/st_purplemarble"><p> <b>st_purplemarble</b>
23314
<a name="st_005fredbrown"></a>
23315
<table cellpadding="1" cellspacing="1" border="0">
23316
<tr><td valign="middle" align="left">[<a href="#st_005fpurplemarble" title="Previous section in reading order"> < </a>]</td>
23317
<td valign="middle" align="left">[<a href="#st_005fredmarble" title="Next section in reading order"> > </a>]</td>
23318
<td valign="middle" align="left"> </td>
23319
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
23320
<td valign="middle" align="left">[<a href="#Standard-Stones" title="Up section"> Up </a>]</td>
23321
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
23322
<td valign="middle" align="left"> </td>
23323
<td valign="middle" align="left"> </td>
23324
<td valign="middle" align="left"> </td>
23325
<td valign="middle" align="left"> </td>
23326
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
23327
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
23328
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
23329
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
23331
<a name="st_005fredbrown-1"></a>
23332
<h3 class="subsection">9.3.15 st_redbrown</h3>
23333
<a name="index-st_005fredbrown"></a>
23335
<p>A brown stone with light red touches that exists in all three variants.
23337
<dl compact="compact">
23338
<dt> <b>Variants:</b></dt>
23339
<dd><dl compact="compact">
23340
<dt> <img src="images/st_redbrown.png" alt="images/st_redbrown"><p> <b>st_redbrown</b>
23342
<dt> <b>st_redbrown_hollow</b></dt>
23343
<dt> <b>st_redbrown_movable</b></dt>
23349
<a name="st_005fredmarble"></a>
23350
<table cellpadding="1" cellspacing="1" border="0">
23351
<tr><td valign="middle" align="left">[<a href="#st_005fredbrown" title="Previous section in reading order"> < </a>]</td>
23352
<td valign="middle" align="left">[<a href="#st_005fredrock" title="Next section in reading order"> > </a>]</td>
23353
<td valign="middle" align="left"> </td>
23354
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
23355
<td valign="middle" align="left">[<a href="#Standard-Stones" title="Up section"> Up </a>]</td>
23356
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
23357
<td valign="middle" align="left"> </td>
23358
<td valign="middle" align="left"> </td>
23359
<td valign="middle" align="left"> </td>
23360
<td valign="middle" align="left"> </td>
23361
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
23362
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
23363
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
23364
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
23366
<a name="st_005fredmarble-1"></a>
23367
<h3 class="subsection">9.3.16 st_redmarble</h3>
23368
<a name="index-st_005fredmarble"></a>
23370
<p>A red white marbled stone.
23372
<dl compact="compact">
23373
<dt> <b>Variants:</b></dt>
23374
<dd><dl compact="compact">
23375
<dt> <img src="images/st_redmarble.png" alt="images/st_redmarble"><p> <b>st_redmarble</b>
23382
<a name="st_005fredrock"></a>
23383
<table cellpadding="1" cellspacing="1" border="0">
23384
<tr><td valign="middle" align="left">[<a href="#st_005fredmarble" title="Previous section in reading order"> < </a>]</td>
23385
<td valign="middle" align="left">[<a href="#st_005ftigris" title="Next section in reading order"> > </a>]</td>
23386
<td valign="middle" align="left"> </td>
23387
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
23388
<td valign="middle" align="left">[<a href="#Standard-Stones" title="Up section"> Up </a>]</td>
23389
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
23390
<td valign="middle" align="left"> </td>
23391
<td valign="middle" align="left"> </td>
23392
<td valign="middle" align="left"> </td>
23393
<td valign="middle" align="left"> </td>
23394
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
23395
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
23396
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
23397
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
23399
<a name="st_005fredrock-1"></a>
23400
<h3 class="subsection">9.3.17 st_redrock</h3>
23401
<a name="index-st_005fredrock"></a>
23403
<p>A dark red rock.
23405
<dl compact="compact">
23406
<dt> <b>Variants:</b></dt>
23407
<dd><dl compact="compact">
23408
<dt> <img src="images/st_redrock.png" alt="images/st_redrock"><p> <b>st_redrock</b>
23415
<a name="st_005ftigris"></a>
23416
<table cellpadding="1" cellspacing="1" border="0">
23417
<tr><td valign="middle" align="left">[<a href="#st_005fredrock" title="Previous section in reading order"> < </a>]</td>
23418
<td valign="middle" align="left">[<a href="#st_005fwoven" title="Next section in reading order"> > </a>]</td>
23419
<td valign="middle" align="left"> </td>
23420
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
23421
<td valign="middle" align="left">[<a href="#Standard-Stones" title="Up section"> Up </a>]</td>
23422
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
23423
<td valign="middle" align="left"> </td>
23424
<td valign="middle" align="left"> </td>
23425
<td valign="middle" align="left"> </td>
23426
<td valign="middle" align="left"> </td>
23427
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
23428
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
23429
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
23430
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
23432
<a name="st_005ftigris-1"></a>
23433
<h3 class="subsection">9.3.18 st_tigris</h3>
23434
<a name="index-st_005ftigris"></a>
23436
<p>A red sandstone like <a href="#fl_005ftigris">fl_tigris</a>.
23438
<dl compact="compact">
23439
<dt> <b>Variants:</b></dt>
23440
<dd><dl compact="compact">
23441
<dt> <img src="images/st_tigris.png" alt="images/st_tigris"><p> <b>st_tigris</b>
23448
<a name="st_005fwoven"></a>
23449
<table cellpadding="1" cellspacing="1" border="0">
23450
<tr><td valign="middle" align="left">[<a href="#st_005ftigris" title="Previous section in reading order"> < </a>]</td>
23451
<td valign="middle" align="left">[<a href="#st_005fyellow" title="Next section in reading order"> > </a>]</td>
23452
<td valign="middle" align="left"> </td>
23453
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
23454
<td valign="middle" align="left">[<a href="#Standard-Stones" title="Up section"> Up </a>]</td>
23455
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
23456
<td valign="middle" align="left"> </td>
23457
<td valign="middle" align="left"> </td>
23458
<td valign="middle" align="left"> </td>
23459
<td valign="middle" align="left"> </td>
23460
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
23461
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
23462
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
23463
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
23465
<a name="st_005fwoven-1"></a>
23466
<h3 class="subsection">9.3.19 st_woven</h3>
23467
<a name="index-st_005fwoven"></a>
23469
<p>A yellow gray woven stone.
23471
<dl compact="compact">
23472
<dt> <b>Variants:</b></dt>
23473
<dd><dl compact="compact">
23474
<dt> <img src="images/st_woven.png" alt="images/st_woven"><p> <b>st_woven</b>
23481
<a name="st_005fyellow"></a>
23482
<table cellpadding="1" cellspacing="1" border="0">
23483
<tr><td valign="middle" align="left">[<a href="#st_005fwoven" title="Previous section in reading order"> < </a>]</td>
23484
<td valign="middle" align="left">[<a href="#Cluster-Stones" title="Next section in reading order"> > </a>]</td>
23485
<td valign="middle" align="left"> </td>
23486
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
23487
<td valign="middle" align="left">[<a href="#Standard-Stones" title="Up section"> Up </a>]</td>
23488
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
23489
<td valign="middle" align="left"> </td>
23490
<td valign="middle" align="left"> </td>
23491
<td valign="middle" align="left"> </td>
23492
<td valign="middle" align="left"> </td>
23493
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
23494
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
23495
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
23496
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
23498
<a name="st_005fyellow-1"></a>
23499
<h3 class="subsection">9.3.20 st_yellow</h3>
23500
<a name="index-st_005fyellow"></a>
23502
<p>A yellow stone with red green stripes. This stone fits visually to the
23503
<a href="#st_005fcoinslot">st_coinslot</a>.
23505
<dl compact="compact">
23506
<dt> <b>Variants:</b></dt>
23507
<dd><dl compact="compact">
23508
<dt> <img src="images/st_yellow.png" alt="images/st_yellow"><p> <b>st_yellow</b>
23516
<a name="Cluster-Stones"></a>
23517
<table cellpadding="1" cellspacing="1" border="0">
23518
<tr><td valign="middle" align="left">[<a href="#st_005fyellow" title="Previous section in reading order"> < </a>]</td>
23519
<td valign="middle" align="left">[<a href="#Cluster-Features" title="Next section in reading order"> > </a>]</td>
23520
<td valign="middle" align="left"> </td>
23521
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
23522
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Up section"> Up </a>]</td>
23523
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
23524
<td valign="middle" align="left"> </td>
23525
<td valign="middle" align="left"> </td>
23526
<td valign="middle" align="left"> </td>
23527
<td valign="middle" align="left"> </td>
23528
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
23529
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
23530
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
23531
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
23533
<a name="Cluster-Stones-1"></a>
23534
<h2 class="section">9.4 Cluster Stones</h2>
23536
<p>A cluster stone is a passive wall stone like a simple stone. But several
23537
cluster stones adjacent to each other can visually build a cluster and look
23538
like a single big stone with a one common outer face.
23540
<table class="menu" border="0" cellspacing="0">
23541
<tr><td align="left" valign="top"><a href="#Cluster-Features">9.4.1 Cluster Features</a></td><td> </td><td align="left" valign="top"> Common Attributes and Features
23543
<tr><td align="left" valign="top"><a href="#st_005fbluesand">9.4.2 st_bluesand</a></td><td> </td><td align="left" valign="top"> big sand stone look
23545
<tr><td align="left" valign="top"><a href="#st_005fbrick">9.4.3 st_brick</a></td><td> </td><td align="left" valign="top"> brick wall look
23547
<tr><td align="left" valign="top"><a href="#st_005fpanel">9.4.4 st_panel</a></td><td> </td><td align="left" valign="top"> wooden panel look
23552
<a name="Cluster-Features"></a>
23553
<table cellpadding="1" cellspacing="1" border="0">
23554
<tr><td valign="middle" align="left">[<a href="#Cluster-Stones" title="Previous section in reading order"> < </a>]</td>
23555
<td valign="middle" align="left">[<a href="#st_005fbluesand" title="Next section in reading order"> > </a>]</td>
23556
<td valign="middle" align="left"> </td>
23557
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
23558
<td valign="middle" align="left">[<a href="#Cluster-Stones" title="Up section"> Up </a>]</td>
23559
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
23560
<td valign="middle" align="left"> </td>
23561
<td valign="middle" align="left"> </td>
23562
<td valign="middle" align="left"> </td>
23563
<td valign="middle" align="left"> </td>
23564
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
23565
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
23566
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
23567
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
23569
<a name="Cluster-Features-1"></a>
23570
<h3 class="subsection">9.4.1 Cluster Features</h3>
23572
<p>For each cluster stone there exist 16 different variations that represent all
23573
needed combinations of inner and outer faces to build arbitrary shaped big
23576
<p>There exist two methods of describing a special variation. You can either give
23577
the inner faces, the ‘<samp>connections</samp>’, those sides that should be adjacent to
23578
other stones of the same cluster. Or you can give the outer faces, the
23579
‘<samp>faces</samp>’, that build the common outer face of the resulting big block.
23581
<p>As it is a tedious work to set up larger blocks by their single stones with
23582
appropriate faces you can rely on an automatic clustering feature. Just
23583
set the ‘<samp>cluster</samp>’ attribute of all single stones of a big block to the
23584
same number and the faces will be set up automatically to form a large block.
23586
<p>You can build a screen of arbitrary big blocks and it is proven that there will
23587
never be the need of more than 4 different cluster numbers (the "4 color
23588
theorem"). But for convenience you are free to use additional cluster numbers
23589
as you like. Note that the autoclustering is quite dynamic. A single cluster
23590
stone with fitting cluster number that is swapped at the side of an existing
23591
block with the same cluster number will melt and join the block like seen in
23592
"Terminator 2".
23594
<p>We recommend making use of the autoclustering feature by setting the
23595
‘<samp>cluster</samp>’ attribute and using the ‘<samp>faces</samp>’ attribute where necessary.
23596
‘<samp>connections</samp>’ attribute and explicit naming of variations by a suffix
23597
are deprecated, but will continue to be supported.
23599
<dl compact="compact">
23600
<dt> <b>Attributes:</b></dt>
23602
<dl compact="compact">
23603
<dt> <b>connections</b>, <i>values</i>: string; <i>default</i>: <code>nil</code></dt>
23604
<dd><p>Describes the inner faces of stone. The string is a substring of <code>"nesw"</code>
23605
listing the inner faces. The sequence of the sides, north, east, south, west,
23606
is guaranteed on read access but arbitrary on write access.
23609
<dt> <b>faces</b> <i>values</i>: string; <i>default</i>: <code>nil</code></dt>
23610
<dd><p>Describes the outer faces of stone. The string is a substring of <code>"nesw"</code>
23611
listing the outer faces. The sequence of the sides, north, east, south, west,
23612
is guaranteed on read access but arbitrary on write access.
23615
<dt> <b>cluster</b> <i>values</i>: number; <i>default</i>: <code>nil</code></dt>
23616
<dd><p>If set to a number all adjacent cluster stones of the same base type with
23617
the identical cluster number will build a big block. This attribute supersedes
23618
any explicitly given face description.
23626
<a name="st_005fbluesand"></a>
23627
<table cellpadding="1" cellspacing="1" border="0">
23628
<tr><td valign="middle" align="left">[<a href="#Cluster-Features" title="Previous section in reading order"> < </a>]</td>
23629
<td valign="middle" align="left">[<a href="#st_005fbrick" title="Next section in reading order"> > </a>]</td>
23630
<td valign="middle" align="left"> </td>
23631
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
23632
<td valign="middle" align="left">[<a href="#Cluster-Stones" title="Up section"> Up </a>]</td>
23633
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
23634
<td valign="middle" align="left"> </td>
23635
<td valign="middle" align="left"> </td>
23636
<td valign="middle" align="left"> </td>
23637
<td valign="middle" align="left"> </td>
23638
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
23639
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
23640
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
23641
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
23643
<a name="st_005fbluesand-1"></a>
23644
<h3 class="subsection">9.4.2 st_bluesand</h3>
23645
<a name="index-st_005fbluesand"></a>
23647
<p>A standard cluster stone with the <a href="#Cluster-Features">Cluster Features</a>. It is recommended
23648
to use ‘<samp>st_bluesand</samp>’ with the attributes ‘<samp>cluster</samp>’ and ‘<samp>faces</samp>’.
23650
<dl compact="compact">
23651
<dt> <b>Variants:</b></dt>
23653
<tr><td width="8%"><img src="images/st_bluesand.png" alt="images/st_bluesand"></td><td width="42%"><b>st_bluesand</b>: connections = <code>""</code></td><td width="8%"><img src="images/st_bluesand_2.png" alt="images/st_bluesand_2"></td><td width="42%"><b>st_bluesand_w</b>: connections = <code>"w"</code></td></tr>
23654
<tr><td width="8%"><img src="images/st_bluesand_3.png" alt="images/st_bluesand_3"></td><td width="42%"><b>st_bluesand_s</b>: connections = <code>"s"</code></td><td width="8%"><img src="images/st_bluesand_4.png" alt="images/st_bluesand_4"></td><td width="42%"><b>st_bluesand_sw</b>: connections = <code>"sw"</code></td></tr>
23655
<tr><td width="8%"><img src="images/st_bluesand_b.png" alt="images/st_bluesand_b"></td><td width="42%"><b>st_bluesand_e</b>: connections = <code>"e"</code></td><td width="8%"><img src="images/st_bluesand_b2.png" alt="images/st_bluesand_b2"></td><td width="42%"><b>st_bluesand_ew</b>: connections = <code>"ew"</code></td></tr>
23656
<tr><td width="8%"><img src="images/st_bluesand_b3.png" alt="images/st_bluesand_b3"></td><td width="42%"><b>st_bluesand_es</b>: connections = <code>"es"</code></td><td width="8%"><img src="images/st_bluesand_b4.png" alt="images/st_bluesand_b4"></td><td width="42%"><b>st_bluesand_esw</b>: connections = <code>"esw"</code></td></tr>
23657
<tr><td width="8%"><img src="images/st_bluesand_c.png" alt="images/st_bluesand_c"></td><td width="42%"><b>st_bluesand_n</b>: connections = <code>"n"</code></td><td width="8%"><img src="images/st_bluesand_c2.png" alt="images/st_bluesand_c2"></td><td width="42%"><b>st_bluesand_nw</b>: connections = <code>"nw"</code></td></tr>
23658
<tr><td width="8%"><img src="images/st_bluesand_c3.png" alt="images/st_bluesand_c3"></td><td width="42%"><b>st_bluesand_ns</b>: connections = <code>"ns"</code></td><td width="8%"><img src="images/st_bluesand_c4.png" alt="images/st_bluesand_c4"></td><td width="42%"><b>st_bluesand_nsw</b>: connections = <code>"nsw"</code></td></tr>
23659
<tr><td width="8%"><img src="images/st_bluesand_d.png" alt="images/st_bluesand_d"></td><td width="42%"><b>st_bluesand_ne</b>: connections = <code>"ne"</code></td><td width="8%"><img src="images/st_bluesand_d2.png" alt="images/st_bluesand_d2"></td><td width="42%"><b>st_bluesand_new</b>: connections = <code>"new"</code></td></tr>
23660
<tr><td width="8%"><img src="images/st_bluesand_d3.png" alt="images/st_bluesand_d3"></td><td width="42%"><b>st_bluesand_nes</b>: connections = <code>"nes"</code></td><td width="8%"><img src="images/st_bluesand_d4.png" alt="images/st_bluesand_d4"></td><td width="42%"><b>st_bluesand_nesw</b>: connections = <code>"nesw"</code></td></tr>
23666
<a name="st_005fbrick"></a>
23667
<table cellpadding="1" cellspacing="1" border="0">
23668
<tr><td valign="middle" align="left">[<a href="#st_005fbluesand" title="Previous section in reading order"> < </a>]</td>
23669
<td valign="middle" align="left">[<a href="#st_005fpanel" title="Next section in reading order"> > </a>]</td>
23670
<td valign="middle" align="left"> </td>
23671
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
23672
<td valign="middle" align="left">[<a href="#Cluster-Stones" title="Up section"> Up </a>]</td>
23673
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
23674
<td valign="middle" align="left"> </td>
23675
<td valign="middle" align="left"> </td>
23676
<td valign="middle" align="left"> </td>
23677
<td valign="middle" align="left"> </td>
23678
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
23679
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
23680
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
23681
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
23683
<a name="st_005fbrick-1"></a>
23684
<h3 class="subsection">9.4.3 st_brick</h3>
23685
<a name="index-st_005fbrick"></a>
23687
<p>A standard cluster stone with the <a href="#Cluster-Features">Cluster Features</a>. It is recommended
23688
to use ‘<samp>st_brick</samp>’ with the attributes ‘<samp>cluster</samp>’ and ‘<samp>faces</samp>’.
23690
<dl compact="compact">
23691
<dt> <b>Variants:</b></dt>
23693
<tr><td width="8%"><img src="images/st_brick.png" alt="images/st_brick"></td><td width="42%"><b>st_brick</b>: connections = <code>""</code></td><td width="8%"><img src="images/st_brick_2.png" alt="images/st_brick_2"></td><td width="42%"><b>st_brick_w</b>: connections = <code>"w"</code></td></tr>
23694
<tr><td width="8%"><img src="images/st_brick_3.png" alt="images/st_brick_3"></td><td width="42%"><b>st_brick_s</b>: connections = <code>"s"</code></td><td width="8%"><img src="images/st_brick_4.png" alt="images/st_brick_4"></td><td width="42%"><b>st_brick_sw</b>: connections = <code>"sw"</code></td></tr>
23695
<tr><td width="8%"><img src="images/st_brick_b.png" alt="images/st_brick_b"></td><td width="42%"><b>st_brick_e</b>: connections = <code>"e"</code></td><td width="8%"><img src="images/st_brick_b2.png" alt="images/st_brick_b2"></td><td width="42%"><b>st_brick_ew</b>: connections = <code>"ew"</code></td></tr>
23696
<tr><td width="8%"><img src="images/st_brick_b3.png" alt="images/st_brick_b3"></td><td width="42%"><b>st_brick_es</b>: connections = <code>"es"</code></td><td width="8%"><img src="images/st_brick_b4.png" alt="images/st_brick_b4"></td><td width="42%"><b>st_brick_esw</b>: connections = <code>"esw"</code></td></tr>
23697
<tr><td width="8%"><img src="images/st_brick_c.png" alt="images/st_brick_c"></td><td width="42%"><b>st_brick_n</b>: connections = <code>"n"</code></td><td width="8%"><img src="images/st_brick_c2.png" alt="images/st_brick_c2"></td><td width="42%"><b>st_brick_nw</b>: connections = <code>"nw"</code></td></tr>
23698
<tr><td width="8%"><img src="images/st_brick_c3.png" alt="images/st_brick_c3"></td><td width="42%"><b>st_brick_ns</b>: connections = <code>"ns"</code></td><td width="8%"><img src="images/st_brick_c4.png" alt="images/st_brick_c4"></td><td width="42%"><b>st_brick_nsw</b>: connections = <code>"nsw"</code></td></tr>
23699
<tr><td width="8%"><img src="images/st_brick_d.png" alt="images/st_brick_d"></td><td width="42%"><b>st_brick_ne</b>: connections = <code>"ne"</code></td><td width="8%"><img src="images/st_brick_d2.png" alt="images/st_brick_d2"></td><td width="42%"><b>st_brick_new</b>: connections = <code>"new"</code></td></tr>
23700
<tr><td width="8%"><img src="images/st_brick_d3.png" alt="images/st_brick_d3"></td><td width="42%"><b>st_brick_nes</b>: connections = <code>"nes"</code></td><td width="8%"><img src="images/st_brick_d4.png" alt="images/st_brick_d4"></td><td width="42%"><b>st_brick_nesw</b>: connections = <code>"nesw"</code></td></tr>
23705
<a name="st_005fpanel"></a>
23706
<table cellpadding="1" cellspacing="1" border="0">
23707
<tr><td valign="middle" align="left">[<a href="#st_005fbrick" title="Previous section in reading order"> < </a>]</td>
23708
<td valign="middle" align="left">[<a href="#Special-Stones" title="Next section in reading order"> > </a>]</td>
23709
<td valign="middle" align="left"> </td>
23710
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
23711
<td valign="middle" align="left">[<a href="#Cluster-Stones" title="Up section"> Up </a>]</td>
23712
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
23713
<td valign="middle" align="left"> </td>
23714
<td valign="middle" align="left"> </td>
23715
<td valign="middle" align="left"> </td>
23716
<td valign="middle" align="left"> </td>
23717
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
23718
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
23719
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
23720
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
23722
<a name="st_005fpanel-1"></a>
23723
<h3 class="subsection">9.4.4 st_panel</h3>
23724
<a name="index-st_005fpanel"></a>
23726
<p>A standard cluster stone with the <a href="#Cluster-Features">Cluster Features</a>. It is recommended
23727
to use ‘<samp>st_panel</samp>’ with the attributes ‘<samp>cluster</samp>’ and ‘<samp>faces</samp>’.
23729
<dl compact="compact">
23730
<dt> <b>Variants:</b></dt>
23732
<tr><td width="8%"><img src="images/st_panel.png" alt="images/st_panel"></td><td width="42%"><b>st_panel</b>: connections = <code>""</code></td><td width="8%"><img src="images/st_panel_2.png" alt="images/st_panel_2"></td><td width="42%"><b>st_panel_w</b>: connections = <code>"w"</code></td></tr>
23733
<tr><td width="8%"><img src="images/st_panel_3.png" alt="images/st_panel_3"></td><td width="42%"><b>st_panel_s</b>: connections = <code>"s"</code></td><td width="8%"><img src="images/st_panel_4.png" alt="images/st_panel_4"></td><td width="42%"><b>st_panel_sw</b>: connections = <code>"sw"</code></td></tr>
23734
<tr><td width="8%"><img src="images/st_panel_b.png" alt="images/st_panel_b"></td><td width="42%"><b>st_panel_e</b>: connections = <code>"e"</code></td><td width="8%"><img src="images/st_panel_b2.png" alt="images/st_panel_b2"></td><td width="42%"><b>st_panel_ew</b>: connections = <code>"ew"</code></td></tr>
23735
<tr><td width="8%"><img src="images/st_panel_b3.png" alt="images/st_panel_b3"></td><td width="42%"><b>st_panel_es</b>: connections = <code>"es"</code></td><td width="8%"><img src="images/st_panel_b4.png" alt="images/st_panel_b4"></td><td width="42%"><b>st_panel_esw</b>: connections = <code>"esw"</code></td></tr>
23736
<tr><td width="8%"><img src="images/st_panel_c.png" alt="images/st_panel_c"></td><td width="42%"><b>st_panel_n</b>: connections = <code>"n"</code></td><td width="8%"><img src="images/st_panel_c2.png" alt="images/st_panel_c2"></td><td width="42%"><b>st_panel_nw</b>: connections = <code>"nw"</code></td></tr>
23737
<tr><td width="8%"><img src="images/st_panel_c3.png" alt="images/st_panel_c3"></td><td width="42%"><b>st_panel_ns</b>: connections = <code>"ns"</code></td><td width="8%"><img src="images/st_panel_c4.png" alt="images/st_panel_c4"></td><td width="42%"><b>st_panel_nsw</b>: connections = <code>"nsw"</code></td></tr>
23738
<tr><td width="8%"><img src="images/st_panel_d.png" alt="images/st_panel_d"></td><td width="42%"><b>st_panel_ne</b>: connections = <code>"ne"</code></td><td width="8%"><img src="images/st_panel_d2.png" alt="images/st_panel_d2"></td><td width="42%"><b>st_panel_new</b>: connections = <code>"new"</code></td></tr>
23739
<tr><td width="8%"><img src="images/st_panel_d3.png" alt="images/st_panel_d3"></td><td width="42%"><b>st_panel_nes</b>: connections = <code>"nes"</code></td><td width="8%"><img src="images/st_panel_d4.png" alt="images/st_panel_d4"></td><td width="42%"><b>st_panel_nesw</b>: connections = <code>"nesw"</code></td></tr>
23746
<a name="Special-Stones"></a>
23747
<table cellpadding="1" cellspacing="1" border="0">
23748
<tr><td valign="middle" align="left">[<a href="#st_005fpanel" title="Previous section in reading order"> < </a>]</td>
23749
<td valign="middle" align="left">[<a href="#st_005factorimpulse" title="Next section in reading order"> > </a>]</td>
23750
<td valign="middle" align="left"> </td>
23751
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
23752
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Up section"> Up </a>]</td>
23753
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
23754
<td valign="middle" align="left"> </td>
23755
<td valign="middle" align="left"> </td>
23756
<td valign="middle" align="left"> </td>
23757
<td valign="middle" align="left"> </td>
23758
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
23759
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
23760
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
23761
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
23763
<a name="Special-Stones-1"></a>
23764
<h2 class="section">9.5 Special Stones</h2>
23766
<table class="menu" border="0" cellspacing="0">
23767
<tr><td align="left" valign="top"><a href="#st_005factorimpulse">9.5.1 st_actorimpulse</a></td><td> </td><td align="left" valign="top"> Bumper Stone
23769
<tr><td align="left" valign="top"><a href="#st_005fbarrier">9.5.2 st_barrier</a></td><td> </td><td align="left" valign="top"> Barrier for item carrying actors
23771
<tr><td align="left" valign="top"><a href="#st_005fbeads">9.5.3 st_beads</a></td><td> </td><td align="left" valign="top"> Frame of Glass Beads
23773
<tr><td align="left" valign="top"><a href="#st_005fblocker">9.5.4 st_blocker</a></td><td> </td><td align="left" valign="top"> Shrinkable Blocker
23775
<tr><td align="left" valign="top"><a href="#st_005fblur">9.5.5 st_blur</a></td><td> </td><td align="left" valign="top"> Passage of yet undetermined color
23777
<tr><td align="left" valign="top"><a href="#st_005fboulder">9.5.6 st_boulder</a></td><td> </td><td align="left" valign="top"> Moving Arrow Boulder
23779
<tr><td align="left" valign="top"><a href="#st_005fbox">9.5.7 st_box</a></td><td> </td><td align="left" valign="top"> Movable, Floor building Box
23781
<tr><td align="left" valign="top"><a href="#st_005fbrake">9.5.8 st_brake</a></td><td> </td><td align="left" valign="top"> Brake for moving Boulders
23783
<tr><td align="left" valign="top"><a href="#st_005fbreak">9.5.9 st_break</a></td><td> </td><td align="left" valign="top"> Breakable Stone of various Flavors
23785
<tr><td align="left" valign="top"><a href="#st_005fbrownpyramid">9.5.10 st_brownpyramid</a></td><td> </td><td align="left" valign="top"> Brown gray pyramid shaped stone
23787
<tr><td align="left" valign="top"><a href="#st_005fchameleon">9.5.11 st_chameleon</a></td><td> </td><td align="left" valign="top"> Floor Mimic
23789
<tr><td align="left" valign="top"><a href="#st_005fcharge">9.5.12 st_charge</a></td><td> </td><td align="left" valign="top"> Electrical Charger
23791
<tr><td align="left" valign="top"><a href="#st_005fchess">9.5.13 st_chess</a></td><td> </td><td align="left" valign="top"> Movable Chess Knight Stone
23793
<tr><td align="left" valign="top"><a href="#st_005fcoinslot">9.5.14 st_coinslot</a></td><td> </td><td align="left" valign="top"> Coin Driven Switch
23795
<tr><td align="left" valign="top"><a href="#st_005fdarkglass">9.5.15 st_darkglass</a></td><td> </td><td align="left" valign="top"> Semitransparent metal framed Glass
23797
<tr><td align="left" valign="top"><a href="#st_005fdeath">9.5.16 st_death</a></td><td> </td><td align="left" valign="top"> Skull Stone
23799
<tr><td align="left" valign="top"><a href="#st_005fdisco">9.5.17 st_disco</a></td><td> </td><td align="left" valign="top"> Light shading Stone
23801
<tr><td align="left" valign="top"><a href="#st_005fdispenser">9.5.18 st_dispenser</a></td><td> </td><td align="left" valign="top"> Item Dispenser
23803
<tr><td align="left" valign="top"><a href="#st_005fdoor">9.5.19 st_door</a></td><td> </td><td align="left" valign="top"> Door of various Flavors
23805
<tr><td align="left" valign="top"><a href="#st_005ffake">9.5.20 st_fake</a></td><td> </td><td align="left" valign="top"> Fake mimicking other Stones
23807
<tr><td align="left" valign="top"><a href="#st_005fflash">9.5.21 st_flash</a></td><td> </td><td align="left" valign="top"> Partner Marble pushing Stone
23809
<tr><td align="left" valign="top"><a href="#st_005fflat">9.5.22 st_flat</a></td><td> </td><td align="left" valign="top"> Featured Gypsum Stone
23811
<tr><td align="left" valign="top"><a href="#st_005ffloppy">9.5.23 st_floppy</a></td><td> </td><td align="left" valign="top"> Floppy Driven Switch
23813
<tr><td align="left" valign="top"><a href="#st_005ffourswitch">9.5.24 st_fourswitch</a></td><td> </td><td align="left" valign="top"> Four Orientation Switch
23815
<tr><td align="left" valign="top"><a href="#st_005fghost">9.5.25 st_ghost</a></td><td> </td><td align="left" valign="top"> Invisible Transforming Stone
23817
<tr><td align="left" valign="top"><a href="#st_005fgrate">9.5.26 st_grate</a></td><td> </td><td align="left" valign="top"> Hovering metal Grate
23819
<tr><td align="left" valign="top"><a href="#st_005fgreenbrown">9.5.27 st_greenbrown</a></td><td> </td><td align="left" valign="top"> Mainly brown seedable stone
23821
<tr><td align="left" valign="top"><a href="#st_005fice">9.5.28 st_ice</a></td><td> </td><td align="left" valign="top"> Item and Floor freezing Ice block
23823
<tr><td align="left" valign="top"><a href="#st_005fjamb">9.5.29 st_jamb</a></td><td> </td><td align="left" valign="top"> Colored Door Jamb
23825
<tr><td align="left" valign="top"><a href="#st_005fkey">9.5.30 st_key</a></td><td> </td><td align="left" valign="top"> Key Driven Switch
23827
<tr><td align="left" valign="top"><a href="#st_005fknight">9.5.31 st_knight</a></td><td> </td><td align="left" valign="top"> Sword Bearing Knight Stone
23829
<tr><td align="left" valign="top"><a href="#st_005flaser">9.5.32 st_laser</a></td><td> </td><td align="left" valign="top"> Light emitting Laser
23831
<tr><td align="left" valign="top"><a href="#st_005flaserflop">9.5.33 st_laserflop</a></td><td> </td><td align="left" valign="top"> Light sensitive Monoflop
23833
<tr><td align="left" valign="top"><a href="#st_005flaserswitch">9.5.34 st_laserswitch</a></td><td> </td><td align="left" valign="top"> Light sensitive Switch
23835
<tr><td align="left" valign="top"><a href="#st_005flightglass">9.5.35 st_lightglass</a></td><td> </td><td align="left" valign="top"> Transparent metal framed Glass
23837
<tr><td align="left" valign="top"><a href="#st_005flightpassenger">9.5.36 st_lightpassenger</a></td><td> </td><td align="left" valign="top"> Stone pushed by Light
23839
<tr><td align="left" valign="top"><a href="#st_005fmagic">9.5.37 st_magic</a></td><td> </td><td align="left" valign="top"> Magic Transforming Stone
23841
<tr><td align="left" valign="top"><a href="#st_005fmail">9.5.38 st_mail</a></td><td> </td><td align="left" valign="top"> Mail office for Item transportation
23843
<tr><td align="left" valign="top"><a href="#st_005fmirror">9.5.39 st_mirror</a></td><td> </td><td align="left" valign="top"> Mirrors of all flavors
23845
<tr><td align="left" valign="top"><a href="#st_005fmonoflop">9.5.40 st_monoflop</a></td><td> </td><td align="left" valign="top"> Monoflop Switch
23847
<tr><td align="left" valign="top"><a href="#st_005foneway">9.5.41 st_oneway</a></td><td> </td><td align="left" valign="top"> Oneway Passage
23849
<tr><td align="left" valign="top"><a href="#st_005foxyd">9.5.42 st_oxyd</a></td><td> </td><td align="left" valign="top"> Game Target Stone
23851
<tr><td align="left" valign="top"><a href="#st_005fpassage">9.5.43 st_passage</a></td><td> </td><td align="left" valign="top"> Color dependent Passage
23853
<tr><td align="left" valign="top"><a href="#st_005fplaster">9.5.44 st_plaster</a></td><td> </td><td align="left" valign="top"> Gypsum sculptured Stone
23855
<tr><td align="left" valign="top"><a href="#st_005fplop">9.5.45 st_plop</a></td><td> </td><td align="left" valign="top"> Movable stone ceasing by a Plop
23857
<tr><td align="left" valign="top"><a href="#st_005fpolarswitch">9.5.46 st_polarswitch</a></td><td> </td><td align="left" valign="top"> Transparency Switch for Light Beams
23859
<tr><td align="left" valign="top"><a href="#st_005fportal">9.5.47 st_portal</a></td><td> </td><td align="left" valign="top"> Gate just passable by some Actor kinds
23861
<tr><td align="left" valign="top"><a href="#st_005fpull">9.5.48 st_pull</a></td><td> </td><td align="left" valign="top"> Pullable Stone
23863
<tr><td align="left" valign="top"><a href="#st_005fpuzzle">9.5.49 st_puzzle</a></td><td> </td><td align="left" valign="top"> Clusterable Puzzle Stones
23865
<tr><td align="left" valign="top"><a href="#st_005fquake">9.5.50 st_quake</a></td><td> </td><td align="left" valign="top"> Oxyd closing Stone
23867
<tr><td align="left" valign="top"><a href="#st_005frawglass">9.5.51 st_rawglass</a></td><td> </td><td align="left" valign="top"> Transparent Glass Block
23869
<tr><td align="left" valign="top"><a href="#st_005fredfiber">9.5.52 st_redfiber</a></td><td> </td><td align="left" valign="top"> Woven Fiber in a metal Frame
23871
<tr><td align="left" valign="top"><a href="#st_005frotator">9.5.53 st_rotator</a></td><td> </td><td align="left" valign="top"> Rotating Stone Impulser
23873
<tr><td align="left" valign="top"><a href="#st_005frubberband">9.5.54 st_rubberband</a></td><td> </td><td align="left" valign="top"> Rubberband generator
23875
<tr><td align="left" valign="top"><a href="#st_005fscissors">9.5.55 st_scissors</a></td><td> </td><td align="left" valign="top"> Scissors cutting rubberbands
23877
<tr><td align="left" valign="top"><a href="#st_005fshogun">9.5.56 st_shogun</a></td><td> </td><td align="left" valign="top"> Stackable Hole Stones
23879
<tr><td align="left" valign="top"><a href="#st_005fspitter">9.5.57 st_spitter</a></td><td> </td><td align="left" valign="top"> Cannonball spitting Stone
23881
<tr><td align="left" valign="top"><a href="#st_005fstoneimpulse">9.5.58 st_stoneimpulse</a></td><td> </td><td align="left" valign="top"> Neighbor Pushing pulsing Stone
23883
<tr><td align="left" valign="top"><a href="#st_005fsurprise">9.5.59 st_surprise</a></td><td> </td><td align="left" valign="top"> Random Transforming Stone
23885
<tr><td align="left" valign="top"><a href="#st_005fswap">9.5.60 st_swap</a></td><td> </td><td align="left" valign="top"> Neighbor Swapping Stone
23887
<tr><td align="left" valign="top"><a href="#st_005fswitch">9.5.61 st_switch</a></td><td> </td><td align="left" valign="top"> Classical on/off Switch
23889
<tr><td align="left" valign="top"><a href="#st_005fthief">9.5.62 st_thief</a></td><td> </td><td align="left" valign="top"> Item Thief
23891
<tr><td align="left" valign="top"><a href="#st_005ftimer">9.5.63 st_timer</a></td><td> </td><td align="left" valign="top"> Animated Timer
23893
<tr><td align="left" valign="top"><a href="#st_005fturnstile">9.5.64 st_turnstile</a></td><td> </td><td align="left" valign="top"> Turnstile Pivot
23895
<tr><td align="left" valign="top"><a href="#st_005fturnstilearm">9.5.65 st_turnstilearm</a></td><td> </td><td align="left" valign="top"> Turnstile Arm
23897
<tr><td align="left" valign="top"><a href="#st_005fvolcano">9.5.66 st_volcano</a></td><td> </td><td align="left" valign="top"> Spreading Volcano
23899
<tr><td align="left" valign="top"><a href="#st_005fwindow">9.5.67 st_window</a></td><td> </td><td align="left" valign="top"> Faced Window
23901
<tr><td align="left" valign="top"><a href="#st_005fyinyang">9.5.68 st_yinyang</a></td><td> </td><td align="left" valign="top"> Player Switch
23907
<a name="st_005factorimpulse"></a>
23908
<table cellpadding="1" cellspacing="1" border="0">
23909
<tr><td valign="middle" align="left">[<a href="#Special-Stones" title="Previous section in reading order"> < </a>]</td>
23910
<td valign="middle" align="left">[<a href="#st_005fbarrier" title="Next section in reading order"> > </a>]</td>
23911
<td valign="middle" align="left"> </td>
23912
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
23913
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
23914
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
23915
<td valign="middle" align="left"> </td>
23916
<td valign="middle" align="left"> </td>
23917
<td valign="middle" align="left"> </td>
23918
<td valign="middle" align="left"> </td>
23919
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
23920
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
23921
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
23922
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
23924
<a name="st_005factorimpulse-1"></a>
23925
<h3 class="subsection">9.5.1 st_actorimpulse</h3>
23926
<a name="index-st_005factorimpulse"></a>
23928
<p>An active bumper for actors and some stones like <a href="#st_005fboulder">st_boulder</a>. The
23929
actorimpulse stone can be made invisible while idle to introduce some surprise
23932
<p>Actors that hit this stone will not be reflected just passively. An additional
23933
force will be applied to them that can even be distorted. By default the actors
23934
are just pushed away from the center of the stone. A global attribute
23935
<a href="#ActorimpulseStrength">ActorimpulseStrength</a> gives a default force that can be overridden by the
23936
stone attribute ‘<samp>strength</samp>’.
23938
<p>For sophisticated usage you can distort this force by usage of the <a href="#hit_005f_002a">hit_*</a>
23939
attributes. Note that the ‘<samp>hit_factor</samp>’ overrides a ‘<samp>strength</samp>’
23942
<p>An actorimpulse stone can be configured by the ‘<samp>invisible</samp>’ attribute to
23943
be hidden while being idle. While pulsing any actorimpulse is visible. An
23944
invisible actorimpulse can be made permanently visible by hitting it with a
23945
revealed <a href="#it_005fbrush">it_brush</a> in the player’s inventory. The level author can configure
23946
<a href="#it_005fglasses">it_glasses</a> by addition of ‘<samp>SPOT_ACTORIMPULSE</samp>’ to show otherwise
23947
invisible actorimpulse stones. With the global attribute <a href="#ExtralifeGlasses">ExtralifeGlasses</a>
23948
even glasses generated by laser lighting an <a href="#it_005fextralife">it_extralife</a> can be configured
23949
to show invisible actorimpulse stones.
23951
<p>An <a href="#st_005fboulder">st_boulder</a> hitting an actorimpulse stone will revert its orientation
23952
and return in the incoming direction.
23954
<dl compact="compact">
23955
<dt> <b>Attributes:</b></dt>
23957
<dl compact="compact">
23958
<dt> <b>invisible</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
23959
<dd><p>An invisible actorimpulse stone is totally transparent. But the user will
23960
notice it, as actors will bounce with additional impulses.
23962
<dt> <b>strength</b> <i>values</i>: float number; <i>default</i>: <code>+200.0</code> See section <a href="#ActorimpulseStrength">ActorimpulseStrength</a></dt>
23963
<dd><p>A scalar factor for the impulse force. Positive numbers are attracting forces
23964
where as negative numbers are repelling forces.
23966
<dt> <b>hit_strength</b> <i>values</i>: float number; <i>default</i>: <code>nil</code> See section <a href="#hit_005f_002a">hit_*</a></dt>
23967
<dd><p>A ‘<samp>hit_strength</samp>’ overrides a given ‘<samp>strength</samp>’ attribute.
23969
<dt> <b>hit_distortion_xx</b> <i>values</i>: float number; <i>default</i>: <code>+1.0</code> See section <a href="#hit_005f_002a">hit_*</a></dt>
23970
<dt> <b>hit_distortion_xy</b> <i>values</i>: float number; <i>default</i>: <code>0.0</code> See section <a href="#hit_005f_002a">hit_*</a></dt>
23971
<dt> <b>hit_distortion_yx</b> <i>values</i>: float number; <i>default</i>: <code>0.0</code> See section <a href="#hit_005f_002a">hit_*</a></dt>
23972
<dt> <b>hit_distortion_yy</b> <i>values</i>: float number; <i>default</i>: <code>+1.0</code> See section <a href="#hit_005f_002a">hit_*</a></dt>
23976
<dt> <b>Messages:</b> none</dt>
23977
<dt> <b>Action:</b> See section <a href="#target">target</a>, See section <a href="#action">action</a></dt>
23978
<dt> <b>Variants:</b></dt>
23980
<dl compact="compact">
23981
<dt> <img src="images/st_actorimpulse.png" alt="images/st_actorimpulse"><p> <b>st_actorimpulse</b>: invisible = <code>false</code>
23983
<dt> <img src="images/fl_white.png" alt="images/fl_white"><p> <b>st_actorimpulse_invisible</b>: invisible = <code>true</code>
23991
<a name="st_005fbarrier"></a>
23992
<table cellpadding="1" cellspacing="1" border="0">
23993
<tr><td valign="middle" align="left">[<a href="#st_005factorimpulse" title="Previous section in reading order"> < </a>]</td>
23994
<td valign="middle" align="left">[<a href="#st_005fbeads" title="Next section in reading order"> > </a>]</td>
23995
<td valign="middle" align="left"> </td>
23996
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
23997
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
23998
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
23999
<td valign="middle" align="left"> </td>
24000
<td valign="middle" align="left"> </td>
24001
<td valign="middle" align="left"> </td>
24002
<td valign="middle" align="left"> </td>
24003
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
24004
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
24005
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
24006
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
24008
<a name="st_005fbarrier-1"></a>
24009
<h3 class="subsection">9.5.2 st_barrier</h3>
24010
<a name="index-st_005fbarrier"></a>
24012
<p>The barrier stone blocks actors that carry a given item kind in their inventory.
24013
By blocking all entries to a given room by barriers of the same ‘<samp>flavor</samp>’
24014
you can assure that no actor can use the given item kind within the room, even
24015
when the item is available outside of the room. The barrier acts like customs
24016
service. The barrier performs a deep check investigating not only the top level
24017
of the actor’s inventory. Every <a href="#it_005fbag">it_bag</a> will be checked recursively, too,
24018
ensuring that no instance of the searched item can pass the barrier.
24020
<p>The ‘<samp>flavor</samp>’ attribute determines the blocked item kind. The string
24021
<code>"all"</code> blocks any item. Any string containing an <a href="#Object-Kind">Object Kind</a>
24022
will block items of just the given kind. Of course you can use just kinds of
24023
<a href="#portable">portable</a> items. E.g. a ‘<samp>flavor</samp>’ of <code>"it_flag_white"</code> will just
24024
block actors that carry a white <a href="#it_005fflag">it_flag</a>, while <code>"it_flag"</code> would
24025
block actors carrying flags of any color. The blocked item kind is indicated on
24026
top of the barrier stone.
24028
<p>Be aware that barrier stones can be circumvented with two actors exchanging
24029
their positions by <a href="#it_005fyinyang">it_yinyang</a> usage. As the player can not drop the
24030
<a href="#it_005fyinyang">it_yinyang</a> it is no use to add an additional barrier stone for this item.
24031
Multiple actors assigned to a single player are another potential shortcut of
24034
<p>As barrier stones are usually bound to their initial position to fulfill their
24035
item blocking task, they are kept from being swapped of pulled by the
24036
‘<samp>static</samp>’ attribute’s default of <code>true</code>.
24038
<dl compact="compact">
24039
<dt> <b>Attributes:</b></dt>
24041
<dl compact="compact">
24042
<dt> <b>flavor</b> <i>values</i>: <code>"all"</code>, any portable item kind string; <i>default</i>: <code>"all"</code></dt>
24043
<dd><p>The item kind to be searched for.
24045
<dt> <b>static</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code></dt>
24046
<dd><p>Static barriers are neither swappable nor pullable.
24051
<dt> <b>Messages:</b> none</dt>
24052
<dt> <b>Action:</b> none</dt>
24053
<dt> <b>Variants:</b></dt>
24054
<dd><dl compact="compact">
24055
<dt> <img src="images/st_barrier.png" alt="images/st_barrier"><p> <b>st_barrier</b>: flavor=<code>"all"</code>
24062
<a name="st_005fbeads"></a>
24063
<table cellpadding="1" cellspacing="1" border="0">
24064
<tr><td valign="middle" align="left">[<a href="#st_005fbarrier" title="Previous section in reading order"> < </a>]</td>
24065
<td valign="middle" align="left">[<a href="#st_005fblocker" title="Next section in reading order"> > </a>]</td>
24066
<td valign="middle" align="left"> </td>
24067
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
24068
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
24069
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
24070
<td valign="middle" align="left"> </td>
24071
<td valign="middle" align="left"> </td>
24072
<td valign="middle" align="left"> </td>
24073
<td valign="middle" align="left"> </td>
24074
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
24075
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
24076
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
24077
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
24079
<a name="st_005fbeads-1"></a>
24080
<h3 class="subsection">9.5.3 st_beads</h3>
24081
<a name="index-st_005fbeads"></a>
24083
<p>A stone framed by glass beads. Like other <a href="#Transparent-Stones">Transparent Stones</a> it is
24084
passable for invisible actors, but it is not transparent to laser beams.
24086
<p>Like <a href="#st_005foneway">st_oneway</a> the beads stone does not detain visible actors once they
24087
entered the grid and lets them leave on any side.
24089
<dl compact="compact">
24090
<dt> <b>Attributes:</b> none</dt>
24091
<dt> <b>Messages:</b> none</dt>
24092
<dt> <b>Variants:</b></dt>
24093
<dd><dl compact="compact">
24094
<dt> <img src="images/st_beads.png" alt="images/st_beads"><p> <b>st_beads</b>
24102
<a name="st_005fblocker"></a>
24103
<table cellpadding="1" cellspacing="1" border="0">
24104
<tr><td valign="middle" align="left">[<a href="#st_005fbeads" title="Previous section in reading order"> < </a>]</td>
24105
<td valign="middle" align="left">[<a href="#st_005fblur" title="Next section in reading order"> > </a>]</td>
24106
<td valign="middle" align="left"> </td>
24107
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
24108
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
24109
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
24110
<td valign="middle" align="left"> </td>
24111
<td valign="middle" align="left"> </td>
24112
<td valign="middle" align="left"> </td>
24113
<td valign="middle" align="left"> </td>
24114
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
24115
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
24116
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
24117
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
24119
<a name="st_005fblocker-1"></a>
24120
<h3 class="subsection">9.5.4 st_blocker</h3>
24121
<a name="index-st_005fblocker"></a>
24123
<p>A door like object that shrinks to <a href="#it_005fblocker">it_blocker</a> when hit by an
24124
<a href="#st_005fboulder">st_boulder</a>. When the boulder did pass the blocker stays in its item like
24125
open state until it is passed again by a boulder which causes it to grow again
24126
to a blocker stone.
24128
<p>It fully supports the messages of any door like object and can be opened and
24129
closed by any switch like object. Note that due to the transformation between
24130
stone and item during opening and closing you should name the blocker
24131
(see section <a href="#name">name</a>) and address the blocker by this name. The complete identity
24132
with all attributes including any user attributes will be transferred between
24133
stone and item. E.g. ‘<samp>{st_switch, target="myblocker", action="toggle"}</samp>’
24134
will open and close a given blocker multiple times.
24136
<p>Note that the blocker is the only door object that allows a stone to be pushed
24137
through. Just boulders cause the growing. Any other stone keeps the open state.
24139
<p>Be aware that the <a href="#it_005fbrake">it_brake</a> destroys an <a href="#it_005fblocker">it_blocker</a>.
24141
<dl compact="compact">
24142
<dt> <b>Attributes:</b></dt>
24144
<dl compact="compact">
24145
<dt> <b>state</b>, <i>values</i>: <code>OPEN</code>, <code>CLOSED</code>; <i>default</i>: <code>CLOSED</code> See section <a href="#state">state</a></dt>
24146
<dd><p>The stone represents the closed state and will always return state ‘<samp>CLOSED</samp>’.
24147
But you can set its state what is equivalent to sending an open message in case
24148
of value ‘<samp>OPEN</samp>’ and a close message in case of value ‘<samp>CLOSED</samp>’.
24150
<a name="index-autoclose-1"></a>
24152
<dt> <b>autoclose</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
24153
<dd><p>This attribute is irrelevant to the blocker stone itself. But it is transferred
24154
to the <a href="#it_005fblocker">it_blocker</a> when the blocker opens.
24160
<dt> <b>Messages:</b></dt>
24162
<dl compact="compact">
24163
<dt> <b>signal</b> See section <a href="#signal">signal</a></dt>
24164
<dd><p>A signal of value 1 sends an open message, a signal of value 0 sends a close
24167
<dt> <b>toggle</b> See section <a href="#toggle">toggle</a></dt>
24168
<dd><p>A toggle causes an open unless the blocker stone is in the shrinking process.
24169
In this case it causes a close message.
24171
<dt> <b>open</b> See section <a href="#open">open</a></dt>
24172
<dd><p>Starts an opening by shrinking the blocker. Note that during the shrinking
24173
process the blocker still reports to be closed. The shrinking process can
24174
be reverted by a close message.
24176
<dt> <b>close</b> See section <a href="#close">close</a></dt>
24177
<dd><p>A close message takes only effect on a blocker stone that is in the shrinking
24178
process. The shrinking is stopped immediately and reverted to grow the blocker
24179
again to full size.
24184
<dt> <b>Action:</b> See section <a href="#target">target</a>, See section <a href="#action">action</a></dt>
24185
<dd><p>Sends an action at the moment the blocker reaches the closing state. That means
24186
an <a href="#it_005fblocker">it_blocker</a> did close and did generate this blocker stone as its
24187
successor. The value will be ‘<samp>false</samp>’ to express the closing state.
24190
<dt> <b>Variants:</b></dt>
24191
<dd><dl compact="compact">
24192
<dt> <img src="images/st_blocker.png" alt="images/st_blocker"><p> <b>st_blocker</b>
24194
<dd><p>A standard blocker stone.
24196
<dt> <img src="images/st_blocker.png" alt="images/st_blocker"><p> <b>st_blocker_new</b>
24198
<dd><p>A blocker that just starts growing. Mainly used internally as the direct
24199
successor of an <a href="#it_005fblocker">it_blocker</a>. But it may be useful to generate an initial
24200
snapshot of a moving boulder over a blocker line, too. See example levels.
24208
<a name="st_005fblur"></a>
24209
<table cellpadding="1" cellspacing="1" border="0">
24210
<tr><td valign="middle" align="left">[<a href="#st_005fblocker" title="Previous section in reading order"> < </a>]</td>
24211
<td valign="middle" align="left">[<a href="#st_005fboulder" title="Next section in reading order"> > </a>]</td>
24212
<td valign="middle" align="left"> </td>
24213
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
24214
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
24215
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
24216
<td valign="middle" align="left"> </td>
24217
<td valign="middle" align="left"> </td>
24218
<td valign="middle" align="left"> </td>
24219
<td valign="middle" align="left"> </td>
24220
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
24221
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
24222
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
24223
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
24225
<a name="st_005fblur-1"></a>
24226
<h3 class="subsection">9.5.5 st_blur</h3>
24227
<a name="index-st_005fblur"></a>
24229
<p>A gray stone that transforms on an actor hit into a <a href="#st_005fpassage">st_passage</a> depending
24230
on the color of actor. The color of the passage may be the same as
24231
the color of the actor or be of the opposite color. The flavor of the passage
24232
is always <code>"square"</code>.
24234
<p>In the first case the blur stone is pure gray and its ‘<samp>flavor</samp>’ is called
24235
<code>"straight"</code> due to the straight color preserving transformation. The
24236
touching actor will be able to pass the passage straight away.
24238
<p>In the second case the blur stone has an added white and black symbol to notify
24239
the player that, on touching the stone with a colored actor, this actor will not
24240
be able to pass the resulting passage. There are two flavors of such blur stones
24241
- <code>"cross"</code> which transform unconditionally on an actor hit to the opposite
24242
colored <a href="#st_005fpassage">st_passage</a> and flavor <code>"magic"</code> which transforms just on
24243
actors hitting the blur stone with a revealed <a href="#it_005fmagicwand">it_magicwand</a> or
24244
<a href="#it_005fbrush">it_brush</a> in their inventory.
24246
<p>For colorless actors a blur stone is just a standard stone without any special
24249
<dl compact="compact">
24250
<dt> <b>Attributes:</b></dt>
24252
<dl compact="compact">
24253
<dt> <b>flavor</b> <i>values</i>: <code>"straight"</code>, <code>"cross"</code>, <code>"magic"</code>; <i>default</i>: <code>"straight"</code></dt>
24254
<dd><p>The blur subkind.
24259
<dt> <b>Messages:</b> none</dt>
24260
<dt> <b>Action:</b> none</dt>
24261
<dt> <b>Variants:</b></dt>
24263
<dl compact="compact">
24264
<dt> <img src="images/st_blur_straight.png" alt="images/st_blur_straight"><p> <b>st_blur</b>: flavor = <code>"straight"</code>
24266
<dt> <img src="images/st_blur_straight.png" alt="images/st_blur_straight"><p> <b>st_blur_straight</b>: flavor = <code>"straight"</code>
24268
<dt> <img src="images/st_blur_cross.png" alt="images/st_blur_cross"><p> <b>st_blur_cross</b>: flavor = <code>"cross"</code>
24270
<dt> <img src="images/st_blur_cross.png" alt="images/st_blur_cross"><p> <b>st_blur_magic</b>: flavor = <code>"magic"</code>
24278
<a name="st_005fboulder"></a>
24279
<table cellpadding="1" cellspacing="1" border="0">
24280
<tr><td valign="middle" align="left">[<a href="#st_005fblur" title="Previous section in reading order"> < </a>]</td>
24281
<td valign="middle" align="left">[<a href="#st_005fbox" title="Next section in reading order"> > </a>]</td>
24282
<td valign="middle" align="left"> </td>
24283
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
24284
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
24285
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
24286
<td valign="middle" align="left"> </td>
24287
<td valign="middle" align="left"> </td>
24288
<td valign="middle" align="left"> </td>
24289
<td valign="middle" align="left"> </td>
24290
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
24291
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
24292
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
24293
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
24295
<a name="st_005fboulder-1"></a>
24296
<h3 class="subsection">9.5.6 st_boulder</h3>
24297
<a name="index-st_005fboulder"></a>
24299
<p>This solid stone moves into the direction shown by the arrow on its picture.
24300
A marble blocking its way is shattered. When a stone blocks its way, the boulder
24301
triggers it by a sequence of two internal messages. Some stones give way like
24302
<a href="#st_005fblocker">st_blocker</a>, ‘<samp>st_break_boulder</samp>’ (see section <a href="#st_005fbreak">st_break</a>), others change their
24303
state like <a href="#st_005foxyd">st_oxyd</a>, <a href="#st_005fstoneimpulse">st_stoneimpulse</a>, <a href="#st_005fquake">st_quake</a>,
24304
<a href="#st_005fmirror">st_mirror</a>, <a href="#st_005ffourswitch">st_fourswitch</a>, <a href="#st_005fvolcano">st_volcano</a>. A third category
24305
switches temporarily into another state on the first message sent when the
24306
boulder reaches a grid and switches back on the second message sent when the
24307
boulder gives up like <a href="#st_005fpassage">st_passage</a>, <a href="#st_005fflat">st_flat</a>, <a href="#st_005flightpassenger">st_lightpassenger</a>.
24309
<p>Items getting beneath a moving boulder may react like on any other stone move
24310
on top of them. Additionally <a href="#it_005fblocker">it_blocker</a> will be released to grow again
24311
to a blocking stone.
24313
<p>Boulder stones fall into <a href="#fl_005fabyss">fl_abyss</a>, but cross <a href="#fl_005fwater">fl_water</a>
24316
<p><a href="#it_005fmagicwand">it_magicwand</a> and lasers reverse its orientation. An <a href="#st_005factorimpulse">st_actorimpulse</a>
24317
reverts the orientation if the boulder hits it frontally. An <a href="#st_005frotator">st_rotator</a>
24318
changes its orientation according to the rotator’s direction. An
24319
<a href="#st_005fstoneimpulse">st_stoneimpulse</a> pushes a boulder away.
24321
<dl compact="compact">
24322
<dt> <b>Attributes:</b></dt>
24324
<dl compact="compact">
24325
<dd><a name="index-orientation-1"></a>
24327
<dt> <b>orientation</b>, <i>values</i>: <code>NORTH</code>, <code>EAST</code>, <code>SOUTH</code>, <code>WEST</code>; <i>default</i>: <code>NORTH</code></dt>
24328
<dd><p>The orientation of the boulder that is shown by its arrow. It determines the
24329
direction that the boulder will take on its next move.
24331
<dt> <b>counterclock</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
24332
<dd><p>The standard turning direction is clockwise. Use this attribute to revert the
24338
<dt> <b>Messages:</b></dt>
24340
<dl compact="compact">
24341
<dd><a name="index-orientate"></a>
24343
<dt> <b>orientate</b>, <i>value type</i>: direction</dt>
24344
<dd><p>Change the orientation to the given orientation value. The <a href="#st_005ffourswitch">st_fourswitch</a>
24345
provides a compatible action which allows you to set a boulder as
24346
target and this message as action.
24348
<dt> <b>turn</b></dt>
24349
<dd><p>Turn orientation in turning direction as defined by attribute
24350
‘<samp>counterclock</samp>’.
24352
<dt> <b>turnback</b></dt>
24353
<dd><p>Turn orientation in opposite turning direction as defined by attribute
24354
‘<samp>counterclock</samp>’.
24356
<dt> <b>flip</b></dt>
24357
<dd><p>Turn orientation into the reverse of the current orientation.
24362
<dt> <b>Action:</b></dt>
24366
<dt> <b>Variants:</b></dt>
24368
<dl compact="compact">
24369
<dt> <img src="images/st_boulder.png" alt="images/st_boulder"><p> <b>st_boulder</b>
24371
<dt> <img src="images/st_boulder.png" alt="images/st_boulder"><p> <b>st_boulder_n</b>: orientation = <code>NORTH</code>
24373
<dt> <img src="images/st_boulder_b.png" alt="images/st_boulder_b"><p> <b>st_boulder_e</b>: orientation = <code>EAST</code>
24375
<dt> <img src="images/st_boulder_c.png" alt="images/st_boulder_c"><p> <b>st_boulder_s</b>: orientation = <code>SOUTH</code>
24377
<dt> <img src="images/st_boulder_d.png" alt="images/st_boulder_d"><p> <b>st_boulder_w</b>: orientation = <code>WEST</code>
24385
<a name="st_005fbox"></a>
24386
<table cellpadding="1" cellspacing="1" border="0">
24387
<tr><td valign="middle" align="left">[<a href="#st_005fboulder" title="Previous section in reading order"> < </a>]</td>
24388
<td valign="middle" align="left">[<a href="#st_005fbrake" title="Next section in reading order"> > </a>]</td>
24389
<td valign="middle" align="left"> </td>
24390
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
24391
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
24392
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
24393
<td valign="middle" align="left"> </td>
24394
<td valign="middle" align="left"> </td>
24395
<td valign="middle" align="left"> </td>
24396
<td valign="middle" align="left"> </td>
24397
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
24398
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
24399
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
24400
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
24402
<a name="st_005fbox-1"></a>
24403
<h3 class="subsection">9.5.7 st_box</h3>
24404
<a name="index-st_005fbox"></a>
24406
<p>A movable, floor building stone of various flavors.
24408
<p>This very common stone is well known in its default flavor <code>"wood"</code>. But it
24409
exists in the flavors <code>"hay"</code> and <code>"rock"</code>, too. The flavor
24410
<code>"wood"</code> has a random wood tile orientation. You can set wooden boxes of
24411
given tile orientation by the variants <code>st_box_wood_h</code> and
24412
<code>st_box_wood_v</code>.
24414
<p>The flavors <code>"wood"</code> and <code>"hay"</code> may originate from a growing
24415
<a href="#it_005fseed">it_seed</a>. Due to the <a href="#Snapshot-Principle">Snapshot Principle</a> special box variants exist
24416
just for usage in level initialization: <code>st_box_wood_growing</code> and
24417
<code>st_box_hay_growing</code>.
24419
<p>All variants can easily be pushed around, do press <a href="#it_005ftrigger">it_trigger</a>s and do fall
24420
into <a href="#fl_005fabyss">fl_abyss</a>, <a href="#fl_005fwater">fl_water</a> and <a href="#fl_005fswamp">fl_swamp</a> by building a framed floor
24421
of the kind indicated by their ‘<samp>flavor</samp>’ attribute. All boxes will fall on
24422
the first occasion. Even if they receive two push impulses at the same time by
24423
<a href="#ot_005fwire">ot_wire</a> they fall on the first grid. Thus it is impossible to push a box
24424
over a ditch. Boxes will fall if the floor beneath them vanishes. E.g. an
24425
<a href="#it_005fbomb">it_bomb</a> explosion beneath a box may change the floor to <a href="#fl_005fabyss">fl_abyss</a> or
24426
a flood stream may change the floor to <a href="#fl_005fwater">fl_water</a>. In all these cases the
24427
box above falls immediately building its kind of floor.
24429
<p>Note that all boxes do actively support <a href="#Flood-Spreading">Flood Spreading</a>. That means that
24430
they let an arriving flood stream flow beneath them. In case the floor beneath
24431
the box is floodable it will change to water and the box will fall. The new built
24432
floor itself conserves the flood stream feature and will let the stream flood
24433
neighboring floodable floors, too. (see section <a href="#fl_005fwood">fl_wood</a>, <a href="#fl_005fhay">fl_hay</a>, <a href="#fl_005frock">fl_rock</a>).
24435
<p>The box flavors do differ in some small but essential features. Whereas the
24436
flavors <code>"wood"</code> and <code>"rock"</code> do cause an <a href="#it_005fbomb">it_bomb</a> to explode
24437
when being pushed over it, a <code>"hay"</code> flavored box does not ignite bombs.
24439
<p>According to their flavor <code>"wood"</code> and <code>"hay"</code> will burn on fire.
24440
But <code>"rock"</code> flavored boxes are fire resistant and fire blocking.
24442
<dl compact="compact">
24443
<dt> <b>Attributes:</b></dt>
24445
<dl compact="compact">
24446
<dt> <b>flavor</b> <i>values</i>: <code>"wood"</code>, <code>"hay"</code>, <code>"rock"</code>; <i>default</i>: <code>"wood"</code>; <i>access</i>: read only</dt>
24447
<dt> <b>secure</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
24448
<dd><p>This attribute is inherited to a floor build by a falling box and guarantees
24449
then secure fire burning.
24454
<dt> <b>Messages:</b> none</dt>
24455
<dt> <b>Action:</b> none</dt>
24456
<dt> <b>Variants:</b></dt>
24458
<dl compact="compact">
24459
<dt> <img src="images/st_box_wood.png" alt="images/st_box_wood"><p> <b>st_box</b>: flavor=<code>"wood"</code>
24461
<dt> <img src="images/st_box_wood.png" alt="images/st_box_wood"><p> <b>st_box_wood</b>: flavor=<code>"wood"</code>
24463
<dt> <img src="images/st_box_wood.png" alt="images/st_box_wood"><p> <b>st_box_wood_h</b>: flavor=<code>"wood"</code>
24465
<dt> <img src="images/st_box_wood_2.png" alt="images/st_box_wood_2"><p> <b>st_box_wood_v</b>: flavor=<code>"wood"</code>
24467
<dt> <img src="images/st_box_wood_growing.png" alt="images/st_box_wood_growing"><p> <b>st_box_wood_growing</b>: flavor=<code>"wood"</code>
24469
<dt> <img src="images/st_box_hay.png" alt="images/st_box_hay"><p> <b>st_box_hay</b>: flavor=<code>"hay"</code>
24471
<dt> <img src="images/st_box_hay_4.png" alt="images/st_box_hay_4"><p> <b>st_box_hay_growing</b>: flavor=<code>"hay"</code>
24473
<dt> <img src="images/st_box_rock.png" alt="images/st_box_rock"><p> <b>st_box_rock</b>: flavor=<code>"rock"</code>
24481
<a name="st_005fbrake"></a>
24482
<table cellpadding="1" cellspacing="1" border="0">
24483
<tr><td valign="middle" align="left">[<a href="#st_005fbox" title="Previous section in reading order"> < </a>]</td>
24484
<td valign="middle" align="left">[<a href="#st_005fbreak" title="Next section in reading order"> > </a>]</td>
24485
<td valign="middle" align="left"> </td>
24486
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
24487
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
24488
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
24489
<td valign="middle" align="left"> </td>
24490
<td valign="middle" align="left"> </td>
24491
<td valign="middle" align="left"> </td>
24492
<td valign="middle" align="left"> </td>
24493
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
24494
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
24495
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
24496
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
24498
<a name="st_005fbrake-1"></a>
24499
<h3 class="subsection">9.5.8 st_brake</h3>
24500
<a name="index-st_005fbrake"></a>
24502
<p>The brake stone can be used to block a running <a href="#st_005fboulder">st_boulder</a> or a
24503
<a href="#st_005flightpassenger">st_lightpassenger</a>, what likely has given this object its name. But unlike
24504
all other blocking stones the brake can be picked up as an item by actors and
24505
dropped anywhere else.
24507
<p>When an actor passes a brake stone, rolling on the floor or while jumping, it
24508
will pick up the object like other items. The brake will be added as an
24509
<a href="#it_005fbrake">it_brake</a> to its inventory. Unlike other items the brake can be dropped
24510
even on grids that are already occupied by an item. But you can not drop the
24511
brake beneath another stone like a <a href="#it_005fseed">it_seed</a>.
24513
<p>On dropping the brake item it transforms immediately back to an <a href="#st_005fbrake">st_brake</a>
24514
without killing the item positioned on the grid. Just one exception is a brake
24515
being dropped on top of an <a href="#it_005fblocker">it_blocker</a> what results in an elimination of
24516
the blocker. On the other hand a brake stone will press an <a href="#it_005ftrigger">it_trigger</a>
24517
beneath, what makes the brake item a portable trigger key.
24519
<p>The brake stone explodes when it is exposed to laser light or a <a href="#it_005fbomb">it_bomb</a>
24520
explosion on a direct neighbor grid.
24522
<dl compact="compact">
24523
<dt> <b>Attributes:</b> none</dt>
24524
<dt> <b>Messages:</b> none</dt>
24525
<dt> <b>Action:</b> none</dt>
24526
<dt> <b>Variants:</b> none</dt>
24527
<dd><dl compact="compact">
24528
<dt> <img src="images/st_brake.png" alt="images/st_brake"><p> <b>st_brake</b>
24535
<a name="st_005fbreak"></a>
24536
<table cellpadding="1" cellspacing="1" border="0">
24537
<tr><td valign="middle" align="left">[<a href="#st_005fbrake" title="Previous section in reading order"> < </a>]</td>
24538
<td valign="middle" align="left">[<a href="#st_005fbrownpyramid" title="Next section in reading order"> > </a>]</td>
24539
<td valign="middle" align="left"> </td>
24540
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
24541
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
24542
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
24543
<td valign="middle" align="left"> </td>
24544
<td valign="middle" align="left"> </td>
24545
<td valign="middle" align="left"> </td>
24546
<td valign="middle" align="left"> </td>
24547
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
24548
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
24549
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
24550
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
24552
<a name="st_005fbreak-1"></a>
24553
<h3 class="subsection">9.5.9 st_break</h3>
24554
<a name="index-st_005fbreak"></a>
24556
<p>A stone of various flavors that is breakable under various conditions. The
24557
stone may be breakable by actors of some kind, with or without an item, by an
24558
igniting explosion on a neighboring grid and in most cases by laser light.
24559
Besides being breakable the stone is a standard stone. The different flavors let
24560
this stone appear in quite different outlooks.
24562
<p>The flavor <code>"plain"</code> is a grey stone that is breakable by any actor hit
24563
with a revealed <a href="#it_005fhammer">it_hammer</a> and by a laser beam hitting any side.
24565
<p>The flavors <code>"black"</code> and <code>"white"</code> look similar to the <code>"plain"</code>
24566
variant just with a small colored ball sitting on top. But these variants are
24567
just breakable by any actors of matching color. Of course the actors need a
24568
revealed <a href="#it_005fhammer">it_hammer</a>. Laser beams do break the stone, too.
24570
<p>The flavor <code>"oxydc"</code> looks like a cracked <a href="#st_005foxyd">st_oxyd</a> of flavor
24571
<code>"c"</code>. Like the <code>"plain"</code> variant it is breakable by any actor hit
24572
with a revealed <a href="#it_005fhammer">it_hammer</a> and by a laser beam hitting any side.
24574
<p>The flavor <code>"boulder"</code> looks like a yellowish version of flavor
24575
<code>"oxydc"</code>. It is breakable under the same conditions plus additionally by
24576
an <a href="#st_005fboulder">st_boulder</a> hitting on one of its sides.
24578
<p>The flavor <code>"bug"</code> looks like an <a href="#st_005fflat">st_flat</a> with a bug symbol on top.
24579
It is just breakable by an <a href="#ac_005fbug">ac_bug</a>. No other actor and no laser light will
24582
<p>The flavor <code>"laser"</code> looks identical to an <a href="#st_005fflat">st_flat</a>. It is not
24583
breakable by actors. Just laser light beams on one of its faces will break this
24586
<p>All but the variant <code>"bug"</code> will break on neighboring ignitions like those
24587
caused by an exploding <a href="#it_005fdynamite">it_dynamite</a> on a direct neighboring position or an
24588
exploding black <a href="#it_005fbomb">it_bomb</a> on a diagonal neighboring position.
24590
<dl compact="compact">
24591
<dt> <b>Attributes:</b></dt>
24593
<dl compact="compact">
24594
<dt> <b>flavor</b> <i>values</i>: <code>"plain"</code>, <code>"black"</code>, <code>"white"</code>, <code>"oxydc"</code>, <code>"boulder"</code>, <code>"bug"</code>, <code>"laser"</code>; <i>default</i>: <code>"plain"</code>; <i>access</i>: read only</dt>
24598
<dt> <b>Messages:</b></dt>
24599
<dd><dl compact="compact">
24600
<dt> <b>ignite</b></dt>
24601
<dd><p>Break stone with exception of flavor <code>"bug"</code>.
24606
<dt> <b>Action:</b> none</dt>
24607
<dt> <b>Variants:</b></dt>
24609
<dl compact="compact">
24610
<dt> <img src="images/st_break_plain.png" alt="images/st_break_plain"><p> <b>st_break</b>: flavor=<code>"plain"</code>
24612
<dt> <img src="images/st_break_plain.png" alt="images/st_break_plain"><p> <b>st_break_plain</b>: flavor=<code>"plain"</code>
24614
<dt> <img src="images/st_break_black.png" alt="images/st_break_black"><p> <b>st_break_black</b>: flavor=<code>"black"</code>
24616
<dt> <img src="images/st_break_white.png" alt="images/st_break_white"><p> <b>st_break_white</b>: flavor=<code>"white"</code>
24618
<dt> <img src="images/st_break_oxydc.png" alt="images/st_break_oxydc"><p> <b>st_break_oxydc</b>: flavor=<code>"oxydc"</code>
24620
<dt> <img src="images/st_break_boulder.png" alt="images/st_break_boulder"><p> <b>st_break_boulder</b>: flavor=<code>"boulder"</code>
24622
<dt> <img src="images/st_break_bug.png" alt="images/st_break_bug"><p> <b>st_break_bug</b>: flavor=<code>"bug"</code>
24624
<dt> <img src="images/st_flat.png" alt="images/st_flat"><p> <b>st_break_laser</b>: flavor=<code>"laser"</code>
24632
<a name="st_005fbrownpyramid"></a>
24633
<table cellpadding="1" cellspacing="1" border="0">
24634
<tr><td valign="middle" align="left">[<a href="#st_005fbreak" title="Previous section in reading order"> < </a>]</td>
24635
<td valign="middle" align="left">[<a href="#st_005fchameleon" title="Next section in reading order"> > </a>]</td>
24636
<td valign="middle" align="left"> </td>
24637
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
24638
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
24639
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
24640
<td valign="middle" align="left"> </td>
24641
<td valign="middle" align="left"> </td>
24642
<td valign="middle" align="left"> </td>
24643
<td valign="middle" align="left"> </td>
24644
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
24645
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
24646
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
24647
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
24649
<a name="st_005fbrownpyramid-1"></a>
24650
<h3 class="subsection">9.5.10 st_brownpyramid</h3>
24651
<a name="index-st_005fbrownpyramid"></a>
24653
<p>A brown gray pyramid shaped stone. This stone is just standard stone besides
24654
the fact that it can be destroyed by an <a href="#ot_005fcannonball">ot_cannonball</a> emitted by an
24655
<a href="#st_005fspitter">st_spitter</a> that happens to fall on its top.
24657
<dl compact="compact">
24658
<dt> <b>Variants:</b></dt>
24659
<dd><dl compact="compact">
24660
<dt> <img src="images/st_brownpyramid.png" alt="images/st_brownpyramid"><p> <b>st_brownpyramid</b>
24667
<a name="st_005fchameleon"></a>
24668
<table cellpadding="1" cellspacing="1" border="0">
24669
<tr><td valign="middle" align="left">[<a href="#st_005fbrownpyramid" title="Previous section in reading order"> < </a>]</td>
24670
<td valign="middle" align="left">[<a href="#st_005fcharge" title="Next section in reading order"> > </a>]</td>
24671
<td valign="middle" align="left"> </td>
24672
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
24673
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
24674
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
24675
<td valign="middle" align="left"> </td>
24676
<td valign="middle" align="left"> </td>
24677
<td valign="middle" align="left"> </td>
24678
<td valign="middle" align="left"> </td>
24679
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
24680
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
24681
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
24682
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
24684
<a name="st_005fchameleon-1"></a>
24685
<h3 class="subsection">9.5.11 st_chameleon</h3>
24686
<a name="index-st_005fchameleon"></a>
24688
<p>A stone that has no own image but mimics the floor beneath. Thus it is fairly
24689
invisible. But as it shows the same image as the floor it hides items and even
24690
actors on the grid. The stone is hovering, thus it does not press any
24691
<a href="#it_005ftrigger">it_trigger</a> and lets pass any actors and laser light, too.
24693
<p>Please make rare usage of this stone in Enigma 1.1* as the current display
24694
engine does not really support this stone. All dynamic floors and floor changes
24695
do cause faulty displays. Thus use it currently only in patterns without any
24698
<dl compact="compact">
24699
<dt> <b>Variants:</b></dt>
24700
<dd><dl compact="compact">
24701
<dt> <img src="images/fl_white.png" alt="images/fl_white"><p> <b>st_chameleon</b>
24708
<a name="st_005fcharge"></a>
24709
<table cellpadding="1" cellspacing="1" border="0">
24710
<tr><td valign="middle" align="left">[<a href="#st_005fchameleon" title="Previous section in reading order"> < </a>]</td>
24711
<td valign="middle" align="left">[<a href="#st_005fchess" title="Next section in reading order"> > </a>]</td>
24712
<td valign="middle" align="left"> </td>
24713
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
24714
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
24715
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
24716
<td valign="middle" align="left"> </td>
24717
<td valign="middle" align="left"> </td>
24718
<td valign="middle" align="left"> </td>
24719
<td valign="middle" align="left"> </td>
24720
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
24721
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
24722
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
24723
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
24725
<a name="st_005fcharge-1"></a>
24726
<h3 class="subsection">9.5.12 st_charge</h3>
24727
<a name="index-st_005fcharge"></a>
24729
<p>An electrical charger for actors. The image reflects the sign of the
24730
‘<samp>charge</samp>’ attribute.
24732
<p>Any actor hitting this stone will recharge its <a href="#charge">charge</a> attribute to the
24733
value given by the stone’s ‘<samp>charge</samp>’ attribute.
24735
<p>The stone itself does not cause any electrical forces. It is neither attracting
24736
nor repelling for charged actors. Electrical forces applied to actors just
24737
depend on the charges of different actors and the global attribute
24738
<a href="#ElectricStrength">ElectricStrength</a>.
24740
<dl compact="compact">
24741
<dt> <b>Attributes:</b></dt>
24743
<dl compact="compact">
24744
<dt> <b>charge</b> <i>values</i>: floating point numbers; <i>default</i>: <code>0.0</code></dt>
24745
<dd><p>The charge applied to hitting actors.
24750
<dt> <b>Messages:</b> none</dt>
24751
<dt> <b>Action:</b> none</dt>
24752
<dt> <b>Variants:</b></dt>
24754
<dl compact="compact">
24755
<dt> <img src="images/st_charge_zero.png" alt="images/st_charge_zero"><p> <b>st_charge</b>: charge = <code>0.0</code>
24757
<dt> <img src="images/st_charge_zero.png" alt="images/st_charge_zero"><p> <b>st_charge_zero</b>: charge = <code>0.0</code>
24759
<dt> <img src="images/st_charge_plus.png" alt="images/st_charge_plus"><p> <b>st_charge_plus</b>: charge = <code>+1.0</code>
24761
<dt> <img src="images/st_charge_minus.png" alt="images/st_charge_minus"><p> <b>st_charge_minus</b>: charge = <code>-1.0</code>
24769
<a name="st_005fchess"></a>
24770
<table cellpadding="1" cellspacing="1" border="0">
24771
<tr><td valign="middle" align="left">[<a href="#st_005fcharge" title="Previous section in reading order"> < </a>]</td>
24772
<td valign="middle" align="left">[<a href="#st_005fcoinslot" title="Next section in reading order"> > </a>]</td>
24773
<td valign="middle" align="left"> </td>
24774
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
24775
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
24776
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
24777
<td valign="middle" align="left"> </td>
24778
<td valign="middle" align="left"> </td>
24779
<td valign="middle" align="left"> </td>
24780
<td valign="middle" align="left"> </td>
24781
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
24782
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
24783
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
24784
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
24786
<a name="st_005fchess-1"></a>
24787
<h3 class="subsection">9.5.13 st_chess</h3>
24788
<a name="index-st_005fchess"></a>
24790
<p>A chess stone is like a chess knight. It exists in the two colors black and
24791
white, it can jump and make a chess knight move. It can even beat stones at
24792
the target position.
24794
<p>A black chess can only be moved with a black marble, a white one with white
24795
marbles. The jump direction is given by the marble hit direction. It moves
24796
two grid steps into the direction, into which other movable stones move just one
24797
grid, plus one grid step vertical. The vertical direction is given by the
24798
marbles vertical velocity component.
24800
<p>When there is a chess stone of opposite color or an <a href="#st_005fthief">st_thief</a> at the target
24801
position of a knight move, this stone is captured and destroyed.
24803
<p>When hit with a revealed <a href="#it_005fmagicwand">it_magicwand</a>, a chess stone changes color.
24805
<p>Chess stones fall into <a href="#fl_005fabyss">fl_abyss</a> and sink in <a href="#fl_005fswamp">fl_swamp</a>, but cross
24806
<a href="#fl_005fwater">fl_water</a> undamaged.
24808
<p>A chess stone that jumps onto a <a href="#fl_005fthief">fl_thief</a> captures and inactivates the
24811
<p>Chess stones can’t jump over or into fire (see <a href="#Fire-Spreading">Fire Spreading</a>). At least,
24812
a chess knight is brave enough not to panic when fire starts to burn beneath.
24813
Note that fire can’t ignite the floor below a chess stone. In this
24814
context it acts like an immovable stone. In the same sense, they don’t act on
24815
stone impulses of <a href="#st_005fstoneimpulse">st_stoneimpulse</a> or <a href="#it_005fpuller">it_puller</a>.
24817
<dl compact="compact">
24818
<dt> <b>Attributes:</b></dt>
24820
<dl compact="compact">
24821
<dt> <b>color</b> <i>values</i>: <code>BLACK</code>, <code>WHITE</code>; <i>default</i>: <code>BLACK</code></dt>
24822
<dd><p>The color of the chess stone
24824
<dt> <b>movable</b> <i>values</i>: <code>true</code>; <i>default</i>: <code>true</code> See section <a href="#movable">movable</a></dt>
24825
<dd><p>Read only attribute that states the ability of a chess stone to move.
24830
<dt> <b>Messages:</b></dt>
24832
<dl compact="compact">
24833
<dt> <b>flip</b></dt>
24834
<dd><p>Flip the color of the stone.
24836
<dt> <b>move</b>, <i>value type</i>: position; <i>values</i>: <code>NNE</code>, <code>NEE</code>, <code>SEE</code>, <code>SSE</code>, <code>SSW</code>, <code>SWW</code>, <code>NWW</code>, <code>NNW</code></dt>
24837
<dd><p>Jump into the given direction.
24842
<dt> <b>Action:</b> none</dt>
24843
<dt> <b>Variants:</b></dt>
24845
<dl compact="compact">
24846
<dt> <img src="images/st_chess_black.png" alt="images/st_chess_black"><p> <b>st_chess</b>: color = <code>BLACK</code>
24848
<dt> <img src="images/st_chess_black.png" alt="images/st_chess_black"><p> <b>st_chess_black</b>: color = <code>BLACK</code>
24850
<dt> <img src="images/st_chess_white.png" alt="images/st_chess_white"><p> <b>st_chess_white</b>: color = <code>WHITE</code>
24858
<a name="st_005fcoinslot"></a>
24859
<table cellpadding="1" cellspacing="1" border="0">
24860
<tr><td valign="middle" align="left">[<a href="#st_005fchess" title="Previous section in reading order"> < </a>]</td>
24861
<td valign="middle" align="left">[<a href="#st_005fdarkglass" title="Next section in reading order"> > </a>]</td>
24862
<td valign="middle" align="left"> </td>
24863
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
24864
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
24865
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
24866
<td valign="middle" align="left"> </td>
24867
<td valign="middle" align="left"> </td>
24868
<td valign="middle" align="left"> </td>
24869
<td valign="middle" align="left"> </td>
24870
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
24871
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
24872
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
24873
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
24875
<a name="st_005fcoinslot-1"></a>
24876
<h3 class="subsection">9.5.14 st_coinslot</h3>
24877
<a name="index-st_005fcoinslot"></a>
24879
<p>A switch that is activated by insertion of an <a href="#it_005fcoin">it_coin</a>. Just actors
24880
assigned to a player can insert coins out of their item inventory by hitting
24881
the coinslot with the coin being the first item. Depending on the coin type the
24882
coinslot remains in state ‘<samp>ON</samp>’ for a given ‘<samp>interval</samp>’ before switching
24883
back to state ‘<samp>OFF</samp>’. Multiple inserted coins do prolong the activity
24886
<p>Standard not ‘<samp>instant</samp>’ coinslots do activate after the insertion process
24887
of the coin. No additional coins can be inserted while another coin is being
24888
inserted. This prevents unintended multiple coin insertions. On the other hand
24889
the player has to insert additional coins early enough to prolong the active
24890
state without temporarily switching back to ‘<samp>OFF</samp>’ state. If the first
24891
interval runs off while the next coin did not yet finish its insertion the
24892
coinslot will first switch ‘<samp>OFF</samp>’ and switch ‘<samp>ON</samp>’ when the next coin
24893
is completely inserted.
24895
<p>The activity interval of a coin insertion depends on the type of the coin. For
24896
each type you can set the interval by the ‘<samp>interval_*</samp>’ attributes. You
24897
can reject the insertion of a coin type by setting its interval to
24898
‘<samp>COIN_REJECT</samp>’. The coin will not be taken from the players inventory. By
24899
a value of ‘<samp>COIN_IGNORE</samp>’ on the interval attribute the coinslot will fetch
24900
the coin but will not act at all.
24902
<p>Coinslots configured as ‘<samp>instant</samp>’ do activate immediately when the actor
24903
hits the stone. On every actor hit a coin is inserted independent of the last
24906
<p>The ‘<samp>state</samp>’ of a coinslot can be requested but it can not be set, neither
24907
by attribute nor by messages.
24909
<dl compact="compact">
24910
<dt> <b>Attributes:</b></dt>
24912
<dl compact="compact">
24913
<dt> <b>state</b>, <i>values</i>: <code>ON</code>, <code>OFF</code>; <i>default</i>: <code>OFF</code>; <i>access</i>: <code>read only</code> See section <a href="#state">state</a></dt>
24914
<dd><p>Current activity state of the coinslot.
24916
<dt> <b>instant</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
24917
<dd><p>A default coinslot switches to active state after insertion of a coin and allows
24918
the insertion of just one coin at a time.
24920
<dt> <b>interval_s</b> <i>values</i>: positive number, <code>COIN_REJECT</code>, <code>COIN_IGNORE</code>; <i>default</i>: <code>3.0</code></dt>
24921
<dd><p>Number of additional active seconds on insertion of a small <a href="#it_005fcoin">it_coin</a>.
24923
<dt> <b>interval_m</b> <i>values</i>: positive number, <code>COIN_REJECT</code>, <code>COIN_IGNORE</code>; <i>default</i>: <code>6.0</code></dt>
24924
<dd><p>Number of additional active seconds on insertion of a medium <a href="#it_005fcoin">it_coin</a>.
24926
<dt> <b>interval_l</b> <i>values</i>: positive number, <code>COIN_REJECT</code>, <code>COIN_IGNORE</code>; <i>default</i>: <code>12.0</code></dt>
24927
<dd><p>Number of additional active seconds on insertion of a large <a href="#it_005fcoin">it_coin</a>.
24932
<dt> <b>Messages:</b> none</dt>
24933
<dt> <b>Action:</b> See section <a href="#target">target</a>, See section <a href="#action">action</a></dt>
24934
<dt> <b>Variants:</b></dt>
24936
<dl compact="compact">
24937
<dt> <img src="images/st_coinslot.png" alt="images/st_coinslot"><p> <b>st_coinslot</b>: instant = <code>false</code>
24939
<dt> <img src="images/st_coinslot.png" alt="images/st_coinslot"><p> <b>st_coinslot_instant</b>: instant = <code>true</code>
24947
<a name="st_005fdarkglass"></a>
24948
<table cellpadding="1" cellspacing="1" border="0">
24949
<tr><td valign="middle" align="left">[<a href="#st_005fcoinslot" title="Previous section in reading order"> < </a>]</td>
24950
<td valign="middle" align="left">[<a href="#st_005fdeath" title="Next section in reading order"> > </a>]</td>
24951
<td valign="middle" align="left"> </td>
24952
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
24953
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
24954
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
24955
<td valign="middle" align="left"> </td>
24956
<td valign="middle" align="left"> </td>
24957
<td valign="middle" align="left"> </td>
24958
<td valign="middle" align="left"> </td>
24959
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
24960
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
24961
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
24962
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
24964
<a name="st_005fdarkglass-1"></a>
24965
<h3 class="subsection">9.5.15 st_darkglass</h3>
24966
<a name="index-st_005fdarkglass"></a>
24968
<p>A metal framed semi transparent glass stone. It exists in static, movable and
24969
hollow variants and is just transparent to laser light in its hollow variant.
24970
Like other <a href="#Transparent-Stones">Transparent Stones</a> it is passable for invisible actors as long
24971
as it is not ‘<samp>movable</samp>’.
24973
<p>A <a href="#st_005flightpassenger">st_lightpassenger</a> in state ‘<samp>OFF</samp>’ looks identical to a darkglass
24976
<dl compact="compact">
24977
<dt> <b>Attributes:</b></dt>
24979
<dl compact="compact">
24980
<dt> <b>hollow</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: read only See section <a href="#hollow">hollow</a></dt>
24981
<dt> <b>movable</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: read only See section <a href="#movable">movable</a></dt>
24985
<dt> <b>Messages:</b> none</dt>
24986
<dt> <b>Variants:</b></dt>
24987
<dd><dl compact="compact">
24988
<dt> <img src="images/st_darkglass.png" alt="images/st_darkglass"><p> <b>st_darkglass</b>: hollow = <code>false</code>, movable = <code>false</code>
24990
<dt> <img src="images/st_darkglass.png" alt="images/st_darkglass"><p> <b>st_darkglass_hollow</b>: hollow = <code>true</code>, movable = <code>false</code>
24992
<dt> <img src="images/st_darkglass.png" alt="images/st_darkglass"><p> <b>st_darkglass_movable</b>: hollow = <code>false</code>, movable = <code>true</code>
25000
<a name="st_005fdeath"></a>
25001
<table cellpadding="1" cellspacing="1" border="0">
25002
<tr><td valign="middle" align="left">[<a href="#st_005fdarkglass" title="Previous section in reading order"> < </a>]</td>
25003
<td valign="middle" align="left">[<a href="#st_005fdisco" title="Next section in reading order"> > </a>]</td>
25004
<td valign="middle" align="left"> </td>
25005
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
25006
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
25007
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
25008
<td valign="middle" align="left"> </td>
25009
<td valign="middle" align="left"> </td>
25010
<td valign="middle" align="left"> </td>
25011
<td valign="middle" align="left"> </td>
25012
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
25013
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
25014
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
25015
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
25017
<a name="st_005fdeath-1"></a>
25018
<h3 class="subsection">9.5.16 st_death</h3>
25019
<a name="index-st_005fdeath"></a>
25021
<p>Shatters any <a href="#ac_005fmarble">ac_marble</a> and <a href="#ac_005fpearl">ac_pearl</a> that hits or even just touches
25022
it. Just marbles and pearls protected by an activated <a href="#it_005fumbrella">it_umbrella</a> will
25023
bounce unharmed as other actors do which will not die anyway.
25025
<p>Death stones can be configured by the ‘<samp>invisible</samp>’ attribute to
25026
be hidden while being idle. When hit by an actor any death stone becomes
25027
temporary visible. An actor with unbroken standard <a href="#it_005fglasses">it_glasses</a> in its
25028
inventory will be able to spot invisible death stones.
25030
<p>The level author can configure <a href="#it_005fglasses">it_glasses</a> by elimination of
25031
‘<samp>SPOT_DEATH</samp>’ not to show invisible death stones. With the global attribute
25032
<a href="#ExtralifeGlasses">ExtralifeGlasses</a> even glasses generated by laser lighting an
25033
<a href="#it_005fextralife">it_extralife</a> can be configured not to show invisible actorimpulse stones.
25035
<p>A death stone can also be movable. Of course ball like actors can not push it.
25036
But other actors can push it. A movable death stone can be connected by an
25037
<a href="#ot_005fwire">ot_wire</a> to another movable stone that allows to control it. Furtheron
25038
all stones emitting stone impulses like <a href="#st_005fstoneimpulse">st_stoneimpulse</a>, <a href="#st_005frotator">st_rotator</a>,
25039
<a href="#st_005flightpassenger">st_lightpassenger</a> can move it. And finally a pushing <a href="#st_005fboulder">st_boulder</a>
25040
will move it until an obstacle stops the death stone.
25042
<p>A movable death stone looks identical to the static default version. But from
25043
time to time it will show its animation and can thus be identified by the user.
25044
The interval of the animations is determined by the attribute ‘<samp>interval</samp>’,
25045
but will randomly vary up to 20% from the given value. When the ‘<samp>interval</samp>’
25046
equals zero no animation will reveal the movable death. But any <a href="#it_005fglasses">it_glasses</a>
25047
capable of ‘<samp>SPOT_DEATH</samp>’ will show the movable death in a lighter stone
25048
color than the static ones.
25050
<p>A ‘<samp>movable</samp>’ death can not be ‘<samp>invisible</samp>’ at the same time. If you set
25051
both attributes the last attribute set wins and resets the first one.
25053
<dl compact="compact">
25054
<dt> <b>Attributes:</b></dt>
25055
<dd><dl compact="compact">
25056
<dt> <b>state</b>, <i>values</i>: <code>ON</code>, <code>OFF</code>; <i>default</i>: <code>OFF</code>; <i>access</i>: <code>read only</code> See section <a href="#state">state</a></dt>
25057
<dd><p>Current activity state of the death stone. A stone is usually activated by
25060
<dt> <b>invisible</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
25061
<dd><p>Invisible death stones show only when hit by an actor or been toggled by a message.
25062
Setting this attribute to ‘<samp>true</samp>’ sets ‘<samp>movable</samp>’ to ‘<samp>false</samp>’.
25064
<dt> <b>movable</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; See section <a href="#movable">movable</a></dt>
25065
<dd><p>Movable death stone. Setting this attribute to ‘<samp>true</samp>’ sets ‘<samp>invisible</samp>’
25066
to ‘<samp>false</samp>’.
25068
<dt> <b>interval</b> <i>values</i>: positive number; <i>default</i>: <code>10.0</code></dt>
25069
<dd><p>Number of seconds to show animation on movable death.
25074
<dt> <b>Messages:</b></dt>
25075
<dd><dl compact="compact">
25076
<dt> <b>toggle</b> See section <a href="#toggle">toggle</a></dt>
25077
<dd><p>Temporarily activate the stone to show its animation and to get visible for this
25083
<dt> <b>Action:</b> none</dt>
25084
<dt> <b>Variants:</b></dt>
25085
<dd><dl compact="compact">
25086
<dt> <img src="images/st_death.png" alt="images/st_death"><p> <b>st_death</b>: invisible = <code>false</code>
25088
<dt> <img src="images/fl_white.png" alt="images/fl_white"><p> <b>st_death_invisible</b>: invisible = <code>true</code>
25090
<dt> <img src="images/st_death_light.png" alt="images/st_death_light"><p> <b>st_death_movable</b>: movable = <code>true</code>
25098
<a name="st_005fdisco"></a>
25099
<table cellpadding="1" cellspacing="1" border="0">
25100
<tr><td valign="middle" align="left">[<a href="#st_005fdeath" title="Previous section in reading order"> < </a>]</td>
25101
<td valign="middle" align="left">[<a href="#st_005fdispenser" title="Next section in reading order"> > </a>]</td>
25102
<td valign="middle" align="left"> </td>
25103
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
25104
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
25105
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
25106
<td valign="middle" align="left"> </td>
25107
<td valign="middle" align="left"> </td>
25108
<td valign="middle" align="left"> </td>
25109
<td valign="middle" align="left"> </td>
25110
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
25111
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
25112
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
25113
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
25115
<a name="st_005fdisco-1"></a>
25116
<h3 class="subsection">9.5.17 st_disco</h3>
25117
<a name="index-st_005fdisco"></a>
25119
<p>A free passable stone, which darkens everything that is underneath the stone.
25120
It looks like a tinted glass that occurs in several shades. It likely got its
25121
name from the possibility to switch between the shade grades.
25123
<p>The disco stone comes in three variants, ‘<samp>LIGHT</samp>’, ‘<samp>MEDIUM</samp>’ and
25124
‘<samp>DARK</samp>’. The dark variant is pure black, that shows neither actors, items or
25125
the floor. You can switch between these variants by messages and state attribute
25126
access. The messages <code>"lighten"</code> and <code>"darken"</code> change the shade
25127
by one degree. The message <code>"signal"</code> turns the disco light full on or off,
25128
independent of the previous state. The standard <code>"toggle"</code> switches from
25129
light -> medium -> dark -> light.
25131
<p>Note: unlike the old API versions of this stone, it does no longer support
25132
recursive shading of neighboring disco stones. Make use of object groups by
25133
<a href="#Object-Naming">Object Naming</a> to shade groups of arbitrary composition by a single message.
25135
<dl compact="compact">
25136
<dt> <b>Attributes:</b></dt>
25137
<dd><dl compact="compact">
25138
<dt> <b>state</b>, <i>values</i>: <code>LIGHT</code>, <code>MEDIUM</code>, <code>DARK</code>; <i>default</i>: <code>LIGHT</code> See section <a href="#state">state</a></dt>
25139
<dd><p>The shading grade.
25144
<dt> <b>Messages:</b></dt>
25145
<dd><dl compact="compact">
25146
<dt> <b>lighten</b></dt>
25147
<dd><p>Lighten by one degree.
25149
<dt> <b>darken</b></dt>
25150
<dd><p>Darken by one degree.
25152
<dt> <b>signal</b> See section <a href="#signal">signal</a></dt>
25153
<dd><p>Switch to ‘<samp>LIGHT</samp>’ on a value of <code>1</code>. Switch to ‘<samp>DARK</samp>’ on a value
25156
<dt> <b>toggle</b> See section <a href="#toggle">toggle</a></dt>
25157
<dd><p>Darken by degree or switch from ‘<samp>DARK</samp>’ to ‘<samp>LIGHT</samp>’
25162
<dt> <b>Action:</b> none</dt>
25163
<dt> <b>Variants:</b></dt>
25164
<dd><dl compact="compact">
25165
<dt> <img src="images/st_disco.png" alt="images/st_disco"><p> <b>st_disco</b>: state = <code>LIGHT</code>
25167
<dt> <img src="images/st_disco.png" alt="images/st_disco"><p> <b>st_disco_light</b>: state = <code>LIGHT</code>
25169
<dt> <img src="images/st_disco_2.png" alt="images/st_disco_2"><p> <b>st_disco_medium</b>: state = <code>MEDIUM</code>
25171
<dt> <img src="images/st_disco_3.png" alt="images/st_disco_3"><p> <b>st_disco_dark</b>: state = <code>DARK</code>
25179
<a name="st_005fdispenser"></a>
25180
<table cellpadding="1" cellspacing="1" border="0">
25181
<tr><td valign="middle" align="left">[<a href="#st_005fdisco" title="Previous section in reading order"> < </a>]</td>
25182
<td valign="middle" align="left">[<a href="#st_005fdoor" title="Next section in reading order"> > </a>]</td>
25183
<td valign="middle" align="left"> </td>
25184
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
25185
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
25186
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
25187
<td valign="middle" align="left"> </td>
25188
<td valign="middle" align="left"> </td>
25189
<td valign="middle" align="left"> </td>
25190
<td valign="middle" align="left"> </td>
25191
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
25192
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
25193
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
25194
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
25196
<a name="st_005fdispenser-1"></a>
25197
<h3 class="subsection">9.5.18 st_dispenser</h3>
25198
<a name="index-st_005fdispenser"></a>
25200
<p>An item dispenser in some item flavors.
25202
<p>On every actor hit the dispenser adds a new item given by the attribute
25203
‘<samp>flavor</samp>’, namely <a href="#it_005fbomb">it_bomb</a> in color black or white, <a href="#it_005fdynamite">it_dynamite</a>
25204
or <a href="#it_005fextralife">it_extralife</a> to the inventory of the actor’s owner. Of course an item
25205
will just be added if the inventory is capable of adding a further item.
25206
Additionally the dispenser’s ‘<samp>stock</samp>’ must supply a further item. The
25207
default stock of 1000 items should be enough for usual demands. But you can
25208
limit the supply to just a few counted items. This ‘<samp>stock</samp>’ attribute gets
25209
decremented every time an actor takes an item.
25211
<p>The dispenser stone does break on adjacent <a href="#it_005fbomb">it_bomb</a> explosions and
25212
adjacent dispenser stone breaks. On its break it will itself cause adjacent
25213
<a href="#it_005fdynamite">it_dynamite</a> to ignite, <a href="#it_005fbomb">it_bomb</a> positioned beneath itself to
25214
explode, and of course neighboring dispensers to break. Dispenser stones will
25215
neither break on actor hits, even with a revealed hammer, nor on laser light
25218
<dl compact="compact">
25219
<dt> <b>Attributes:</b></dt>
25221
<dl compact="compact">
25222
<dt> <b>flavor</b> <i>values</i>: <code>"bombblack"</code>, <code>"bombwhite"</code>, <code>"dynamite"</code>, <code>"extralife"</code>; <i>default</i>: <code>"bombblack"</code>;</dt>
25223
<dt> <b>stock</b>, <i>values</i>: integer numbers; <i>default</i>: <code>1000</code>: See section <a href="#state">state</a></dt>
25227
<dt> <b>Messages:</b> none</dt>
25228
<dt> <b>Action:</b> none</dt>
25229
<dt> <b>Variants:</b></dt>
25231
<dl compact="compact">
25232
<dt> <img src="images/st_dispenser_bombblack.png" alt="images/st_dispenser_bombblack"><p> <b>st_dispenser</b>: flavor=<code>"bombblack"</code>
25234
<dt> <img src="images/st_dispenser_bombblack.png" alt="images/st_dispenser_bombblack"><p> <b>st_dispenser_bombblack</b>: flavor=<code>"bombblack"</code>
25236
<dt> <img src="images/st_dispenser_bombwhite.png" alt="images/st_dispenser_bombwhite"><p> <b>st_dispenser_bombwhite</b>: flavor=<code>"bombwhite"</code>
25238
<dt> <img src="images/st_dispenser_dynamite.png" alt="images/st_dispenser_dynamite"><p> <b>st_dispenser_dynamite</b>: flavor=<code>"dynamite"</code>
25240
<dt> <img src="images/st_dispenser_extralife.png" alt="images/st_dispenser_extralife"><p> <b>st_dispenser_extralife</b>: flavor=<code>"extralife"</code>
25248
<a name="st_005fdoor"></a>
25249
<table cellpadding="1" cellspacing="1" border="0">
25250
<tr><td valign="middle" align="left">[<a href="#st_005fdispenser" title="Previous section in reading order"> < </a>]</td>
25251
<td valign="middle" align="left">[<a href="#st_005ffake" title="Next section in reading order"> > </a>]</td>
25252
<td valign="middle" align="left"> </td>
25253
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
25254
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
25255
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
25256
<td valign="middle" align="left"> </td>
25257
<td valign="middle" align="left"> </td>
25258
<td valign="middle" align="left"> </td>
25259
<td valign="middle" align="left"> </td>
25260
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
25261
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
25262
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
25263
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
25265
<a name="st_005fdoor-1"></a>
25266
<h3 class="subsection">9.5.19 st_door</h3>
25267
<a name="index-st_005fdoor"></a>
25269
<p>Doors are stones that let actors pass or block them to enter the grid, depending
25270
on their state. Doors can be opened and closed by the standard set of messages.
25271
Doors do not open or close instantly. They need a small amount of time. Actors
25272
can pass only doors that are completely open.
25274
<p>There are several flavors of doors. The variants <code>"a"</code> to <code>"c"</code>
25275
represent grid filling block doors. Flavor <code>"a"</code> looks in the closed state
25276
like <a href="#st_005foxyd">st_oxyd</a> of flavor <code>"a"</code> and in the opened state like an
25277
<a href="#st_005fgrate">st_grate</a> of flavor <code>"cross"</code>. Flavor <code>"b"</code> looks in the closed
25278
state like <a href="#st_005fflat">st_flat</a> but opens to an invisible, free passable, but still
25279
existing and grid blocking stone. Flavor <code>"c"</code> looks in the closed state
25280
like <a href="#st_005fflat">st_flat</a> and in the opened state like an <a href="#st_005fgrate">st_grate</a> of flavor
25281
<code>"framed"</code>. The flavor <code>"d"</code> represents a faces based door, that
25282
opens or blocks just the given faces of the grid. Currently just the
25283
combinations of two parallel aligned door faces, aka horizontal and vertical
25284
doors, are supported.
25286
<p>As door grids can be entered on unfaced sides you should block these faces by
25287
impassable stones. If you do not block these entries or even allow marbles to
25288
warp into a door, the actors will be free to leave the doors even if they are
25289
closed. But marbles will shatter on the door grid when doors are closed. This
25290
behaviour is a legacy Enigma feature.
25292
<p>Doors are stones that are even present if they are not visible in the <code>OPEN</code>
25293
state. This means you can not push or move any other stone through an open door.
25294
The <a href="#st_005fblocker">st_blocker</a> is a quite compatible door alternative that allows stones
25295
to pass in its open state.
25297
<p>All doors are hovering and will not press <a href="#it_005ftrigger">it_trigger</a>s. Thus you can detect
25298
passing actors by positioning a trigger beneath a door. Doors will neither press
25299
<a href="#fl_005fbridge">fl_bridge</a> and will thus take no influence on the bridge.
25301
<p>Laser light will pass any open door, but will be blocked by closed faces. Closed
25302
doors of type <code>"d"</code> let light pass if the faces are parallel aligned to
25303
the light without intervening the light.
25305
<p>Just doors of type <code>"d"</code> allow an actor to knock on its closed faces.
25306
This causes an action that might open the door or do anything else. A common
25307
target is <a href="#st_005fjamb">st_jamb</a> that evaluated the color of the knocking actor.
25309
<p>Doors do support <a href="#Flood-Spreading">Flood Spreading</a> and <a href="#Fire-Spreading">Fire Spreading</a> through open
25310
faces and generally in ‘<samp>OPEN</samp>’ state.
25312
<dl compact="compact">
25313
<dt> <b>Attributes:</b></dt>
25314
<dd><dl compact="compact">
25315
<dt> <b>state</b>, <i>values</i>: <code>OPEN</code>, <code>CLOSED</code>; <i>default</i>: <code>CLOSED</code>; See section <a href="#state">state</a></dt>
25316
<dd><p>The open state of the door. On read access it reports if the door is completely
25317
opened and passable for actors. Note that a door reaches the state ‘<samp>OPEN</samp>’
25318
after the finish of the opening animation, what is an essential amount of time
25319
after the initiating <code>"open"</code> message. But on a <code>"close"</code> message the
25320
state turns immediately to ‘<samp>CLOSED</samp>’ as actors are blocked immediately. On
25321
write access a state change causes a proper message and may occur with a delay,
25325
<dt> <b>flavor</b> <i>values</i>: <code>"a"</code>, <code>"b"</code>, <code>"c"</code>, <code>"d"</code>; <i>default</i>: <code>"d"</code></dt>
25326
<dd><p>Representing different door types as described above. Block based flavors
25327
<code>"a"</code>, <code>"b"</code>, <code>"c"</code> and the face based flavor <code>"d"</code>.
25330
<dt> <b>faces</b> <i>values</i>: string; <i>default</i>: <code>"nesw"</code></dt>
25331
<dd><p>Describes the door faces of the stone. The string is a substring of
25332
<code>"nesw"</code> listing the faces. The sequence of the sides, north, east, south,
25333
west, is guaranteed on read access but arbitrary on write access. Note that
25334
the supported face combinations depend on the flavor. All but flavor <code>"d"</code>
25335
do always provide all 4 faces. Flavor <code>"d"</code> currently supports the face
25336
combinations <code>"ns"</code> and <code>"ew"</code>, in other words horizontal and
25337
vertical aligned door faces, with the first combination being the default.
25343
<dt> <b>Messages:</b></dt>
25344
<dd><dl compact="compact">
25345
<dt> <b>open</b> See section <a href="#open">open</a></dt>
25346
<dd><p>Opens a closed door or reverses the process of a closing door.
25348
<dt> <b>close</b> See section <a href="#close">close</a></dt>
25349
<dd><p>Closes an open door or reverses the process of an opening door.
25351
<dt> <b>signal</b> See section <a href="#signal">signal</a></dt>
25352
<dd><p>Opens at value ‘<samp>1</samp>’, and closes at value ‘<samp>0</samp>’.
25357
<dt> <b>Action:</b></dt>
25358
<dd><p>Just flavor <code>"d"</code> doors will perform an action on an actor touching a face
25359
of a closed door. The action value will be the actor object, which can be
25360
evaluated on its kind. This action value fits the ‘<samp>hit</samp>’ messages of
25361
objects like <a href="#st_005fjamb">st_jamb</a>.
25364
<dt> <b>Variants:</b></dt>
25366
<tr><td width="8%"><img src="images/st_oxyda.png" alt="images/st_oxyda"></td><td width="42%"><b>st_door_a</b>: flavor = <code>"a"</code>, state = <code>CLOSED</code></td><td width="8%"><img src="images/st_grate_cross.png" alt="images/st_grate_cross"></td><td width="42%"><b>st_door_a</b>: flavor = <code>"a"</code>, state = <code>OPEN</code></td></tr>
25367
<tr><td width="8%"><img src="images/st_flat.png" alt="images/st_flat"></td><td width="42%"><b>st_door_b</b>: flavor = <code>"b"</code>, state = <code>CLOSED</code></td><td width="8%"><img src="images/fl_white.png" alt="images/fl_white"></td><td width="42%"><b>st_door_b</b>: flavor = <code>"b"</code>, state = <code>OPEN</code></td></tr>
25368
<tr><td width="8%"><img src="images/st_flat.png" alt="images/st_flat"></td><td width="42%"><b>st_door_c</b>: flavor = <code>"c"</code>, state = <code>CLOSED</code></td><td width="8%"><img src="images/st_grate_framed.png" alt="images/st_grate_framed"></td><td width="42%"><b>st_door_c</b>: flavor = <code>"c"</code>, state = <code>OPEN</code></td></tr>
25369
<tr><td width="8%"><img src="images/st_door_d_ns_7.png" alt="images/st_door_d_ns_7"></td><td width="42%"><b>st_door_d</b>: flavor = <code>"d"</code>, faces = <code>"ns"</code>, state = <code>CLOSED</code></td><td width="8%"><img src="images/st_door_d_ns.png" alt="images/st_door_d_ns"></td><td width="42%"><b>st_door_d</b>: flavor = <code>"d"</code>, faces = <code>"ns"</code>, state = <code>OPEN</code></td></tr>
25370
<tr><td width="8%"><img src="images/st_door_d_ew_g.png" alt="images/st_door_d_ew_g"></td><td width="42%"><b>st_door_d</b>: flavor = <code>"d"</code>, faces = <code>"ew"</code>, state = <code>CLOSED</code></td><td width="8%"><img src="images/st_door_d_ew.png" alt="images/st_door_d_ew"></td><td width="42%"><b>st_door_d</b>: flavor = <code>"d"</code>, faces = <code>"ew"</code>, state = <code>OPEN</code></td></tr>
25377
<a name="st_005ffake"></a>
25378
<table cellpadding="1" cellspacing="1" border="0">
25379
<tr><td valign="middle" align="left">[<a href="#st_005fdoor" title="Previous section in reading order"> < </a>]</td>
25380
<td valign="middle" align="left">[<a href="#st_005fflash" title="Next section in reading order"> > </a>]</td>
25381
<td valign="middle" align="left"> </td>
25382
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
25383
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
25384
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
25385
<td valign="middle" align="left"> </td>
25386
<td valign="middle" align="left"> </td>
25387
<td valign="middle" align="left"> </td>
25388
<td valign="middle" align="left"> </td>
25389
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
25390
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
25391
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
25392
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
25394
<a name="st_005ffake-1"></a>
25395
<h3 class="subsection">9.5.20 st_fake</h3>
25396
<a name="index-st_005ffake"></a>
25398
<p>A stone that mimics other stones, but does not act like them.
25400
<p>In contrast to <a href="#st_005fmagic">st_magic</a> the fake stone does not transform but remains
25401
all time a passive variant of the stone that it models. The stone does look
25402
like another stone of the kind given by the attribute ‘<samp>flavor</samp>’. The fake
25403
stone may even mimic state dependent behaviour with state dependent models
25406
<p>The flavor <code>"quake"</code> mimics a <a href="#st_005fquake">st_quake</a> including the pulsing
25407
animation on actor hits and state changes, but does not cause any <a href="#st_005foxyd">st_oxyd</a>
25410
<p>The flavors <code>"oxyda"</code>, <code>"oxydb"</code>, <code>"oxydc"</code>, <code>"oxydd"</code>,
25411
<code>"oxyde"</code> mimic <a href="#st_005foxyd">st_oxyd</a> of appropriate flavor, but they are just
25412
passive stones. Nevertheless they are aware of a state ‘<samp>OPEN</samp>’ and will
25413
display the corresponding base image of the open oxyd stone, of course without
25416
<dl compact="compact">
25417
<dt> <b>Attributes:</b></dt>
25419
<dl compact="compact">
25420
<dt> <b>flavor</b> <i>values</i>: <code>"quake"</code>, <code>"oxyda"</code>, <code>"oxydb"</code>, <code>"oxydc"</code>, <code>"oxydd"</code>, <code>"oxyde"</code>; <i>default</i>: <code>"quake"</code>;</dt>
25421
<dt> <b>state</b>, <i>values</i>: <code>CLOSED</code>, <code>OPEN</code>; <i>default</i>: <code>CLOSED</code>: See section <a href="#state">state</a></dt>
25425
<dt> <b>Messages:</b> none</dt>
25426
<dt> <b>Action:</b> none</dt>
25427
<dt> <b>Variants:</b></dt>
25429
<tr><td width="8%"><img src="images/st_oxydb.png" alt="images/st_oxydb"> <b>st_fake_quake</b>: flavor=<code>"quake"</code>, state=<code>IDLE</code></td><td width="42%"><img src="images/st_quake_3.png" alt="images/st_quake_3"> <b>st_fake_quake</b>: flavor=<code>"quake"</code>, state=<code>ACTIVE</code></td></tr>
25430
<tr><td width="8%"><img src="images/st_oxyda.png" alt="images/st_oxyda"> <b>st_fake_oxyda</b>: flavor=<code>"oxyda"</code>, state=<code>CLOSED</code></td><td width="42%"><img src="images/st_oxyda_open.png" alt="images/st_oxyda_open"> <b>st_fake_oxyda</b>: flavor=<code>"oxyda"</code>, state=<code>OPEN</code></td></tr>
25431
<tr><td width="8%"><img src="images/st_oxydb.png" alt="images/st_oxydb"> <b>st_fake_oxydb</b>: flavor=<code>"oxydb"</code>, state=<code>CLOSED</code></td><td width="42%"><img src="images/st_oxydb_open.png" alt="images/st_oxydb_open"> <b>st_fake_oxydb</b>: flavor=<code>"oxydb"</code>, state=<code>OPEN</code></td></tr>
25432
<tr><td width="8%"><img src="images/st_oxydc.png" alt="images/st_oxydc"> <b>st_fake_oxydc</b>: flavor=<code>"oxydc"</code>, state=<code>CLOSED</code></td><td width="42%"><img src="images/st_oxydc_open.png" alt="images/st_oxydc_open"> <b>st_fake_oxydc</b>: flavor=<code>"oxydc"</code>, state=<code>OPEN</code></td></tr>
25433
<tr><td width="8%"><img src="images/st_oxydd.png" alt="images/st_oxydd"> <b>st_fake_oxydd</b>: flavor=<code>"oxydd"</code>, state=<code>CLOSED</code></td><td width="42%"><img src="images/st_oxydb_open.png" alt="images/st_oxydb_open"> <b>st_fake_oxydd</b>: flavor=<code>"oxydd"</code>, state=<code>OPEN</code></td></tr>
25434
<tr><td width="8%"><img src="images/st_oxydb.png" alt="images/st_oxydb"> <b>st_fake_oxyde</b>: flavor=<code>"oxyde"</code>, state=<code>CLOSED</code></td><td width="42%"><img src="images/st_oxydb_open.png" alt="images/st_oxydb_open"> <b>st_fake_oxyde</b>: flavor=<code>"oxyde"</code>, state=<code>OPEN</code></td></tr>
25441
<a name="st_005fflash"></a>
25442
<table cellpadding="1" cellspacing="1" border="0">
25443
<tr><td valign="middle" align="left">[<a href="#st_005ffake" title="Previous section in reading order"> < </a>]</td>
25444
<td valign="middle" align="left">[<a href="#st_005fflat" title="Next section in reading order"> > </a>]</td>
25445
<td valign="middle" align="left"> </td>
25446
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
25447
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
25448
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
25449
<td valign="middle" align="left"> </td>
25450
<td valign="middle" align="left"> </td>
25451
<td valign="middle" align="left"> </td>
25452
<td valign="middle" align="left"> </td>
25453
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
25454
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
25455
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
25456
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
25458
<a name="st_005fflash-1"></a>
25459
<h3 class="subsection">9.5.21 st_flash</h3>
25460
<a name="index-st_005fflash"></a>
25462
<p>A stone symbolized by a yellow flash, that forwards actors hits as a force to
25463
matching partner actors.
25465
<p>Just <a href="#ac_005fmarble">ac_marble</a> actors are affected. A black hitting marble will push
25466
the first white marble, and vice versa. The hitting marble’s velocity is
25467
multiplied to a distortion matrix given by four single attributes. The default
25468
matrix does maintain the direction. The resulting vector is again multiplied
25469
by a linear strength factor. The resulting force vector is applied to the
25470
partner marble. If no matching marble exists no forces are applied. The hitting
25471
marble bounces on the flash stone as on any other standard stone.
25473
<dl compact="compact">
25474
<dt> <b>Attributes:</b></dt>
25476
<dl compact="compact">
25477
<dt> <b>hit_strength</b> <i>values</i>: floating point numbers; <i>default</i>: <code>20.0</code>; See section <a href="#hit_005f_002a">hit_*</a></dt>
25478
<dt> <b>hit_distortion_xx</b> <i>values</i>: floating point numbers; <i>default</i>: <code>1.0</code>; See section <a href="#hit_005f_002a">hit_*</a></dt>
25479
<dt> <b>hit_distortion_xy</b> <i>values</i>: floating point numbers; <i>default</i>: <code>0.0</code>; See section <a href="#hit_005f_002a">hit_*</a></dt>
25480
<dt> <b>hit_distortion_yx</b> <i>values</i>: floating point numbers; <i>default</i>: <code>0.0</code>; See section <a href="#hit_005f_002a">hit_*</a></dt>
25481
<dt> <b>hit_distortion_yy</b> <i>values</i>: floating point numbers; <i>default</i>: <code>1.0</code>; See section <a href="#hit_005f_002a">hit_*</a></dt>
25485
<dt> <b>Messages:</b> none</dt>
25486
<dt> <b>Action:</b> none</dt>
25487
<dt> <b>Variants:</b></dt>
25488
<dd><dl compact="compact">
25489
<dt> <img src="images/st_flash.png" alt="images/st_flash"><p> <b>st_flash</b>:
25496
<a name="st_005fflat"></a>
25497
<table cellpadding="1" cellspacing="1" border="0">
25498
<tr><td valign="middle" align="left">[<a href="#st_005fflash" title="Previous section in reading order"> < </a>]</td>
25499
<td valign="middle" align="left">[<a href="#st_005ffloppy" title="Next section in reading order"> > </a>]</td>
25500
<td valign="middle" align="left"> </td>
25501
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
25502
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
25503
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
25504
<td valign="middle" align="left"> </td>
25505
<td valign="middle" align="left"> </td>
25506
<td valign="middle" align="left"> </td>
25507
<td valign="middle" align="left"> </td>
25508
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
25509
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
25510
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
25511
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
25513
<a name="st_005fflat-1"></a>
25514
<h3 class="subsection">9.5.22 st_flat</h3>
25515
<a name="index-st_005fflat"></a>
25517
<p>A flat gypsum stone with many variants and features.
25519
<p>Besides the standard features of a movable, hollow or breakable stone the flat
25520
stone provides some very special features and variant transformations.
25522
<p>Movable and breakable flat stones will fall into <a href="#fl_005fabyss">fl_abyss</a>. But just the
25523
movable variant will fall into <a href="#fl_005fwater">fl_water</a> and <a href="#fl_005fswamp">fl_swamp</a>.
25525
<p>A laser beam will shatter a breakable variant. Further on it transforms a plain flat
25526
stone, and just this variant, into a cracked variant, which is visually
25527
distinguishable by small cracks. But further laser light will not break a
25528
cracked variant. Ignitions and explosions will shatter breakable, cracked and
25529
movable variants. An actor with a revealed <a href="#it_005fhammer">it_hammer</a> is able to shatter
25530
both the breakable and the cracked variant. Note that the visually
25531
indistinguishable <a href="#st_005fbreak">st_break</a>_laser breaks on a laser hit, too, but without
25532
being breakable by actors.
25534
<p>An actor with a revealed <a href="#it_005fpencil">it_pencil</a> will mark a plain or movable variant
25535
as burnable what is hinted for the player by a fire symbol on the flat stone
25536
surface. A burnable flat stone burns on fire, but just the immovable, burnable
25537
variant reacts on heating by self destruction. All burnable variants can be
25538
cleaned by an actor hit with an <a href="#it_005fbrush">it_brush</a>. The fire symbol vanishes and
25539
the stone does not longer react on fire and heating.
25541
<p>Last but not least an <a href="#st_005fboulder">st_boulder</a> hitting a plain or hollow variant of the
25542
flat stone toggles the ‘<samp>hollow</samp>’ attribute twice within a short period. The
25543
time is sufficient for a fast actor to pass an otherwise solid plain flat stone.
25544
By proper fast redirection of the boulder a user can enforce permanent changes
25545
of the hollow state.
25547
<dl compact="compact">
25548
<dt> <b>Attributes:</b></dt>
25550
<dl compact="compact">
25551
<dt> <b>hollow</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: read only See section <a href="#hollow">hollow</a></dt>
25552
<dt> <b>movable</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: read only See section <a href="#movable">movable</a></dt>
25553
<dt> <b>breakable</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: read only See section <a href="#breakable">breakable</a></dt>
25554
<dt> <b>burnable</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: read only See section <a href="#burnable">burnable</a></dt>
25558
<dt> <b>Messages:</b> none</dt>
25559
<dt> <b>Action:</b> none</dt>
25560
<dt> <b>Variants:</b></dt>
25561
<dd><dl compact="compact">
25562
<dt> <img src="images/st_flat.png" alt="images/st_flat"><p> <b>st_flat</b>:
25564
<dt> <img src="images/st_flat.png" alt="images/st_flat"><p> <b>st_flat_hollow</b>: hollow=<code>true</code>
25566
<dt> <img src="images/st_flat.png" alt="images/st_flat"><p> <b>st_flat_movable</b>: movable=<code>"true"</code>
25568
<dt> <img src="images/st_flat.png" alt="images/st_flat"><p> <b>st_flat_breakable</b>: breakable=<code>"true"</code>
25570
<dt> <img src="images/st_flat_cracked.png" alt="images/st_flat_cracked"><p> <b>st_flat_cracked</b>:
25572
<dt> <img src="images/st_flat_fire.png" alt="images/st_flat_fire"><p> <b>st_flat_burnable</b>: burnable=<code>"true"</code>
25574
<dt> <img src="images/st_flat_fire.png" alt="images/st_flat_fire"><p> <b>st_flat_moveburnable</b>: movable=<code>"true"</code>, burnable=<code>"true"</code>
25576
<dt> <img src="images/st_flat_break.png" alt="images/st_flat_break"><p> <b>st_flat_breaking</b>: breakable=<code>"true"</code>
25583
<a name="st_005ffloppy"></a>
25584
<table cellpadding="1" cellspacing="1" border="0">
25585
<tr><td valign="middle" align="left">[<a href="#st_005fflat" title="Previous section in reading order"> < </a>]</td>
25586
<td valign="middle" align="left">[<a href="#st_005ffourswitch" title="Next section in reading order"> > </a>]</td>
25587
<td valign="middle" align="left"> </td>
25588
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
25589
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
25590
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
25591
<td valign="middle" align="left"> </td>
25592
<td valign="middle" align="left"> </td>
25593
<td valign="middle" align="left"> </td>
25594
<td valign="middle" align="left"> </td>
25595
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
25596
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
25597
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
25598
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
25600
<a name="st_005ffloppy-1"></a>
25601
<h3 class="subsection">9.5.23 st_floppy</h3>
25602
<a name="index-st_005ffloppy"></a>
25604
<p>A switch that is activated by insertion of an <a href="#it_005ffloppy">it_floppy</a>. Just actors
25605
assigned to a player can insert a floppy out of their item inventory by hitting
25606
the floppy switch with a floppy being the first item.
25608
<p>On a second hit the switch is deactivated and the inserted floppy is returned
25609
to the players inventory.
25611
<p>Floppy stones are often used as openers for an adjacent <a href="#st_005fdoor">st_door</a> that is
25612
declared as its ‘<samp>target</samp>’. But there is the inherent danger that an actor
25613
passing the door accidentially hits the neighboring floppy stone, causing the floppy
25614
to be pulled out again and the door to be closed immediately. Of couse this
25615
would shatter any <a href="#ac_005fmarble">ac_marble</a> or <a href="#ac_005fpearl">ac_pearl</a>. But a ‘<samp>secure</samp>’ floppy
25616
stone checks that the hitting actor is not positioned on one of the floppy stones
25617
target positions. It refuses any actions caused by such critical hits. Note
25618
that in case the target is a callback function that closes the adjacent door,
25619
there will be still no protection. A floppy stone with ‘<samp>secure</samp>’ value
25620
‘<samp>false</samp>’ would accept any hits and shatter marbles as it has been standard
25621
on older Enigma releases and is still in modes besides Enigma.
25623
<dl compact="compact">
25624
<dt> <b>Attributes:</b></dt>
25626
<dl compact="compact">
25627
<dt> <b>state</b>, <i>values</i>: <code>ON</code>, <code>OFF</code>; <i>default</i>: <code>OFF</code>; See section <a href="#state">state</a></dt>
25628
<dd><p>Current activity state of the floppy stone.
25630
<dt> <b>secure</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code></dt>
25631
<dd><p>Protect actors on target positions by neglecting their hits.
25636
<dt> <b>Messages:</b></dt>
25638
<dl compact="compact">
25639
<dt> <b>signal</b> See section <a href="#signal">signal</a></dt>
25640
<dd><p>Switches on at value ‘<samp>1</samp>’, and off at value ‘<samp>0</samp>’.
25642
<dt> <b>on</b> See section <a href="#on">on</a></dt>
25643
<dt> <b>off</b> See section <a href="#off">off</a></dt>
25647
<dt> <b>Action:</b> See section <a href="#target">target</a>, See section <a href="#action">action</a></dt>
25648
<dt> <b>Variants:</b></dt>
25649
<dd><dl compact="compact">
25650
<dt> <img src="images/st_floppy_off.png" alt="images/st_floppy_off"><p> <b>st_floppy</b> with state=<code>OFF</code>
25652
<dt> <img src="images/st_floppy_on.png" alt="images/st_floppy_on"><p> <b>st_floppy</b> with state=<code>ON</code>
25659
<a name="st_005ffourswitch"></a>
25660
<table cellpadding="1" cellspacing="1" border="0">
25661
<tr><td valign="middle" align="left">[<a href="#st_005ffloppy" title="Previous section in reading order"> < </a>]</td>
25662
<td valign="middle" align="left">[<a href="#st_005fghost" title="Next section in reading order"> > </a>]</td>
25663
<td valign="middle" align="left"> </td>
25664
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
25665
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
25666
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
25667
<td valign="middle" align="left"> </td>
25668
<td valign="middle" align="left"> </td>
25669
<td valign="middle" align="left"> </td>
25670
<td valign="middle" align="left"> </td>
25671
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
25672
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
25673
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
25674
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
25676
<a name="st_005ffourswitch-1"></a>
25677
<h3 class="subsection">9.5.24 st_fourswitch</h3>
25678
<a name="index-st_005ffourswitch"></a>
25680
<p>A switch that points into one of the four orientations and turning on every
25681
switching event. The most common event is an actor hitting this stone. But
25682
<a href="#st_005fboulder">st_boulder</a> will trigger this switch, too. Of course other objects can send
25683
messages on actions to make this switch turning.
25685
<p>When turning its pointer on a switching event it performs the action given by
25686
the ‘<samp>action/target</samp>’-pair. This can be either a common pair or a
25687
state/orientation dependent pair allowing you to issue different messages
25688
dependent on the pointing orientation.
25690
<dl compact="compact">
25691
<dt> <b>Attributes:</b></dt>
25693
<dl compact="compact">
25694
<dd><a name="index-state"></a>
25696
<dt> <b>state</b>, <i>values</i>: <code>NORTH</code>, <code>EAST</code>, <code>SOUTH</code>, <code>WEST</code>; <i>default</i>: <code>NORTH</code> See section <a href="#state">state</a></dt>
25697
<dt> <b>counterclock</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
25698
<dd><p>The standard turning direction is clockwise. Use this attribute to revert the
25701
<dt> <b>inverse</b> See section <a href="#inverse">inverse</a></dt>
25702
<dd><p>Note that the action value is inverted in its boolean interpretation. This means
25703
that an inverted action value is <em>not</em> the reverse orientation and should
25704
not be used as an orientation value at all.
25709
<dt> <b>Messages:</b></dt>
25711
<dl compact="compact">
25712
<dt> <b>signal</b> See section <a href="#signal">signal</a></dt>
25713
<dd><p>Note that the fourswitch reacts just on value <code>1</code>. Values of <code>0</code> are
25714
simply ignored. Use message toggle if you need turns on any message value.
25716
<dt> <b>toggle</b> See section <a href="#toggle">toggle</a></dt>
25717
<dd><p>Note that a toggle turns the fourswitch independent of a message value.
25722
<dt> <b>Action:</b> See section <a href="#target">target</a>, See section <a href="#action">action</a></dt>
25723
<dd><p>Performs an action on each turn. If just a pair of global ‘<samp>target/action</samp>’
25724
attributes are given, the action message is sent to the target with a value of
25725
the new orientation. This value suits any message of the target that expects
25726
an orientation value, and the <a href="#signal">signal</a> message, that translates the
25727
orientation value to a 1 for ‘<samp>NORTH</samp>’, ‘<samp>SOUTH</samp>’ and a 0 for
25728
‘<samp>EAST</samp>’, ‘<samp>WEST</samp>’.
25730
<p>If state dependent target/action pairs are given instead, namely
25731
‘<samp>target_0/action_0</samp>’ for the state ‘<samp>WEST</samp>’,... , ‘<samp>target_3/action_3</samp>’
25732
for the state ‘<samp>NORTH</samp>’, two actions will be performed: first for the state
25733
representing the old orientation the given action messages will be sent with
25734
a value of 0, then for the state representing the new orientation the given
25735
action messages will be sent with a value of 1. This allows you to switch on
25736
and off alternative sources by a fourswitch.
25739
<dt> <b>Variants:</b></dt>
25740
<dd><dl compact="compact">
25741
<dt> <img src="images/st_fourswitch.png" alt="images/st_fourswitch"><p> <b>st_fourswitch</b>
25748
<a name="st_005fghost"></a>
25749
<table cellpadding="1" cellspacing="1" border="0">
25750
<tr><td valign="middle" align="left">[<a href="#st_005ffourswitch" title="Previous section in reading order"> < </a>]</td>
25751
<td valign="middle" align="left">[<a href="#st_005fgrate" title="Next section in reading order"> > </a>]</td>
25752
<td valign="middle" align="left"> </td>
25753
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
25754
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
25755
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
25756
<td valign="middle" align="left"> </td>
25757
<td valign="middle" align="left"> </td>
25758
<td valign="middle" align="left"> </td>
25759
<td valign="middle" align="left"> </td>
25760
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
25761
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
25762
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
25763
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
25765
<a name="st_005fghost-1"></a>
25766
<h3 class="subsection">9.5.25 st_ghost</h3>
25767
<a name="index-st_005fghost"></a>
25769
<p>An invisible stone that transforms into a visible stone on actor hits with
25770
properly revealed tools.
25772
<p>Similar to <a href="#st_005fmagic">st_magic</a> this stone does transform to another kind, but it
25773
is initially always invisible, what gave it its name. Invisibility is not
25774
equal to laser transparency. In fact one flavor of this ghost stone is not
25775
laser transparent. And invisibility does not mean that an invisible actor can
25776
pass a ghost stone. (see section <a href="#Transparent-Stones">Transparent Stones</a>)
25778
<p>The ghost stone transforms to another stone of the kind given by its
25779
attribute ‘<samp>flavor</samp>’. The tool necessary to cause this transformation depends
25782
<p>The flavor <code>"purplemarble"</code> transforms to an <a href="#st_005fpurplemarble">st_purplemarble</a> on a hit
25783
with a revealed <a href="#it_005fbrush">it_brush</a>. This flavor is not laser transparent.
25785
<p>The flavor <code>"greenbrown"</code> transforms to an <a href="#st_005fgreenbrown">st_greenbrown</a> on a hit
25786
with a revealed <a href="#it_005fmagicwand">it_magicwand</a>.
25788
<p>The flavor <code>"break"</code> transforms to an <a href="#st_005fbreak">st_break</a> of variant
25789
‘<samp>st_break_oxydc</samp>’ on a hit with a revealed <a href="#it_005fbrush">it_brush</a>.
25792
<dl compact="compact">
25793
<dt> <b>Attributes:</b></dt>
25795
<dl compact="compact">
25796
<dt> <b>flavor</b> <i>values</i>: <code>"purplemarble"</code>, <code>"greenbrown"</code>, <code>"break"</code>; <i>default</i>: <code>"purplemarble"</code>; <i>access</i>: read only</dt>
25800
<dt> <b>Messages:</b> none</dt>
25801
<dt> <b>Action:</b> none</dt>
25802
<dt> <b>Variants:</b></dt>
25804
<tr><td width="8%"><img src="images/fl_white.png" alt="images/fl_white"></td><td width="52%"><b>st_ghost</b>: flavor=<code>"purplemarble"</code></td><td width="40%"><img src="images/st_purplemarble.png" alt="images/st_purplemarble"></td></tr>
25805
<tr><td width="8%"><img src="images/fl_white.png" alt="images/fl_white"></td><td width="52%"><b>st_ghost_purplemarble</b>: flavor=<code>"purplemarble"</code></td><td width="40%"><img src="images/st_purplemarble.png" alt="images/st_purplemarble"></td></tr>
25806
<tr><td width="8%"><img src="images/fl_white.png" alt="images/fl_white"></td><td width="52%"><b>st_ghost_greenbrown</b>: flavor=<code>"greenbrown"</code></td><td width="40%"><img src="images/st_greenbrown.png" alt="images/st_greenbrown"></td></tr>
25807
<tr><td width="8%"><img src="images/fl_white.png" alt="images/fl_white"></td><td width="52%"><b>st_ghost_break</b>: flavor=<code>"break"</code></td><td width="40%"><img src="images/st_break_plain.png" alt="images/st_break_plain"></td></tr>
25813
<a name="st_005fgrate"></a>
25814
<table cellpadding="1" cellspacing="1" border="0">
25815
<tr><td valign="middle" align="left">[<a href="#st_005fghost" title="Previous section in reading order"> < </a>]</td>
25816
<td valign="middle" align="left">[<a href="#st_005fgreenbrown" title="Next section in reading order"> > </a>]</td>
25817
<td valign="middle" align="left"> </td>
25818
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
25819
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
25820
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
25821
<td valign="middle" align="left"> </td>
25822
<td valign="middle" align="left"> </td>
25823
<td valign="middle" align="left"> </td>
25824
<td valign="middle" align="left"> </td>
25825
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
25826
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
25827
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
25828
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
25830
<a name="st_005fgrate-1"></a>
25831
<h3 class="subsection">9.5.26 st_grate</h3>
25832
<a name="index-st_005fgrate"></a>
25834
<p>Hovering metal grate in different flavors that let all actors pass but block
25835
stones from moving over a grid position.
25837
<p>The different flavors are just for decorative purposes, but <code>"cross"</code>
25838
variant looks identical to an open <a href="#st_005fdoor">st_door</a> of flavor <code>"a"</code>, whereas
25839
<code>"framed"</code> variant looks identical to an open <a href="#st_005fdoor">st_door</a> of flavor
25840
<code>"b"</code>.
25842
<p>In contrast to opened doors grates do bounce actors that are flying due to a
25845
<p>As a hovering stone grates do not press <a href="#it_005ftrigger">it_trigger</a>s and let laser light
25846
pass. Grates allow <a href="#Flood-Spreading">Flood Spreading</a> and <a href="#Fire-Spreading">Fire Spreading</a>, too.
25848
<dl compact="compact">
25849
<dt> <b>Attributes:</b></dt>
25851
<dl compact="compact">
25852
<dt> <b>flavor</b> <i>values</i>: <code>"cross"</code>, <code>"framed"</code>; <i>default</i>: <code>"cross"</code></dt>
25856
<dt> <b>Messages:</b> none</dt>
25857
<dt> <b>Action:</b> none</dt>
25858
<dt> <b>Variants:</b></dt>
25859
<dd><dl compact="compact">
25860
<dt> <img src="images/st_grate_cross.png" alt="images/st_grate_cross"><p> <b>st_grate</b>: flavor=<code>"cross"</code>
25862
<dt> <img src="images/st_grate_cross.png" alt="images/st_grate_cross"><p> <b>st_grate_cross</b>: flavor=<code>"cross"</code>
25864
<dt> <img src="images/st_grate_framed.png" alt="images/st_grate_framed"><p> <b>st_grate_framed</b>: flavor=<code>"framed"</code>
25872
<a name="st_005fgreenbrown"></a>
25873
<table cellpadding="1" cellspacing="1" border="0">
25874
<tr><td valign="middle" align="left">[<a href="#st_005fgrate" title="Previous section in reading order"> < </a>]</td>
25875
<td valign="middle" align="left">[<a href="#st_005fice" title="Next section in reading order"> > </a>]</td>
25876
<td valign="middle" align="left"> </td>
25877
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
25878
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
25879
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
25880
<td valign="middle" align="left"> </td>
25881
<td valign="middle" align="left"> </td>
25882
<td valign="middle" align="left"> </td>
25883
<td valign="middle" align="left"> </td>
25884
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
25885
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
25886
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
25887
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
25889
<a name="st_005fgreenbrown-1"></a>
25890
<h3 class="subsection">9.5.27 st_greenbrown</h3>
25891
<a name="index-st_005fgreenbrown"></a>
25893
<p>A mainly brown stone that is just a standard stone besides
25894
the fact that it can originate from two other objects.
25896
<p>On one hand an <a href="#it_005fseed">it_seed</a> of flavor <code>"fake"</code> will grow to a standard,
25897
unmovable greenbrown. Just for level initialization purpose you can even set
25898
a variant ‘<samp>st_greenbrown_growing</samp>’ due to the <a href="#Snapshot-Principle">Snapshot Principle</a>.
25900
<p>On the other hand a <a href="#st_005fghost">st_ghost</a> of flavor <code>"greenbrown"</code> will transform
25901
to standard, unmovable greenbrown on an actor hit with a revealed
25902
<a href="#it_005fmagicwand">it_magicwand</a>.
25904
<dl compact="compact">
25905
<dt> <b>Variants:</b></dt>
25906
<dd><dl compact="compact">
25907
<dt> <img src="images/st_greenbrown.png" alt="images/st_greenbrown"><p> <b>st_greenbrown</b>
25909
<dt> <img src="images/st_greenbrown.png" alt="images/st_greenbrown"><p> <b>st_greenbrown_hollow</b>
25911
<dt> <img src="images/st_greenbrown.png" alt="images/st_greenbrown"><p> <b>st_greenbrown_movable</b>
25913
<dt> <img src="images/st_greenbrown_4.png" alt="images/st_greenbrown_4"><p> <b>st_greenbrown_growing</b>
25920
<a name="st_005fice"></a>
25921
<table cellpadding="1" cellspacing="1" border="0">
25922
<tr><td valign="middle" align="left">[<a href="#st_005fgreenbrown" title="Previous section in reading order"> < </a>]</td>
25923
<td valign="middle" align="left">[<a href="#st_005fjamb" title="Next section in reading order"> > </a>]</td>
25924
<td valign="middle" align="left"> </td>
25925
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
25926
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
25927
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
25928
<td valign="middle" align="left"> </td>
25929
<td valign="middle" align="left"> </td>
25930
<td valign="middle" align="left"> </td>
25931
<td valign="middle" align="left"> </td>
25932
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
25933
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
25934
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
25935
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
25937
<a name="st_005fice-1"></a>
25938
<h3 class="subsection">9.5.28 st_ice</h3>
25939
<a name="index-st_005fice"></a>
25941
<p>A block of ice is a movable stone that freezes some items when being pushed
25942
over them. Of course a floor of <a href="#fl_005fwater">fl_water</a> will freeze, too, when ice is
25943
being pushed over it. But a block of ice can be destroyed by explosions and by
25944
heating fire leaving either <a href="#fl_005fice">fl_ice</a> or <a href="#fl_005fwater">fl_water</a>.
25946
<p>When an ice block without frozen item is pushed onto a grid with a
25947
<a href="#freezable">freezable</a> item, the ice will freeze the item and will move it beneath
25948
itself on subsequent pushes. All items that the user can carry in his inventory
25949
are <a href="#freezable">freezable</a> and even some <a href="#Static-Items">Static Items</a> like <a href="#it_005fmagnet">it_magnet</a>,
25950
<a href="#it_005fspringboard">it_springboard</a>, etc. But a few items react in a special manner when an
25951
ice block is pushed onto them:
25953
<li> <a href="#it_005fsquashed">it_squashed</a> and <a href="#it_005fburnable">it_burnable</a>, with the exception of
25954
‘<samp>it_burnable_oil</samp>’, dissolve to nothing.
25955
</li><li> <a href="#it_005fcrack">it_crack</a> will vanish as the ice is putty for the cracked floors
25956
</li><li> <a href="#it_005fseed">it_seed</a> will not start growing, even though the ice is pushed as a
25957
solid stone on top.
25958
</li><li> <a href="#it_005fbomb">it_bomb</a> will explode and destroy the ice block as well as the floor.
25959
</li><li> <a href="#it_005fdynamite">it_dynamite</a> is very special - a burning dynamite gets extinguished
25960
by an ice block and becomes frozen in its idle state.
25963
<p>But what happens when an ice block with a frozen item gets pushed onto a grid
25964
with another item? The stronger item wins and survives beneath the ice block
25965
on the new position while the weaker item will be killed. The sequence from
25966
weak to strong is quite simple:
25968
<li> static items that get anyway wiped out by an ice block
25969
</li><li> <a href="#Liftable-Items">Liftable Items</a>
25970
</li><li> <a href="#portable">portable</a> items that are not <a href="#liftable">liftable</a>
25971
</li><li> <a href="#freezable">freezable</a> items that are not <a href="#portable">portable</a>
25972
</li><li> <a href="#Static-Items">Static Items</a> that are not <a href="#freezable">freezable</a>
25974
<p>When the two items are of the same category the already frozen item wins. This
25975
last rule ensures that the user can not free frozen items by dropping a liftable
25976
item out of his inventory in front of an ice block before pushing it.
25978
<p>An ice block looks like a bluish version of <a href="#st_005frawglass">st_rawglass</a>. But it has just
25979
one feature in common. It is transparent to laser light. Of course you can not
25980
freeze laser beams, even though they are implemented in the item layer. Laser
25981
light will interact even with frozen items and can ignite <a href="#it_005fdynamite">it_dynamite</a> or
25982
<a href="#it_005fbomb">it_bomb</a>. Even though being light transparent invisible actors can not
25983
pass it (see section <a href="#Transparent-Stones">Transparent Stones</a>).
25985
<p>Ice blocks shatter on nearby <a href="#it_005fbomb">it_bomb</a> and <a href="#it_005fdynamite">it_dynamite</a> explosions and
25986
on <a href="#ot_005fcannonball">ot_cannonball</a> hits. The ice will spread to the four direct neighboring
25987
grid positions and will cover these and the originating position with
25988
<a href="#fl_005fice">fl_ice</a>. Just <a href="#fl_005fabyss">fl_abyss</a> will not be covered by this ice floor and
25989
remains unchanged. Thus an exploding bomb leaves an <a href="#fl_005fabyss">fl_abyss</a> at its
25990
position, even when an ice blocks shatters nearby.
25992
<p>A fire starting to burn on a direct neighbor position will eventually melt the
25993
ice block by its <a href="#Heat_002dTransformation">Heat-Transformation</a>. The ice will melt to an
25994
<a href="#fl_005fwater">fl_water</a>. Just in case the ice block melts over an <a href="#fl_005fabyss">fl_abyss</a> the
25995
floor remains unchanged. The ice heating is no secure feature, as the heat burst
25996
occurs just once for each fire. Thus a user may be able to push an ice block
25997
aside a fire without heat transformation. Furtheron the melting takes time.
25998
Any intermediate nearby explosion can still shatter the melting ice block.
26000
<dl compact="compact">
26001
<dt> <b>Messages:</b></dt>
26003
<dl compact="compact">
26004
<dt> <b>ignite</b> See section <a href="#ignite">ignite</a></dt>
26005
<dd><p>Shatter the ice block.
26007
<dt> <b>heat</b> See section <a href="#heat">heat</a></dt>
26008
<dd><p>Melt the ice block
26013
<dt> <b>Variants:</b></dt>
26014
<dd><dl compact="compact">
26015
<dt> <img src="images/st_ice.png" alt="images/st_ice"><p> <b>st_ice</b>
26022
<a name="st_005fjamb"></a>
26023
<table cellpadding="1" cellspacing="1" border="0">
26024
<tr><td valign="middle" align="left">[<a href="#st_005fice" title="Previous section in reading order"> < </a>]</td>
26025
<td valign="middle" align="left">[<a href="#st_005fkey" title="Next section in reading order"> > </a>]</td>
26026
<td valign="middle" align="left"> </td>
26027
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
26028
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
26029
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
26030
<td valign="middle" align="left"> </td>
26031
<td valign="middle" align="left"> </td>
26032
<td valign="middle" align="left"> </td>
26033
<td valign="middle" align="left"> </td>
26034
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
26035
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
26036
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
26037
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
26039
<a name="st_005fjamb-1"></a>
26040
<h3 class="subsection">9.5.29 st_jamb</h3>
26041
<a name="index-st_005fjamb"></a>
26043
<p>A colored door jamb that allows coupled opening and closing on adjacent
26044
<a href="#st_005fdoor">st_door</a>s. Especially doors of flavor <code>"d"</code> can be opened by proper
26045
colored actors by door knocking.
26047
<p>The stone looks like 4 brown door jambs each with a colored ball on top. It fits
26048
to the 2 faced <code>"d"</code> variant of <a href="#st_005fdoor">st_door</a>. These doors can be
26049
configured to send the message <code>"hit"</code> to the adjacent jambs as their
26050
targets. Whenever an actor knocks the door, the jamb receives the message and
26051
checks the actor for matching color. On success it sends opening signals to
26052
the door being knocked and to a door being located on the opposite side of the
26053
jamb. Additionally doors located on the remaining two adjacent positions of the
26054
jamb will receive a closing signal. E.g.:
26056
<table><tr><td> </td><td><pre class="example">ti["n"] = {"st_door_d", "north", target="jamb", action="hit"}
26057
ti["e"] = {"st_door_d", "east", target="jamb", action="hit"}
26058
ti["s"] = {"st_door_d", "south", target="jamb", action="hit"}
26059
ti["w"] = {"st_door_d", "west", target="jamb", action="hit"}
26060
ti["J"] = {"st_jamb", "jamb"}
26061
ti["@"] = {"st_marble"}
26062
wo(ti, " ", {
26067
</pre></td></tr></table>
26069
<p>The black marble touching the east door will open the east and the west door,
26070
and will close the north and south door at the same time. The black marble
26071
touching the south door will open the south and the north door, and will close
26072
the west and east door.
26074
<dl compact="compact">
26075
<dt> <b>Attributes:</b></dt>
26077
<dl compact="compact">
26078
<dt> <b>color</b> <i>values</i>: <code>BLACK</code>, <code>WHITE</code>; <i>default</i>: <code>BLACK</code></dt>
26082
<dt> <b>Messages:</b></dt>
26084
<dl compact="compact">
26085
<dt> <b>hit</b></dt>
26086
<dd><p>The message value must be an object reference of an actor. The color of the
26087
actor must match the jamb color to cause an action. The sender’s position must
26088
either match the x or the y coordinate of the jamb, too.
26091
<dt> <b>signal</b> See section <a href="#signal">signal</a></dt>
26092
<dd><p>This message is just kept for backward compatibility issues. Do not use it in
26093
new API levels as it depends on other internal attributes not set for new API
26099
<dt> <b>Action:</b> See section <a href="#target">target</a>, See section <a href="#action">action</a></dt>
26100
<dt> <b>Variants:</b></dt>
26102
<dl compact="compact">
26103
<dt> <img src="images/st_jamb_black.png" alt="images/st_jamb_black"><p> <b>st_jamb</b>: color=<code>BLACK</code>
26105
<dt> <img src="images/st_jamb_black.png" alt="images/st_jamb_black"><p> <b>st_jamb_black</b>: color=<code>BLACK</code>
26107
<dt> <img src="images/st_jamb_white.png" alt="images/st_jamb_white"><p> <b>st_jamb_white</b>: color=<code>WHITE</code>
26115
<a name="st_005fkey"></a>
26116
<table cellpadding="1" cellspacing="1" border="0">
26117
<tr><td valign="middle" align="left">[<a href="#st_005fjamb" title="Previous section in reading order"> < </a>]</td>
26118
<td valign="middle" align="left">[<a href="#st_005fknight" title="Next section in reading order"> > </a>]</td>
26119
<td valign="middle" align="left"> </td>
26120
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
26121
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
26122
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
26123
<td valign="middle" align="left"> </td>
26124
<td valign="middle" align="left"> </td>
26125
<td valign="middle" align="left"> </td>
26126
<td valign="middle" align="left"> </td>
26127
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
26128
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
26129
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
26130
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
26132
<a name="st_005fkey-1"></a>
26133
<h3 class="subsection">9.5.30 st_key</h3>
26134
<a name="index-st_005fkey"></a>
26136
<p>A switch that is activated by insertion of an <a href="#it_005fkey">it_key</a>. Just actors
26137
assigned to a player can insert a key out of their item inventory by hitting
26138
the key switch with a key being the first item. Just keys with a matching
26139
‘<samp>code</samp>’ are accepted.
26141
<p>On a second hit the switch is deactivated and the inserted key is returned
26142
to the player’s inventory.
26144
<p>Key stones are often used as openers for an adjacent <a href="#st_005fdoor">st_door</a> that is
26145
declared as its ‘<samp>target</samp>’. But there is the inherent danger that an actor
26146
passing the door accidentially hits the neighboring key stone, causing the key
26147
to be pulled out again and the door to be closed immediately. Of couse this
26148
would shatter any <a href="#ac_005fmarble">ac_marble</a> or <a href="#ac_005fpearl">ac_pearl</a>. But a ‘<samp>secure</samp>’ key
26149
stone checks that the hitting actor is not positioned on one of the key stones
26150
target positions. It refuses any actions caused by such critical hits. Note
26151
that in case the target is a callback function that closes the adjacent door,
26152
there will be still no protection. A key stone with ‘<samp>secure</samp>’ value
26153
‘<samp>false</samp>’ would accept any hits and shatter marbles as it has been standard
26154
on older Enigma releases and is still in modes besides Enigma.
26156
<p>Usually the ‘<samp>code</samp>’ of the key stone is not visually unveiled. But if you
26157
set ‘<samp>invisible</samp>’ to the value ‘<samp>false</samp>’ the code becomes visible for
26158
number code values ‘<samp>1</samp>’ to ‘<samp>8</samp>’. This helps the user to distinguish
26159
the stones and to assign the correct <a href="#it_005fkey">it_key</a> when multiple instances are
26162
<p>An ‘<samp>invisible</samp>’ key stone reveals its code when a matching, unveiled
26163
<a href="#it_005fkey">it_key</a> gets inserted.
26165
<dl compact="compact">
26166
<dt> <b>Attributes:</b></dt>
26168
<dl compact="compact">
26169
<dt> <b>state</b>, <i>values</i>: <code>ON</code>, <code>OFF</code>; <i>default</i>: <code>OFF</code>; See section <a href="#state">state</a></dt>
26170
<dd><p>Current activity state of the key stone.
26172
<dt> <b>code</b>, <i>values</i>: number or string; <i>default</i>: <code>1</code>:</dt>
26173
<dd><p>The code that is required to activate this switch.
26175
<dt> <b>secure</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code></dt>
26176
<dd><p>Protect actors on target positions by neglecting their hits.
26178
<dt> <b>invisible</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code></dt>
26179
<dd><p>A visible key stone unveils its ‘<samp>code</samp>’ by a color spot.
26184
<dt> <b>Messages:</b></dt>
26186
<dl compact="compact">
26187
<dt> <b>signal</b> See section <a href="#signal">signal</a></dt>
26188
<dd><p>Switches on at value ‘<samp>1</samp>’, and off at values ‘<samp>0</samp>’.
26190
<dt> <b>on</b> See section <a href="#on">on</a></dt>
26191
<dt> <b>off</b> See section <a href="#off">off</a></dt>
26195
<dt> <b>Action:</b> See section <a href="#target">target</a>, See section <a href="#action">action</a></dt>
26196
<dt> <b>Variants:</b></dt>
26197
<dd><dl compact="compact">
26198
<dt> <img src="images/st_key_off.png" alt="images/st_key_off"><p> <b>st_key</b> with state=<code>OFF</code>
26200
<dt> <img src="images/st_key_on.png" alt="images/st_key_on"><p> <b>st_key</b> with state=<code>ON</code>
26206
<a name="st_005fknight"></a>
26207
<table cellpadding="1" cellspacing="1" border="0">
26208
<tr><td valign="middle" align="left">[<a href="#st_005fkey" title="Previous section in reading order"> < </a>]</td>
26209
<td valign="middle" align="left">[<a href="#st_005flaser" title="Next section in reading order"> > </a>]</td>
26210
<td valign="middle" align="left"> </td>
26211
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
26212
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
26213
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
26214
<td valign="middle" align="left"> </td>
26215
<td valign="middle" align="left"> </td>
26216
<td valign="middle" align="left"> </td>
26217
<td valign="middle" align="left"> </td>
26218
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
26219
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
26220
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
26221
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
26223
<a name="st_005fknight-1"></a>
26224
<h3 class="subsection">9.5.31 st_knight</h3>
26225
<a name="index-st_005fknight"></a>
26227
<p>A sword bearing knight stone that shatters all marbles that hit it, as long as
26228
they are not protected by an activated <a href="#it_005fumbrella">it_umbrella</a> or wield an
26229
<a href="#it_005fsword">it_sword</a>.
26231
<p>By hitting ‘<samp>st_knight</samp>’ with an <a href="#it_005fsword">it_sword</a> four times, the knight stone
26232
spits out a cheeky remark and can be passed thereafter, even without a sword.
26234
<p>A beaten knight stone is transparent to laser light.
26236
<dl compact="compact">
26237
<dt> <b>Attributes:</b></dt>
26239
<dl compact="compact">
26240
<dt> <b>state</b>, <i>values</i>: <code>0</code> to <code>4</code>; <i>default</i>: <code>0</code>; <i>access</i>: <code>read only</code> See section <a href="#state">state</a></dt>
26241
<dd><p>Current hit count of the knight stone. Starting uninjured at state ‘<samp>0</samp>’
26242
the knight is beaten after 4 hits.
26247
<dt> <b>Messages:</b> none</dt>
26248
<dt> <b>Action:</b> none</dt>
26249
<dt> <b>Variants:</b></dt>
26250
<dd><dl compact="compact">
26251
<dt> <img src="images/st_knight.png" alt="images/st_knight"><p> <b>st_knight</b>
26259
<a name="st_005flaser"></a>
26260
<table cellpadding="1" cellspacing="1" border="0">
26261
<tr><td valign="middle" align="left">[<a href="#st_005fknight" title="Previous section in reading order"> < </a>]</td>
26262
<td valign="middle" align="left">[<a href="#st_005flaserflop" title="Next section in reading order"> > </a>]</td>
26263
<td valign="middle" align="left"> </td>
26264
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
26265
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
26266
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
26267
<td valign="middle" align="left"> </td>
26268
<td valign="middle" align="left"> </td>
26269
<td valign="middle" align="left"> </td>
26270
<td valign="middle" align="left"> </td>
26271
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
26272
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
26273
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
26274
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
26276
<a name="st_005flaser-1"></a>
26277
<h3 class="subsection">9.5.32 st_laser</h3>
26278
<a name="index-st_005flaser"></a>
26280
<p>The laser stone is the only object that is capable of emitting light beams.
26281
Per default laser stones are switched off. The ‘<samp>state</samp>’ attribute represents
26282
the activity of the laser and can be set initially to ‘<samp>ON</samp>’. A laser is
26283
orientated to one direction into which the light will be emitted.
26285
<p>Lasers have a latency that protect them from infinite fast switching cycles. This
26286
allows you to toggle a laser with an <a href="#st_005flaserswitch">st_laserswitch</a> that is illuminated
26287
by the laser itself. During the latency period pending switch requests will be
26288
registered but will be executed with a certain small delay. Note that several
26289
pending requests may even neutralize are revoke each other.
26291
<p>An initially switched on laser will not cause actions with its light beam due
26292
to the <a href="#Snapshot-Principle">Snapshot Principle</a>. If you have need of the actions you may switch
26293
on the laser by a message in the ‘<samp>postinit</samp>’ function
26294
(See section <a href="#Level-Initialization">Level Initialization</a>). E.g. a flickering laser caused by a laser that
26295
illuminates a <a href="#st_005flaserswitch">st_laserswitch</a> which toggles the laser needs to be switched
26298
<dl compact="compact">
26299
<dt> <b>Attributes:</b></dt>
26301
<dl compact="compact">
26302
<dt> <b>state</b>, <i>values</i>: <code>ON</code>, <code>OFF</code>; <i>default</i>: <code>OFF</code> See section <a href="#state">state</a></dt>
26303
<dt> <b>orientation</b>, <i>values</i>: <code>NORTH</code>, <code>EAST</code>, <code>SOUTH</code>, <code>WEST</code>; <i>default</i>: <code>NORTH</code></dt>
26304
<dd><p>The orientation of the laser. It determines the direction that the laser will
26305
emit light if it is switched on.
26307
<dt> <b>counterclock</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
26308
<dd><p>The standard turning direction is clockwise. Use this attribute to revert the
26314
<dt> <b>Messages:</b></dt>
26316
<dl compact="compact">
26317
<dt> <b>signal</b> See section <a href="#signal">signal</a></dt>
26318
<dd><p>Switch the laser on at value ‘<samp>1</samp>’ and off at value ‘<samp>0</samp>’.
26320
<dt> <b>on</b> See section <a href="#on">on</a></dt>
26321
<dt> <b>off</b> See section <a href="#off">off</a></dt>
26322
<dt> <b>turn</b></dt>
26323
<dd><p>Turn orientation in turning direction as defined by attribute
26324
‘<samp>counterclock</samp>’.
26326
<dt> <b>turnback</b></dt>
26327
<dd><p>Turn orientation in opposite turning direction as defined by attribute
26328
‘<samp>counterclock</samp>’.
26333
<dt> <b>Action:</b> none</dt>
26334
<dt> <b>Variants:</b></dt>
26336
<tr><td width="8%"><img src="images/st_laser_d.png" alt="images/st_laser_d"></td><td width="42%"><b>st_laser_w</b>: orientation = <code>WEST</code>, state = <code>OFF</code></td><td width="8%"><img src="images/st_laser_d6.png" alt="images/st_laser_d6"></td><td width="42%"><b>st_laser_w</b>: orientation = <code>WEST</code>, state = <code>ON</code></td></tr>
26337
<tr><td width="8%"><img src="images/st_laser_c.png" alt="images/st_laser_c"></td><td width="42%"><b>st_laser_s</b>: orientation = <code>SOUTH</code>, state = <code>OFF</code></td><td width="8%"><img src="images/st_laser_c6.png" alt="images/st_laser_c6"></td><td width="42%"><b>st_laser_s</b>: orientation = <code>SOUTH</code>, state = <code>ON</code></td></tr>
26338
<tr><td width="8%"><img src="images/st_laser_b.png" alt="images/st_laser_b"></td><td width="42%"><b>st_laser_e</b>: orientation = <code>EAST</code>, state = <code>OFF</code></td><td width="8%"><img src="images/st_laser_b6.png" alt="images/st_laser_b6"></td><td width="42%"><b>st_laser_e</b>: orientation = <code>EAST</code>, state = <code>ON</code></td></tr>
26339
<tr><td width="8%"><img src="images/st_laser.png" alt="images/st_laser"></td><td width="42%"><b>st_laser_n</b>: orientation = <code>NORTH</code>, state = <code>OFF</code></td><td width="8%"><img src="images/st_laser_6.png" alt="images/st_laser_6"></td><td width="42%"><b>st_laser_n</b>: orientation = <code>NORTH</code>, state = <code>ON</code></td></tr>
26345
<a name="st_005flaserflop"></a>
26346
<table cellpadding="1" cellspacing="1" border="0">
26347
<tr><td valign="middle" align="left">[<a href="#st_005flaser" title="Previous section in reading order"> < </a>]</td>
26348
<td valign="middle" align="left">[<a href="#st_005flaserswitch" title="Next section in reading order"> > </a>]</td>
26349
<td valign="middle" align="left"> </td>
26350
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
26351
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
26352
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
26353
<td valign="middle" align="left"> </td>
26354
<td valign="middle" align="left"> </td>
26355
<td valign="middle" align="left"> </td>
26356
<td valign="middle" align="left"> </td>
26357
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
26358
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
26359
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
26360
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
26362
<a name="st_005flaserflop-1"></a>
26363
<h3 class="subsection">9.5.33 st_laserflop</h3>
26364
<a name="index-st_005flaserflop"></a>
26366
<p>A switch that is triggered by actor hits and laser light. It switches instantly
26367
to state ‘<samp>ON</samp>’ and when it is no longer illuminated it switches back to
26368
state ‘<samp>OFF</samp>’ after a given ‘<samp>interval</samp>’. Repetitive actor hits and
26369
continuing laser light will prolong the ‘<samp>ON</samp>’ state until a trailing
26370
‘<samp>interval</samp>’ after the last hit has been expired. A similar object without
26371
light sensitiveness is the <a href="#st_005fmonoflop">st_monoflop</a>.
26373
<p>The single state cycle, called monoflop, can be initiated by ‘<samp>on</samp>’ and
26374
‘<samp>signal</samp>’ messages. But an activated monoflop cannot be stopped by
26375
messages or state setting.
26377
<p>At initialization a laserflop that is exposed to laser light will start in state
26378
‘<samp>ON</samp>’ without sending actions due to the <a href="#Snapshot-Principle">Snapshot Principle</a>.
26380
<p>A laserflop that is moved or swapped in or out of a laser beam will act on
26381
the light change with proper actions.
26383
<dl compact="compact">
26384
<dt> <b>Attributes:</b></dt>
26386
<dl compact="compact">
26387
<dt> <b>state</b>, <i>values</i>: <code>ON</code>, <code>OFF</code>; <i>default</i>: <code>OFF</code>; See section <a href="#state">state</a></dt>
26388
<dd><p>Represents the activity state. The state of a new object can be set, but an
26389
active laserflop cannot be set to state ‘<samp>OFF</samp>’.
26391
<dt> <b>interval</b> <i>values</i>: positive number; <i>default</i>: <code>1.8</code></dt>
26392
<dd><p>Number of seconds to return to state ‘<samp>OFF</samp>’ after the last hit.
26398
<dt> <b>Messages:</b></dt>
26400
<dl compact="compact">
26401
<dt> <b>signal</b> See section <a href="#signal">signal</a></dt>
26402
<dd><p>Switches on at value ‘<samp>1</samp>’. A value of ‘<samp>0</samp>’ is ignored.
26404
<dt> <b>on</b> See section <a href="#on">on</a></dt>
26405
<dd><p>Switches the laserflop on like on an actor hit.
26410
<dt> <b>Action:</b> See section <a href="#target">target</a>, See section <a href="#action">action</a></dt>
26411
<dt> <b>Variants:</b></dt>
26412
<dd><dl compact="compact">
26413
<dt> <img src="images/st_monoflop.png" alt="images/st_monoflop"><p> <b>st_laserflop</b>: state = <code>OFF</code>
26415
<dt> <img src="images/st_monoflop_2.png" alt="images/st_monoflop_2"><p> <b>st_laserflop</b>: state = <code>ON</code>
26423
<a name="st_005flaserswitch"></a>
26424
<table cellpadding="1" cellspacing="1" border="0">
26425
<tr><td valign="middle" align="left">[<a href="#st_005flaserflop" title="Previous section in reading order"> < </a>]</td>
26426
<td valign="middle" align="left">[<a href="#st_005flightglass" title="Next section in reading order"> > </a>]</td>
26427
<td valign="middle" align="left"> </td>
26428
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
26429
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
26430
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
26431
<td valign="middle" align="left"> </td>
26432
<td valign="middle" align="left"> </td>
26433
<td valign="middle" align="left"> </td>
26434
<td valign="middle" align="left"> </td>
26435
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
26436
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
26437
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
26438
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
26440
<a name="st_005flaserswitch-1"></a>
26441
<h3 class="subsection">9.5.34 st_laserswitch</h3>
26442
<a name="index-st_005flaserswitch"></a>
26444
<p>A switch that is exclusively triggered by laser light. It switches instantly to
26445
state ‘<samp>ON</samp>’ when a laser beam hits the stone from any direction. It switches
26446
instantly back to state ‘<samp>OFF</samp>’ when it is no longer illuminated.
26448
<p>There is no way to set the state of this stone manually. But the state
26449
can nevertheless be read. At initialization a laserswitch that is exposed to
26450
laser light will start in state ‘<samp>ON</samp>’ without sending actions due to the
26451
<a href="#Snapshot-Principle">Snapshot Principle</a>.
26453
<p>A laserswitch that is moved or swapped in or out of a laser beam will act on
26454
the light change with proper actions.
26456
<dl compact="compact">
26457
<dt> <b>Attributes:</b></dt>
26459
<dl compact="compact">
26460
<dt> <b>state</b>, <i>values</i>: <code>ON</code>, <code>OFF</code>; <i>default</i>: <code>OFF</code>; <i>access</i>: <code>read only</code> See section <a href="#state">state</a></dt>
26464
<dt> <b>Messages:</b> none</dt>
26465
<dt> <b>Action:</b> See section <a href="#target">target</a>, See section <a href="#action">action</a></dt>
26467
<dl compact="compact">
26468
<dt> <img src="images/st_oxydb.png" alt="images/st_oxydb"><p> <b>st_laserswitch</b>: state = <code>OFF</code>
26470
<dt> <img src="images/st_quake_3.png" alt="images/st_quake_3"><p> <b>st_laserswitch</b>: state = <code>ON</code>
26477
<a name="st_005flightglass"></a>
26478
<table cellpadding="1" cellspacing="1" border="0">
26479
<tr><td valign="middle" align="left">[<a href="#st_005flaserswitch" title="Previous section in reading order"> < </a>]</td>
26480
<td valign="middle" align="left">[<a href="#st_005flightpassenger" title="Next section in reading order"> > </a>]</td>
26481
<td valign="middle" align="left"> </td>
26482
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
26483
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
26484
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
26485
<td valign="middle" align="left"> </td>
26486
<td valign="middle" align="left"> </td>
26487
<td valign="middle" align="left"> </td>
26488
<td valign="middle" align="left"> </td>
26489
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
26490
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
26491
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
26492
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
26494
<a name="st_005flightglass-1"></a>
26495
<h3 class="subsection">9.5.35 st_lightglass</h3>
26496
<a name="index-st_005flightglass"></a>
26498
<p>A metal framed transparent glass stone. It exists in static, movable and
26499
hollow variants and is by its very nature transparent to laser light. Like other
26500
<a href="#Transparent-Stones">Transparent Stones</a> it is passable for invisible actors as long as it is
26501
not ‘<samp>movable</samp>’.
26503
<p>A <a href="#st_005fmagic">st_magic</a> of variant <code>st_magic_oxyda</code> transforms on actor hits to
26504
a movable lightglass stone
26506
<dl compact="compact">
26507
<dt> <b>Attributes:</b></dt>
26509
<dl compact="compact">
26510
<dt> <b>hollow</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: read only See section <a href="#hollow">hollow</a></dt>
26511
<dt> <b>movable</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: read only See section <a href="#movable">movable</a></dt>
26515
<dt> <b>Messages:</b> none</dt>
26516
<dt> <b>Variants:</b></dt>
26518
<dl compact="compact">
26519
<dt> <img src="images/st_lightglass.png" alt="images/st_lightglass"><p> <b>st_lightglass</b>: hollow = <code>false</code>, movable = <code>false</code>
26521
<dt> <img src="images/st_lightglass.png" alt="images/st_lightglass"><p> <b>st_lightglass_hollow</b>: hollow = <code>true</code>, movable = <code>false</code>
26523
<dt> <img src="images/st_lightglass.png" alt="images/st_lightglass"><p> <b>st_lightglass_movable</b>: hollow = <code>false</code>, movable = <code>true</code>
26532
<a name="st_005flightpassenger"></a>
26533
<table cellpadding="1" cellspacing="1" border="0">
26534
<tr><td valign="middle" align="left">[<a href="#st_005flightglass" title="Previous section in reading order"> < </a>]</td>
26535
<td valign="middle" align="left">[<a href="#st_005fmagic" title="Next section in reading order"> > </a>]</td>
26536
<td valign="middle" align="left"> </td>
26537
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
26538
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
26539
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
26540
<td valign="middle" align="left"> </td>
26541
<td valign="middle" align="left"> </td>
26542
<td valign="middle" align="left"> </td>
26543
<td valign="middle" align="left"> </td>
26544
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
26545
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
26546
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
26547
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
26549
<a name="st_005flightpassenger-1"></a>
26550
<h3 class="subsection">9.5.36 st_lightpassenger</h3>
26551
<a name="index-st_005flightpassenger"></a>
26553
<p>The light passenger skates on a laser beam, and may push up to one
26554
movable stone in front of it. Opposing laser beams are ignored.
26555
When another laser beam crosses the actual laser beam on which the
26556
passenger skates, the passenger switches beams. If it is initially
26557
lighted by two rectangular beams, one of them will be chosen by
26558
random. The light passenger’s skating ability can be turned off
26561
<p>When a stone is in its way, the passenger sends an impulse to the
26562
blocking stone, which may move it, but it may also have other effects;
26563
e.g., a turnstile turns around and an impulse-stone starts pulsing,
26564
but it does not open oxyds (this is intended).
26566
<p>The light passenger can’t be pushed by actors, but, e.g., by
26567
<a href="#st_005fstoneimpulse">st_stoneimpulse</a>.
26569
<p>The speed of the light passenger can be changed with the
26570
‘<samp>interval</samp>’-attribute (default 50 ms, which is quite fast) and may
26571
include the floor friction and local gradient via
26572
‘<samp>friction</samp>’ and ‘<samp>gradient</samp>’. The resulting interval results as
26574
<table><tr><td> </td><td><pre class="example">interval = base * (1 + stone_friction * floor_friction) / (1 + stone_gradient * floor_gradient)
26575
</pre></td></tr></table>
26577
<p>with ‘<samp>base</samp>’ the value of the ‘<samp>interval</samp>’-attribute,
26578
‘<samp>floor_friction</samp>’ the friction of the floor below the light passenger,
26579
and ‘<samp>floor_gradient</samp>’ the parallel part of the force of the floor,
26580
i.e., the sum of gradient-force and <code>force_x/y</code>-attributes.
26582
<p>The light passenger can be switched on and off by messages (see below), and
26583
appears as ‘<samp>st_darkglass</samp>’ when inactive. A player with an <a href="#it_005fglasses">it_glasses</a>
26584
in his inventory that includes the ‘<samp>SPOT_LIGHTPASSENGER</samp>’ feature is able
26585
to distinguish the switched off lightpassenger from an ‘<samp>st_darkglass</samp>’.
26586
The variant ‘<samp>st_lightpassenger_off</samp>’ is deactivated from the beginning.
26587
A lightpassenger that moves onto an <a href="#it_005fcross">it_cross</a> switches off immediately. A
26588
switched off lightpassenger can be switched on by an actor hit with a revealed
26589
<a href="#it_005fbrush">it_brush</a> in the inventory. Such a touch with a brush does wipe out a
26590
cross beneath the lightpassenger, too.
26592
<p>An <a href="#st_005fboulder">st_boulder</a> hitting a lightpassenger toggles the lightpassenger’s state
26593
for a short period.
26595
<p>When an active ‘<samp>st_lightpassenger</samp>’ is trapped between exactly two
26596
opposing light beams or light beams from all four directions, it
26597
starts blinking. In this state, it can be destroyed with
26598
<a href="#it_005fhammer">it_hammer</a>.
26600
<dl compact="compact">
26601
<dt> <b>Attributes:</b></dt>
26603
<dl compact="compact">
26604
<dt> <b>state</b>, <i>values</i>: <code>ON</code>, <code>OFF</code>; <i>default</i>: <code>ON</code>; See section <a href="#state">state</a></dt>
26605
<dd><p>Represents the activity state.
26607
<dt> <b>interval</b> <i>values</i>: positive number; <i>default</i>: <code>0.05</code></dt>
26608
<dd><p>The base interval for movements.
26610
<dt> <b>friction</b> <i>values</i>: positive number; <i>default</i>: <code>0.0</code></dt>
26611
<dd><p>Stone friction of the speed of the light passenger.
26613
<dt> <b>gradient</b> <i>values</i>: positive number; <i>default</i>: <code>0.0</code></dt>
26614
<dd><p>Stone gradient of the speed of the light passenger.
26620
<dt> <b>Messages:</b></dt>
26622
<dl compact="compact">
26623
<dt> <b>signal</b> See section <a href="#signal">signal</a></dt>
26624
<dd><p>Switches on at value ‘<samp>1</samp>’. A values of ‘<samp>0</samp>’ is ignored.
26626
<dt> <b>on</b> See section <a href="#on">on</a></dt>
26627
<dd><p>Switch the lightpassenger on.
26629
<dt> <b>off</b> See section <a href="#off">off</a></dt>
26630
<dd><p>Switch the lightpassenger off.
26635
<dt> <b>Variants:</b></dt>
26637
<dl compact="compact">
26638
<dt> <img src="images/st_lightpassenger.png" alt="images/st_lightpassenger"><p> <b>st_lightpassenger</b>: state = <code>ON</code>
26640
<dt> <img src="images/st_lightpassenger.png" alt="images/st_lightpassenger"><p> <b>st_lightpassenger_on</b>: state = <code>ON</code>
26642
<dt> <img src="images/st_darkglass.png" alt="images/st_darkglass"><p> <b>st_lightpassenger_off</b>: state = <code>OFF</code>
26650
<a name="st_005fmagic"></a>
26651
<table cellpadding="1" cellspacing="1" border="0">
26652
<tr><td valign="middle" align="left">[<a href="#st_005flightpassenger" title="Previous section in reading order"> < </a>]</td>
26653
<td valign="middle" align="left">[<a href="#st_005fmail" title="Next section in reading order"> > </a>]</td>
26654
<td valign="middle" align="left"> </td>
26655
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
26656
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
26657
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
26658
<td valign="middle" align="left"> </td>
26659
<td valign="middle" align="left"> </td>
26660
<td valign="middle" align="left"> </td>
26661
<td valign="middle" align="left"> </td>
26662
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
26663
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
26664
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
26665
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
26667
<a name="st_005fmagic-1"></a>
26668
<h3 class="subsection">9.5.37 st_magic</h3>
26669
<a name="index-st_005fmagic"></a>
26671
<p>A stone that mimics one stone, but transforms on actor hits into another stone.
26673
<p>Like <a href="#st_005ffake">st_fake</a> this stone does initially look like another stone of a kind
26674
given by the attribute ‘<samp>flavor</samp>’. But on an actor hit with or without tool
26675
it transforms to another stone, which provides its own set of features.
26677
<p>The flavor <code>"brick"</code> just transforms on a hit with a revealed
26678
<a href="#it_005fmagicwand">it_magicwand</a> into a static <a href="#st_005frawglass">st_rawglass</a>.
26680
<p>The flavor <code>"oxyda"</code> transforms on any hit into a movable
26681
<a href="#st_005flightglass">st_lightglass</a>.
26683
<p>The flavor <code>"oxydc"</code> transforms on any hit into a movable
26684
<a href="#st_005frawglass">st_rawglass</a>.
26686
<dl compact="compact">
26687
<dt> <b>Attributes:</b></dt>
26689
<dl compact="compact">
26690
<dt> <b>flavor</b> <i>values</i>: <code>"brick"</code>, <code>"oxyda"</code>, <code>"oxydc"</code>; <i>default</i>: <code>"brick"</code>; <i>access</i>: read only</dt>
26694
<dt> <b>Messages:</b> none</dt>
26695
<dt> <b>Action:</b> none</dt>
26696
<dt> <b>Variants:</b></dt>
26698
<dl compact="compact">
26699
<dt> <img src="images/st_brick.png" alt="images/st_brick"><p> <b>st_magic</b>: flavor=<code>"brick"</code>
26701
<dt> <img src="images/st_brick.png" alt="images/st_brick"><p> <b>st_magic_brick</b>: flavor=<code>"brick"</code>
26703
<dt> <img src="images/st_oxyda.png" alt="images/st_oxyda"><p> <b>st_magic_oxyda</b>: flavor=<code>"oxyda"</code>
26705
<dt> <img src="images/st_oxydc.png" alt="images/st_oxydc"><p> <b>st_magic_oxydc</b>: flavor=<code>"oxydc"</code>
26713
<a name="st_005fmail"></a>
26714
<table cellpadding="1" cellspacing="1" border="0">
26715
<tr><td valign="middle" align="left">[<a href="#st_005fmagic" title="Previous section in reading order"> < </a>]</td>
26716
<td valign="middle" align="left">[<a href="#st_005fmirror" title="Next section in reading order"> > </a>]</td>
26717
<td valign="middle" align="left"> </td>
26718
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
26719
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
26720
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
26721
<td valign="middle" align="left"> </td>
26722
<td valign="middle" align="left"> </td>
26723
<td valign="middle" align="left"> </td>
26724
<td valign="middle" align="left"> </td>
26725
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
26726
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
26727
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
26728
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
26730
<a name="st_005fmail-1"></a>
26731
<h3 class="subsection">9.5.38 st_mail</h3>
26732
<a name="index-st_005fmail"></a>
26734
<p>When hit by an actor, a mail stone takes the first item out of the player’s
26735
inventory and drops it at its exit, or the exit of the appending <a href="#it_005fpipe">it_pipe</a>.
26736
If this position is blocked (e.g., by another item), no item is taken from
26737
inventory. The <a href="#it_005fbrake">it_brake</a> is the only item that gets delivered even if
26738
another item is positioned at the end of the pipe as it emerges the pipe as an
26739
<a href="#st_005fbrake">st_brake</a> stone. An <a href="#it_005fpipe">it_pipe</a> end piece with just one fitting connection
26740
closes a mail pipe completely, rejecting any item insertion.
26742
<dl compact="compact">
26743
<dt> <b>Attributes:</b></dt>
26745
<dl compact="compact">
26746
<dt> <b>orientation</b>, <i>values</i>: <code>NORTH</code>, <code>EAST</code>, <code>SOUTH</code>, <code>WEST</code>; <i>default</i>: <code>NORTH</code></dt>
26747
<dd><p>The orientation of the mail stone. It determines the neighbors grid position
26748
onto which the item will be dropped, or where the pipe starts.
26753
<dt> <b>Messages:</b> none</dt>
26754
<dt> <b>Action:</b> none</dt>
26755
<dt> <b>Variants:</b></dt>
26757
<dl compact="compact">
26758
<dt> <img src="images/st_mail.png" alt="images/st_mail"><p> <b>st_mail</b>: orientation = <code>NORTH</code>
26760
<dt> <img src="images/st_mail_3.png" alt="images/st_mail_3"><p> <b>st_mail_w</b>: orientation = <code>WEST</code>
26762
<dt> <img src="images/st_mail_4.png" alt="images/st_mail_4"><p> <b>st_mail_s</b>: orientation = <code>SOUTH</code>
26764
<dt> <img src="images/st_mail_2.png" alt="images/st_mail_2"><p> <b>st_mail_e</b>: orientation = <code>EAST</code>
26766
<dt> <img src="images/st_mail.png" alt="images/st_mail"><p> <b>st_mail_n</b>: orientation = <code>NORTH</code>
26774
<a name="st_005fmirror"></a>
26775
<table cellpadding="1" cellspacing="1" border="0">
26776
<tr><td valign="middle" align="left">[<a href="#st_005fmail" title="Previous section in reading order"> < </a>]</td>
26777
<td valign="middle" align="left">[<a href="#st_005fmonoflop" title="Next section in reading order"> > </a>]</td>
26778
<td valign="middle" align="left"> </td>
26779
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
26780
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
26781
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
26782
<td valign="middle" align="left"> </td>
26783
<td valign="middle" align="left"> </td>
26784
<td valign="middle" align="left"> </td>
26785
<td valign="middle" align="left"> </td>
26786
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
26787
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
26788
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
26789
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
26791
<a name="st_005fmirror-1"></a>
26792
<h3 class="subsection">9.5.39 st_mirror</h3>
26793
<a name="index-st_005fmirror"></a>
26795
<p>Mirror stones redirect and fork laser beams. They exist in different shapes.
26796
You can set the shape by the attribute ‘<samp>flavor</samp>’ or by using the
26797
appropriate subkind. There are two planar versions called ‘<samp>slab</samp>’ and
26798
‘<samp>sheets</samp>’, and a ‘<samp>triangle</samp>’ version.
26800
<p>The mirror panes can either be non-transparent or semi-transparent. Even though
26801
you set this feature with the attribute ‘<samp>transparent</samp>’ you should be aware
26802
that even with a value of ‘<samp>true</samp>’ the mirror is not fully transparent. E.g.
26803
a ‘<samp>slab</samp>’ mirror will block any laser light that is parallel to its shape
26804
as the short ends are no mirrors at all. For this reason we provide the second
26805
planar version called ‘<samp>sheets</samp>’, which lets light parallel to its sheets
26808
<p>Mirrors hit by an actor or impulsed by an <a href="#st_005fstoneimpulse">st_stoneimpulse</a> will move if
26809
their attribute ‘<samp>movable</samp>’ is set to true. Mirrors that are not movable
26810
will differ slightly in a darker color.
26812
<p>Mirrors hit or just touched will turn their mirror panes by 90 degrees. The
26813
standard turning direction is clockwise. But this standard can be changed
26814
by the attribute ‘<samp>counterclock</samp>’. An <a href="#st_005fboulder">st_boulder</a> hitting a mirror
26815
will turn it in its standard direction, too.
26817
<p>A mirror can be turned into the opposite direction either by a message
26818
‘<samp>turnback</samp>’ or by an actor with a revealed <a href="#it_005fwrench">it_wrench</a> in its
26821
<p>Mirrors moved by stone pushing impulses issued by <a href="#it_005fpuller">it_puller</a>,
26822
<a href="#st_005fstoneimpulse">st_stoneimpulse</a>,... or send by <a href="#ot_005fwire">ot_wire</a> will move without being turned.
26824
<dl compact="compact">
26825
<dt> <b>Attributes:</b></dt>
26827
<dl compact="compact">
26828
<dt> <b>flavor</b> <i>values</i>: <code>"slab"</code>, <code>"sheets"</code>, <code>"triangle"</code>; <i>default</i>: <code>"slab"</code></dt>
26829
<dd><p>Mirror panes either set up as a triangle or as a side opaque slab or
26830
as a mandatory semi-transparent pair of sheets.
26832
<dt> <b>state</b>, <i>values</i>: <code>NORTH</code>, <code>EAST</code>, <code>SOUTH</code>, <code>WEST</code>; <i>default</i>: <code>NORTH</code>; See section <a href="#state">state</a></dt>
26833
<dd><p>The orientation of the mirror. For a triangular mirror it is the triangle’s
26834
pointing direction. For a planar mirror it is the reflection direction of an
26835
incoming northbound beam.
26837
<dt> <b>orientation</b>, <i>values</i>: <code>NORTH</code>, <code>EAST</code>, <code>SOUTH</code>, <code>WEST</code>, <code>RANDOMDIR</code>; <i>default</i>: <code>NORTH</code></dt>
26838
<dd><p>The orientation of the mirror. For a triangular mirror it is the triangle’s
26839
pointing direction. For a planar mirror it is the reflection direction of an
26840
incoming northbound beam. The value <code>RANDOMDIR</code> is just evaluated when the
26841
mirror is being set. From this point of time the mirror will report a random
26842
orientation out of the other 4 real orientations.
26844
<dt> <b>transparent</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
26845
<dd><p>Semitransparency of the mirror panes.
26847
<dt> <b>movable</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code> See section <a href="#movable">movable</a></dt>
26848
<dd><p>Movability on actor hits and stone impulses.
26850
<dt> <b>counterclock</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
26851
<dd><p>The standard turning direction is clockwise. Use this attribute to revert the
26857
<dt> <b>Messages:</b></dt>
26859
<dl compact="compact">
26860
<dd><a name="index-orientate-1"></a>
26862
<dt> <b>orientate</b>, <i>value type</i>: orientation</dt>
26863
<dd><p>Change the orientation to the given orientation value. The <a href="#st_005ffourswitch">st_fourswitch</a>
26864
provides a compatible action which allows you to set a mirror as
26865
target and this message as action.
26867
<dt> <b>turn</b></dt>
26868
<dd><p>Turn the orientation in turning direction as defined by attribute
26869
‘<samp>counterclock</samp>’.
26871
<dt> <b>turnback</b></dt>
26872
<dd><p>Turn the orientation in opposite turning direction as defined by attribute
26873
‘<samp>counterclock</samp>’.
26875
<dt> <b>signal</b> See section <a href="#signal">signal</a></dt>
26876
<dd><p>Turn the orientation in turning direction as defined by attribute
26877
‘<samp>counterclock</samp>’ on value ‘<samp>1</samp>’. A value of ‘<samp>0</samp>’ is ignored.
26883
<dt> <b>Action:</b> none</dt>
26884
<dt> <b>Variants:</b></dt>
26886
<tr><td width="8%"><img src="images/st_mirror_static.png" alt="images/st_mirror_static"></td><td width="42%"><b>st_mirror_triangle</b>: flavor=<code>triangle</code>, state = <code>NORTH</code>, transparent = <code>false</code>, movable = <code>false</code></td><td width="8%"><img src="images/st_mirror_movable.png" alt="images/st_mirror_movable"></td><td width="42%"><b>st_mirror_triangle</b>: flavor=<code>triangle</code>, state = <code>NORTH</code>, transparent = <code>false</code>, movable = <code>true</code></td></tr>
26887
<tr><td width="8%"><img src="images/st_mirror_static_2.png" alt="images/st_mirror_static_2"></td><td width="42%"><b>st_mirror_triangle</b>: flavor=<code>triangle</code>, state = <code>EAST</code>, transparent = <code>false</code>, movable = <code>false</code></td><td width="8%"><img src="images/st_mirror_movable_2.png" alt="images/st_mirror_movable_2"></td><td width="42%"><b>st_mirror_triangle</b>: flavor=<code>triangle</code>, state = <code>EAST</code>, transparent = <code>false</code>, movable = <code>true</code></td></tr>
26888
<tr><td width="8%"><img src="images/st_mirror_static_3.png" alt="images/st_mirror_static_3"></td><td width="42%"><b>st_mirror_triangle</b>: flavor=<code>triangle</code>, state = <code>SOUTH</code>, transparent = <code>false</code>, movable = <code>false</code></td><td width="8%"><img src="images/st_mirror_movable_3.png" alt="images/st_mirror_movable_3"></td><td width="42%"><b>st_mirror_triangle</b>: flavor=<code>triangle</code>, state = <code>SOUTH</code>, transparent = <code>false</code>, movable = <code>true</code></td></tr>
26889
<tr><td width="8%"><img src="images/st_mirror_static_4.png" alt="images/st_mirror_static_4"></td><td width="42%"><b>st_mirror_triangle</b>: flavor=<code>triangle</code>, state = <code>WEST</code>, transparent = <code>false</code>, movable = <code>false</code></td><td width="8%"><img src="images/st_mirror_movable_4.png" alt="images/st_mirror_movable_4"></td><td width="42%"><b>st_mirror_triangle</b>: flavor=<code>triangle</code>, state = <code>WEST</code>, transparent = <code>false</code>, movable = <code>true</code></td></tr>
26890
<tr><td width="8%"><img src="images/st_mirror_static_b.png" alt="images/st_mirror_static_b"></td><td width="42%"><b>st_mirror_triangle</b>: flavor=<code>triangle</code>, state = <code>NORTH</code>, transparent = <code>true</code>, movable = <code>false</code></td><td width="8%"><img src="images/st_mirror_movable_b.png" alt="images/st_mirror_movable_b"></td><td width="42%"><b>st_mirror_triangle</b>: flavor=<code>triangle</code>, state = <code>NORTH</code>, transparent = <code>true</code>, movable = <code>true</code></td></tr>
26891
<tr><td width="8%"><img src="images/st_mirror_static_b2.png" alt="images/st_mirror_static_b2"></td><td width="42%"><b>st_mirror_triangle</b>: flavor=<code>triangle</code>, state = <code>EAST</code>, transparent = <code>true</code>, movable = <code>false</code></td><td width="8%"><img src="images/st_mirror_movable_b2.png" alt="images/st_mirror_movable_b2"></td><td width="42%"><b>st_mirror_triangle</b>: flavor=<code>triangle</code>, state = <code>EAST</code>, transparent = <code>true</code>, movable = <code>true</code></td></tr>
26892
<tr><td width="8%"><img src="images/st_mirror_static_b3.png" alt="images/st_mirror_static_b3"></td><td width="42%"><b>st_mirror_triangle</b>: flavor=<code>triangle</code>, state = <code>SOUTH</code>, transparent = <code>true</code>, movable = <code>false</code></td><td width="8%"><img src="images/st_mirror_movable_b3.png" alt="images/st_mirror_movable_b3"></td><td width="42%"><b>st_mirror_triangle</b>: flavor=<code>triangle</code>, state = <code>SOUTH</code>, transparent = <code>true</code>, movable = <code>true</code></td></tr>
26893
<tr><td width="8%"><img src="images/st_mirror_static_b4.png" alt="images/st_mirror_static_b4"></td><td width="42%"><b>st_mirror_triangle</b>: flavor=<code>triangle</code>, state = <code>WEST</code>, transparent = <code>true</code>, movable = <code>false</code></td><td width="8%"><img src="images/st_mirror_movable_b4.png" alt="images/st_mirror_movable_b4"></td><td width="42%"><b>st_mirror_triangle</b>: flavor=<code>triangle</code>, state = <code>WEST</code>, transparent = <code>true</code>, movable = <code>true</code></td></tr>
26894
<tr><td width="8%"><img src="images/st_mirror_static_c.png" alt="images/st_mirror_static_c"></td><td width="42%"><b>st_mirror_slab</b>: flavor=<code>slab</code>, state = <code>NORTH</code>, transparent = <code>false</code>, movable = <code>false</code></td><td width="8%"><img src="images/st_mirror_movable_c.png" alt="images/st_mirror_movable_c"></td><td width="42%"><b>st_mirror_slab</b>: flavor=<code>slab</code>, state = <code>NORTH</code>, transparent = <code>false</code>, movable = <code>true</code></td></tr>
26895
<tr><td width="8%"><img src="images/st_mirror_static_c2.png" alt="images/st_mirror_static_c2"></td><td width="42%"><b>st_mirror_slab</b>: flavor=<code>slab</code>, state = <code>EAST</code>, transparent = <code>false</code>, movable = <code>false</code></td><td width="8%"><img src="images/st_mirror_movable_c2.png" alt="images/st_mirror_movable_c2"></td><td width="42%"><b>st_mirror_slab</b>: flavor=<code>slab</code>, state = <code>EAST</code>, transparent = <code>false</code>, movable = <code>true</code></td></tr>
26896
<tr><td width="8%"><img src="images/st_mirror_static_c3.png" alt="images/st_mirror_static_c3"></td><td width="42%"><b>st_mirror_slab</b>: flavor=<code>slab</code>, state = <code>SOUTH</code>, transparent = <code>false</code>, movable = <code>false</code></td><td width="8%"><img src="images/st_mirror_movable_c3.png" alt="images/st_mirror_movable_c3"></td><td width="42%"><b>st_mirror_slab</b>: flavor=<code>slab</code>, state = <code>SOUTH</code>, transparent = <code>false</code>, movable = <code>true</code></td></tr>
26897
<tr><td width="8%"><img src="images/st_mirror_static_c4.png" alt="images/st_mirror_static_c4"></td><td width="42%"><b>st_mirror_slab</b>: flavor=<code>slab</code>, state = <code>WEST</code>, transparent = <code>false</code>, movable = <code>false</code></td><td width="8%"><img src="images/st_mirror_movable_c4.png" alt="images/st_mirror_movable_c4"></td><td width="42%"><b>st_mirror_slab</b>: flavor=<code>slab</code>, state = <code>WEST</code>, transparent = <code>false</code>, movable = <code>true</code></td></tr>
26898
<tr><td width="8%"><img src="images/st_mirror_static_d.png" alt="images/st_mirror_static_d"></td><td width="42%"><b>st_mirror_slab</b>: flavor=<code>slab</code>, state = <code>NORTH</code>, transparent = <code>true</code>, movable = <code>false</code></td><td width="8%"><img src="images/st_mirror_movable_d.png" alt="images/st_mirror_movable_d"></td><td width="42%"><b>st_mirror_slab</b>: flavor=<code>slab</code>, state = <code>NORTH</code>, transparent = <code>true</code>, movable = <code>true</code></td></tr>
26899
<tr><td width="8%"><img src="images/st_mirror_static_d2.png" alt="images/st_mirror_static_d2"></td><td width="42%"><b>st_mirror_slab</b>: flavor=<code>slab</code>, state = <code>EAST</code>, transparent = <code>true</code>, movable = <code>false</code></td><td width="8%"><img src="images/st_mirror_movable_d2.png" alt="images/st_mirror_movable_d2"></td><td width="42%"><b>st_mirror_slab</b>: flavor=<code>slab</code>, state = <code>EAST</code>, transparent = <code>true</code>, movable = <code>true</code></td></tr>
26900
<tr><td width="8%"><img src="images/st_mirror_static_d3.png" alt="images/st_mirror_static_d3"></td><td width="42%"><b>st_mirror_slab</b>: flavor=<code>slab</code>, state = <code>SOUTH</code>, transparent = <code>true</code>, movable = <code>false</code></td><td width="8%"><img src="images/st_mirror_movable_d3.png" alt="images/st_mirror_movable_d3"></td><td width="42%"><b>st_mirror_slab</b>: flavor=<code>slab</code>, state = <code>SOUTH</code>, transparent = <code>true</code>, movable = <code>true</code></td></tr>
26901
<tr><td width="8%"><img src="images/st_mirror_static_d4.png" alt="images/st_mirror_static_d4"></td><td width="42%"><b>st_mirror_slab</b>: flavor=<code>slab</code>, state = <code>WEST</code>, transparent = <code>true</code>, movable = <code>false</code></td><td width="8%"><img src="images/st_mirror_movable_d4.png" alt="images/st_mirror_movable_d4"></td><td width="42%"><b>st_mirror_slab</b>: flavor=<code>slab</code>, state = <code>WEST</code>, transparent = <code>true</code>, movable = <code>true</code></td></tr>
26902
<tr><td width="8%"><img src="images/st_mirror_static_e.png" alt="images/st_mirror_static_e"></td><td width="42%"><b>st_mirror_sheets</b>: flavor=<code>sheets</code>, state = <code>NORTH</code>, transparent = <code>true</code>, movable = <code>false</code></td><td width="8%"><img src="images/st_mirror_movable_e.png" alt="images/st_mirror_movable_e"></td><td width="42%"><b>st_mirror_sheets</b>: flavor=<code>sheets</code>, state = <code>NORTH</code>, transparent = <code>true</code>, movable = <code>true</code></td></tr>
26903
<tr><td width="8%"><img src="images/st_mirror_static_e2.png" alt="images/st_mirror_static_e2"></td><td width="42%"><b>st_mirror_sheets</b>: flavor=<code>sheets</code>, state = <code>EAST</code>, transparent = <code>true</code>, movable = <code>false</code></td><td width="8%"><img src="images/st_mirror_movable_e2.png" alt="images/st_mirror_movable_e2"></td><td width="42%"><b>st_mirror_sheets</b>: flavor=<code>sheets</code>, state = <code>EAST</code>, transparent = <code>true</code>, movable = <code>true</code></td></tr>
26904
<tr><td width="8%"><img src="images/st_mirror_static_e3.png" alt="images/st_mirror_static_e3"></td><td width="42%"><b>st_mirror_sheets</b>: flavor=<code>sheets</code>, state = <code>SOUTH</code>, transparent = <code>true</code>, movable = <code>false</code></td><td width="8%"><img src="images/st_mirror_movable_e3.png" alt="images/st_mirror_movable_e3"></td><td width="42%"><b>st_mirror_sheets</b>: flavor=<code>sheets</code>, state = <code>SOUTH</code>, transparent = <code>true</code>, movable = <code>true</code></td></tr>
26905
<tr><td width="8%"><img src="images/st_mirror_static_e4.png" alt="images/st_mirror_static_e4"></td><td width="42%"><b>st_mirror_sheets</b>: flavor=<code>sheets</code>, state = <code>WEST</code>, transparent = <code>true</code>, movable = <code>false</code></td><td width="8%"><img src="images/st_mirror_movable_e4.png" alt="images/st_mirror_movable_e4"></td><td width="42%"><b>st_mirror_sheets</b>: flavor=<code>sheets</code>, state = <code>WEST</code>, transparent = <code>true</code>, movable = <code>true</code></td></tr>
26912
<a name="st_005fmonoflop"></a>
26913
<table cellpadding="1" cellspacing="1" border="0">
26914
<tr><td valign="middle" align="left">[<a href="#st_005fmirror" title="Previous section in reading order"> < </a>]</td>
26915
<td valign="middle" align="left">[<a href="#st_005foneway" title="Next section in reading order"> > </a>]</td>
26916
<td valign="middle" align="left"> </td>
26917
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
26918
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
26919
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
26920
<td valign="middle" align="left"> </td>
26921
<td valign="middle" align="left"> </td>
26922
<td valign="middle" align="left"> </td>
26923
<td valign="middle" align="left"> </td>
26924
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
26925
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
26926
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
26927
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
26929
<a name="st_005fmonoflop-1"></a>
26930
<h3 class="subsection">9.5.40 st_monoflop</h3>
26931
<a name="index-st_005fmonoflop"></a>
26933
<p>A switch that is triggered by actor hits. It switches instantly to
26934
state ‘<samp>ON</samp>’ and after a given ‘<samp>interval</samp>’ back to state ‘<samp>OFF</samp>’.
26935
Repetitive actor hits will prolong the ‘<samp>ON</samp>’ state until a trailing
26936
‘<samp>interval</samp>’ after the last hit has been expired. A switch similar to
26937
the monoflop is the <a href="#st_005flaserflop">st_laserflop</a>, which is additionally light sensitive.
26939
<p>The single state cycle, called monoflop, can be initiated by ‘<samp>on</samp>’ and
26940
‘<samp>signal</samp>’ messages. But an activated monoflop cannot be stopped by
26941
messages or state setting.
26943
<dl compact="compact">
26944
<dt> <b>Attributes:</b></dt>
26946
<dl compact="compact">
26947
<dt> <b>state</b>, <i>values</i>: <code>ON</code>, <code>OFF</code>; <i>default</i>: <code>OFF</code>; See section <a href="#state">state</a></dt>
26948
<dd><p>Represents the activity state. The state of a new object can be set, but an
26949
active monoflop cannot be set to state ‘<samp>OFF</samp>’.
26951
<dt> <b>interval</b> <i>values</i>: positive number; <i>default</i>: <code>1.8</code></dt>
26952
<dd><p>Number of seconds to return to state ‘<samp>OFF</samp>’ after the last hit.
26958
<dt> <b>Messages:</b></dt>
26960
<dl compact="compact">
26961
<dt> <b>signal</b> See section <a href="#signal">signal</a></dt>
26962
<dd><p>Switches on at value ‘<samp>1</samp>’. A values of ‘<samp>0</samp>’ is ignored.
26964
<dt> <b>on</b> See section <a href="#on">on</a></dt>
26965
<dd><p>Switch the monoflop on like on an actor hit.
26970
<dt> <b>Action:</b> See section <a href="#target">target</a>, See section <a href="#action">action</a></dt>
26971
<dt> <b>Variants:</b></dt>
26972
<dd><dl compact="compact">
26973
<dt> <img src="images/st_monoflop.png" alt="images/st_monoflop"><p> <b>st_monoflop</b>: state = <code>OFF</code>
26975
<dt> <img src="images/st_monoflop_2.png" alt="images/st_monoflop_2"><p> <b>st_monoflop</b>: state = <code>ON</code>
26982
<a name="st_005foneway"></a>
26983
<table cellpadding="1" cellspacing="1" border="0">
26984
<tr><td valign="middle" align="left">[<a href="#st_005fmonoflop" title="Previous section in reading order"> < </a>]</td>
26985
<td valign="middle" align="left">[<a href="#st_005foxyd" title="Next section in reading order"> > </a>]</td>
26986
<td valign="middle" align="left"> </td>
26987
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
26988
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
26989
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
26990
<td valign="middle" align="left"> </td>
26991
<td valign="middle" align="left"> </td>
26992
<td valign="middle" align="left"> </td>
26993
<td valign="middle" align="left"> </td>
26994
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
26995
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
26996
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
26997
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
26999
<a name="st_005foneway-1"></a>
27000
<h3 class="subsection">9.5.41 st_oneway</h3>
27001
<a name="index-st_005foneway"></a>
27003
<p>A stone with one special face, that allows actors just to pass from inside
27004
to outside but not vice versa. The other faces can generally be passed in both
27005
directions. As most times it is more important to be aware of the passages that
27006
are blocked, you may remember that the oneway’s arrow points to the side that
27007
can not be entered.
27009
<p>Three variants of the oneway do exist. A neutral, green-grey colored one that
27010
lets any actor pass according to the above rules, and additionally a black and
27011
a white colored oneway. These last oneways will let pass only marbles of
27012
matching color. All other actors will reflect from all four sides.
27014
<p>All oneways can only be passed by actors moving on the floor. Jumping actors
27015
will bounce on every side.
27017
<p>The ‘<samp>orientation</samp>’ of a neutral oneway can be flipped to the opposite
27018
direction by an actor hitting it with a revealed <a href="#it_005fmagicwand">it_magicwand</a>. All
27019
oneway variations will change their orientation on messages ‘<samp>signal</samp>’ and
27020
‘<samp>flip</samp>’.
27022
<dl compact="compact">
27023
<dt> <b>Attributes:</b></dt>
27025
<dl compact="compact">
27026
<dt> <b>state</b>, <i>values</i>: <code>NORTH</code>, <code>EAST</code>, <code>SOUTH</code>, <code>WEST</code>; <i>default</i>: <code>NORTH</code> See section <a href="#state">state</a></dt>
27027
<dd><p>The orientation of the oneway as shown by the arrow.
27029
<dt> <b>orientation</b>, <i>values</i>: <code>NORTH</code>, <code>EAST</code>, <code>SOUTH</code>, <code>WEST</code>; <i>default</i>: <code>NORTH</code></dt>
27030
<dd><p>The orientation of the oneway as shown by the arrow.
27032
<dt> <b>color</b> <i>values</i>: <code>nil</code>, <code>BLACK</code>, <code>WHITE</code>; <i>default</i>: <code>nil</code></dt>
27033
<dd><p>The color of the oneway that needs to match the actor’s color to allow passing.
27034
The default ‘<samp>nil</samp>’ color is a greengrey oneway that matches all actors,
27035
marbles of any color as well as all other actors.
27040
<dt> <b>Messages:</b></dt>
27042
<dl compact="compact">
27043
<dt> <b>orientate</b>, <i>value type</i>: orientation</dt>
27044
<dd><p>Change the orientation to the given orientation value. The <a href="#st_005ffourswitch">st_fourswitch</a>
27045
provides a compatible action which allows you to set a oneway as
27046
target and this message as action.
27048
<dt> <b>flip</b>,</dt>
27049
<dd><p>Flip the orientation to the opposite direction.
27051
<dt> <b>signal</b> See section <a href="#signal">signal</a></dt>
27052
<dd><p>Flip the orientation to the opposite direction.
27057
<dt> <b>Action:</b> none</dt>
27058
<dt> <b>Variants:</b></dt>
27060
<tr><td width="8%"><img src="images/st_oneway.png" alt="images/st_oneway"></td><td width="42%"><b>st_oneway</b>: orientation = <code>EAST</code></td><td width="8%"><img src="images/st_oneway_2.png" alt="images/st_oneway_2"></td><td width="42%"><b>st_oneway</b>: orientation = <code>NORTH</code></td></tr>
27061
<tr><td width="8%"><img src="images/st_oneway_3.png" alt="images/st_oneway_3"></td><td width="42%"><b>st_oneway</b>: orientation = <code>SOUTH</code></td><td width="8%"><img src="images/st_oneway_4.png" alt="images/st_oneway_4"></td><td width="42%"><b>st_oneway</b>: orientation = <code>WEST</code></td></tr>
27062
<tr><td width="8%"><img src="images/st_oneway_b.png" alt="images/st_oneway_b"></td><td width="42%"><b>st_oneway_black</b>: color = <code>BLACK</code>; orientation = <code>EAST</code></td><td width="8%"><img src="images/st_oneway_b2.png" alt="images/st_oneway_b2"></td><td width="42%"><b>st_oneway_black</b>: color = <code>BLACK</code>; orientation = <code>NORTH</code></td></tr>
27063
<tr><td width="8%"><img src="images/st_oneway_b3.png" alt="images/st_oneway_b3"></td><td width="42%"><b>st_oneway_black</b>: color = <code>BLACK</code>; orientation = <code>SOUTH</code></td><td width="8%"><img src="images/st_oneway_b4.png" alt="images/st_oneway_b4"></td><td width="42%"><b>st_oneway_black</b>: color = <code>BLACK</code>; orientation = <code>WEST</code></td></tr>
27064
<tr><td width="8%"><img src="images/st_oneway_c.png" alt="images/st_oneway_c"></td><td width="42%"><b>st_oneway_white</b>: color = <code>WHITE</code>; orientation = <code>EAST</code></td><td width="8%"><img src="images/st_oneway_c2.png" alt="images/st_oneway_c2"></td><td width="42%"><b>st_oneway_white</b>: color = <code>WHITE</code>; orientation = <code>NORTH</code></td></tr>
27065
<tr><td width="8%"><img src="images/st_oneway_c3.png" alt="images/st_oneway_c3"></td><td width="42%"><b>st_oneway_white</b>: color = <code>WHITE</code>; orientation = <code>SOUTH</code></td><td width="8%"><img src="images/st_oneway_c4.png" alt="images/st_oneway_c4"></td><td width="42%"><b>st_oneway_white</b>: color = <code>WHITE</code>; orientation = <code>WEST</code></td></tr>
27071
<a name="st_005foxyd"></a>
27072
<table cellpadding="1" cellspacing="1" border="0">
27073
<tr><td valign="middle" align="left">[<a href="#st_005foneway" title="Previous section in reading order"> < </a>]</td>
27074
<td valign="middle" align="left">[<a href="#st_005fpassage" title="Next section in reading order"> > </a>]</td>
27075
<td valign="middle" align="left"> </td>
27076
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
27077
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
27078
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
27079
<td valign="middle" align="left"> </td>
27080
<td valign="middle" align="left"> </td>
27081
<td valign="middle" align="left"> </td>
27082
<td valign="middle" align="left"> </td>
27083
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
27084
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
27085
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
27086
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
27088
<a name="st_005foxyd-1"></a>
27089
<h3 class="subsection">9.5.42 st_oxyd</h3>
27090
<a name="index-st_005foxyd"></a>
27092
<p>The main target stones of the game. Opening all regular oxyd stones is the
27093
standard goal of the existing <a href="#Ending-Conditions">Ending Conditions</a>. Regular oxyds stones show
27094
a color spot when opening. Pairs of same colored stones have to be opened in
27095
sequence, otherwise the first one closes again.
27097
<p>Even though most levels make use of just a single pair of each color, there
27098
is no limit on a single color. If you like you can define 3 pairs of blue oxyds
27099
together with 2 yellow pairs. You do this by setting explicit ‘<samp>oxydcolor</samp>’
27100
attributes to the oxyds.
27102
<p>For standard levels the ‘<samp>oxydcolor</samp>’ can be set to its default ‘<samp>OXYD_AUTO</samp>’.
27103
This causes an automatic coloring by pairs of colors in the standard color
27106
<p>There is no limit on the number of used oxyd pairs. There exist 12 different
27107
regular colors for oxyds. But per default just the first 8 colors will be
27108
assigned to ‘<samp>OXYD_AUTO</samp>’ colored oxyds. The colors will repeat from the
27109
9th pair giving the user the possibility to build arbitrary couples within a
27110
single color. With the world attribute <a href="#MaxOxydColor">MaxOxydColor</a> you can lower or
27111
increase this limit. By setting this attribute to ‘<samp>OXYD_GREEN</samp>’ you can
27112
enforce the engine to assign just the first three colors. Be careful in usage
27113
of more than 8 colors as levels can get incredibly difficult.
27115
<p>The number of auto colored oxyds should usually be even as a single remaining
27116
oxyd of a color keeps a level from being solvable. In case of an uneven number
27117
one oxyd stone gets colored to ‘<samp>OXYD_FAKE</samp>’ and does not participate in the
27118
stone opening procedure. But still you can set uneven number of oxyds of a given
27119
color if you do not use auto coloring but use explicit color values. Same thing
27120
happens if you delete a single oxyd during the running game. In both cases
27121
Enigma reacts with an error message by default. You can suppress this exception
27122
by setting <a href="#AllowSingleOxyds">AllowSingleOxyds</a> to <code>true</code>. In this case it is the authors
27123
responsibility to guarantee that the level can be solved.
27125
<p>Usually oxyds are shuffled by a ‘<samp>wo:shuffleOxyd()</samp>’ statement after setting
27126
of all oxyds. All ‘<samp>CLOSED</samp>’ oxyds that are not explicitly excluded by the
27127
‘<samp>noshuffle</samp>’ attribute take place in shuffling. But you can define
27128
arbitrary rules to limit and influence the shuffling process to guarantee
27129
solvability and fairness (see section <a href="#shuffleOxyd">shuffleOxyd</a>).
27131
<p>Oxyds are opened either by an actor hit, an additional laser beam, an
27132
<a href="#st_005fboulder">st_boulder</a> triggering, an <a href="#ot_005fcannonball">ot_cannonball</a> emitted from an
27133
<a href="#st_005fspitter">st_spitter</a> or a message call. A single opened oxyd is in the
27134
state ‘<samp>OPEN</samp>’. If a matching second oxyd is opened both switch to the state
27135
‘<samp>OXYDPAIR</samp>’. Note that this state can be requested, but it can not be set
27138
<p>Single opened oxyds close on a not matching partner oxyd being opened and on
27139
‘<samp>close</samp>’ messages and state setting operations. But oxyds being part of
27140
an opened pair will not be closed this way.
27142
<p>All oxyds including pairs will close on the ‘<samp>closeall</samp>’ messages that is
27143
issued by <a href="#st_005fquake">st_quake</a> and oxyds colored ‘<samp>OXYD_QUAKE</samp>’ on actor hits.
27145
<p>Closed oxyds can have different looks. Their visual representation is defined
27146
by their ‘<samp>flavor</samp>’. Most flavors do hide the oxyd color in the closed state.
27147
Only flavor <code>"e"</code> starts with hidden color, but once opened returns to
27148
a closed image with a peep hole that lets the player still see the color.
27150
<p>For each flavor exists an identical looking simple stone: ‘<samp>st_fake_oxyda</samp>’,
27151
‘<samp>st_fake_oxydb</samp>’, ‘<samp>st_fake_oxydc</samp>’, ‘<samp>st_fake_oxydd</samp>’,
27152
‘<samp>st_fake_oxyde</samp>’ (see section <a href="#st_005ffake">st_fake</a>). If you like an identical looking pseudo
27153
stone that takes part in the oxyd shuffling you can use an oxyd of color
27154
‘<samp>OXYD_FAKE</samp>’.
27156
<p>During the game oxyds can be reshuffled. Just those oxyds that are still closed
27157
will take part in the new shuffle process. Oxyd shuffling rules will still be
27158
guaranteed for these partial in game reshuffles. It can be initiated either
27159
by a ‘<samp>shuffle</samp>’ message that is send to any of the oxyd objects, or by
27160
usage of an oxyd of color ‘<samp>OXYD_BOLD</samp>’. If such a special oxyd is opened,
27161
e.g. by an actor hit, it shuffles all remaining oxyds including itself.
27163
<p>At initialization an oxyd that is exposed to laser light will start in state
27164
‘<samp>CLOSED</samp>’. As it is the gaming target it is a certain exception to the
27165
<a href="#Snapshot-Principle">Snapshot Principle</a>.
27167
<p>An oxyd that is swapped in or out of a laser beam will act on the light change
27168
with proper actions.
27170
<p>Every opened oxyd causes an action call. The action call for an opened oxyd pair
27171
occurs just once when the second oxyd starts opening, whereas the bold and quake
27172
oxyd will perform the action after completion of their task and animation. Thus
27173
you are allowed to kill quake and bold oxyds within their action as long as you
27174
properly set <a href="#safeaction">safeaction</a> to <code>true</code>.
27176
<p>For a replacement of an opened pair of oxyd stones, what can be seen in the
27177
"opal" levels, the action call is not directly suitable, because the second
27178
oxyd did not yet show its matching color. Furtheron you would have to keep track
27179
of the oxyds to find the matching partner for the second oxyd. For this reason
27180
you can directly declare replacements that should be set when an oxyd pair
27181
is opened. The replacement takes place as soon as the second oxyd finishes the
27182
opening animation. Like the <a href="#st_005fsurprise">st_surprise</a> the oxyd allows you to set
27183
the ‘<samp>selection</samp>’ attribute with tokens of strings. Every string needs either
27184
to be an <a href="#Object-Kind">Object Kind</a> or a tile key prefixed by an equal sign ‘<samp>=</samp>’.
27186
<table><tr><td> </td><td><pre class="example">ti["n"] = {"st_nil"}
27187
ti["g"] = {"st_granite"}
27188
ti["s"] = {"st_oxyd_e", selection={"=n", "=g"}}
27189
</pre></td></tr></table>
27191
<p>The first token defines the replacement for the oxyd stone that has been opened
27192
first, the last token defines the replacement for the matching oxyd stone that
27193
has been opened afterwards. In case of a single token both oxyd stones are being
27194
replaced by equivalent stones.
27196
<p>The tile declarations referenced by a key may even contain objects besides
27197
stone. But you should make rare and proper usage of this feature.
27199
<p>The oxyd stone is killed by any replacement stone set to the grid position.
27200
If your selection does not resolve to a stone you may need to add <code>"st_nil"</code>
27201
to the replacement tile declaration.
27203
<dl compact="compact">
27204
<dt> <b>Attributes:</b></dt>
27206
<dl compact="compact">
27207
<dt> <b>state</b>, <i>values</i>: <code>CLOSED</code>, <code>OPEN</code>, <code>OXYDPAIR</code>; <i>default</i>: <code>CLOSED</code> See section <a href="#state">state</a></dt>
27208
<dt> <b>flavor</b>, <i>values</i>: <code>"a"</code>, <code>"b"</code>, <code>"c"</code>, <code>"d"</code>, <code>"e"</code>; <i>default</i>: <code>"b"</code></dt>
27209
<dd><p>The flavor only affects the visual representation of the stone. Mainly the
27210
closed state and the way of opening differ in the following way:
27211
</p><dl compact="compact">
27212
<dt> <code>"a"</code> bronze, pyramid like stone that opens like a flower</dt>
27213
<dt> <code>"b"</code> black, flat stone that opens by a fade animation</dt>
27214
<dt> <code>"c"</code> blue, flat stone that opens by a concentric animation</dt>
27215
<dt> <code>"d"</code> dark blue, pyramid like stone that opens like a flower</dt>
27216
<dt> <code>"e"</code> black, flat stone that provides a peep hole after closing</dt>
27219
<dt> <b>oxydcolor</b>, <i>values</i>: <code>OXYD_AUTO</code>, <code>OXYD_FAKE</code>, <code>OXYD_QUAKE</code>, <code>OXYD_BOLD</code>, <code>OXYD_BLUE</code>, <code>OXYD_RED</code>, <code>OXYD_GREEN</code>, <code>OXYD_YELLOW</code>, <code>OXYD_CYAN</code>, <code>OXYD_PURPLE</code>, <code>OXYD_WHITE</code>, <code>OXYD_BLACK</code>, <code>OXYD_GRAY</code>, <code>OXYD_ORANGE</code>, <code>OXYD_PINE</code>, <code>OXYD_BROWN</code>; <i>default</i>: <code>OXYD_AUTO</code></dt>
27221
<tr><td width="8%"><img src="images/st_oxyd_colordots.png" alt="images/st_oxyd_colordots"></td><td width="17%"><code>OXYD_BLUE</code></td><td width="8%"><img src="images/st_oxyd_colordots_2.png" alt="images/st_oxyd_colordots_2"></td><td width="17%"><code>OXYD_RED</code></td><td width="8%"><img src="images/st_oxyd_colordots_3.png" alt="images/st_oxyd_colordots_3"></td><td width="17%"><code>OXYD_GREEN</code></td><td width="8%"><img src="images/st_oxyd_colordots_4.png" alt="images/st_oxyd_colordots_4"></td><td width="17%"><code>OXYD_YELLOW</code></td></tr>
27222
<tr><td width="8%"><img src="images/st_oxyd_colordots_b.png" alt="images/st_oxyd_colordots_b"></td><td width="17%"><code>OXYD_CYAN</code></td><td width="8%"><img src="images/st_oxyd_colordots_b2.png" alt="images/st_oxyd_colordots_b2"></td><td width="17%"><code>OXYD_PURPLE</code></td><td width="8%"><img src="images/st_oxyd_colordots_b3.png" alt="images/st_oxyd_colordots_b3"></td><td width="17%"><code>OXYD_WHITE</code></td><td width="8%"><img src="images/st_oxyd_colordots_b4.png" alt="images/st_oxyd_colordots_b4"></td><td width="17%"><code>OXYD_BLACK</code></td></tr>
27223
<tr><td width="8%"><img src="images/st_oxyd_colordots_c.png" alt="images/st_oxyd_colordots_c"></td><td width="17%"><code>OXYD_GRAY</code></td><td width="8%"><img src="images/st_oxyd_colordots_c2.png" alt="images/st_oxyd_colordots_c2"></td><td width="17%"><code>OXYD_ORANGE</code></td><td width="8%"><img src="images/st_oxyd_colordots_c3.png" alt="images/st_oxyd_colordots_c3"></td><td width="17%"><code>OXYD_PINE</code></td><td width="8%"><img src="images/st_oxyd_colordots_c4.png" alt="images/st_oxyd_colordots_c4"></td><td width="17%"><code>OXYD_BROWN</code></td></tr>
27224
<tr><td width="8%"><img src="images/st_oxyd_colordots_d3.png" alt="images/st_oxyd_colordots_d3"></td><td width="17%"><code>OXYD_BOLD</code></td><td width="8%"><img src="images/st_oxyd_colordots_d4.png" alt="images/st_oxyd_colordots_d4"></td><td width="17%"><code>OXYD_QUAKE</code></td></tr>
27227
<dt> <b>noshuffle</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
27228
<dt> <b>static</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
27229
<dd><p>Static oxyds are neither swappable nor pullable.
27231
<dt> <b>selection</b>, <i>values</i>: tokens of stone kinds and tile keys; <i>default</i>: no replacement</dt>
27235
<dt> <b>Messages:</b></dt>
27237
<dl compact="compact">
27238
<dt> <b>signal</b> See section <a href="#signal">signal</a></dt>
27239
<dd><p>Try open at value ‘<samp>1</samp>’, and close at values ‘<samp>0</samp>’.
27241
<dt> <b>open</b> See section <a href="#open">open</a></dt>
27242
<dt> <b>close</b> See section <a href="#close">close</a></dt>
27243
<dt> <b>closeall</b></dt>
27244
<dd><p>Closes all opened oxyds if send to any object instance.
27246
<dt> <b>peepall</b></dt>
27247
<dd><p>All closed oxyds of flavor <code>"e"</code> will show a peep hole if this message is
27248
sent to any oxyd object instance.
27250
<dt> <b>shuffle</b></dt>
27251
<dd><p>Reshuffles all closed oxyds if send to any object instance.
27256
<dt> <b>Action:</b> See section <a href="#target">target</a>, See section <a href="#action">action</a></dt>
27257
<dd><p>Whenever a <code>CLOSED</code> oxyd gets opened an action with value <code>true</code> is
27258
performed. The action is performed directly after the oxyds own reaction on being
27259
opened, like checking gaming ending conditions, reshuffling or closing all oxyds,
27260
did finish. Additionally an action with value <code>false</code> is performed after
27261
an oxyd changes from an open state to <code>CLOSED</code>. Note that no action is
27262
performed on state changes form <code>OPEN</code> to <code>OXYDPAIR</code>.
27265
<dt> <b>Variants:</b></dt>
27267
<dl compact="compact">
27268
<dt> <img src="images/st_oxydb.png" alt="images/st_oxydb"><p> <b>st_oxyd</b>: flavor = <code>"b"</code>
27270
<dt> <img src="images/st_oxyda.png" alt="images/st_oxyda"><p> <b>st_oxyd_a</b>: flavor = <code>"a"</code>
27272
<dt> <img src="images/st_oxydb.png" alt="images/st_oxydb"><p> <b>st_oxyd_b</b>: flavor = <code>"b"</code>
27274
<dt> <img src="images/st_oxydc.png" alt="images/st_oxydc"><p> <b>st_oxyd_c</b>: flavor = <code>"c"</code>
27276
<dt> <img src="images/st_oxydd.png" alt="images/st_oxydd"><p> <b>st_oxyd_d</b>: flavor = <code>"d"</code>
27278
<dt> <img src="images/st_oxyde.png" alt="images/st_oxyde"><p> <b>st_oxyd_e</b>: flavor = <code>"e"</code>
27286
<a name="st_005fpassage"></a>
27287
<table cellpadding="1" cellspacing="1" border="0">
27288
<tr><td valign="middle" align="left">[<a href="#st_005foxyd" title="Previous section in reading order"> < </a>]</td>
27289
<td valign="middle" align="left">[<a href="#st_005fplaster" title="Next section in reading order"> > </a>]</td>
27290
<td valign="middle" align="left"> </td>
27291
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
27292
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
27293
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
27294
<td valign="middle" align="left"> </td>
27295
<td valign="middle" align="left"> </td>
27296
<td valign="middle" align="left"> </td>
27297
<td valign="middle" align="left"> </td>
27298
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
27299
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
27300
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
27301
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
27303
<a name="st_005fpassage-1"></a>
27304
<h3 class="subsection">9.5.43 st_passage</h3>
27305
<a name="index-st_005fpassage"></a>
27307
<p>A black or white colored stone of different shapes that lets pass only actors of
27310
<p>The shape is described by the attribute ‘<samp>flavor</samp>’. The shape does not
27311
affect the behaviour, but may be important for the visibility of actors and
27314
<p>Passage stones react on ‘<samp>signal</samp>’ and ‘<samp>toggle</samp>’ messages and
27315
<a href="#st_005fboulder">st_boulder</a> arriving on one of its sides. In both cases the passage stone
27316
recolors to the opposite color. In case of a boulder the recoloring is of a
27317
quite short period, as this stone recolors the passage twice. The period in
27318
between is long enough for an actor to pass or to redirect the boulder before
27319
sending the second recoloring message.
27321
<dl compact="compact">
27322
<dt> <b>Attributes:</b></dt>
27324
<dl compact="compact">
27325
<dt> <b>color</b> <i>values</i>: <code>BLACK</code>, <code>WHITE</code>; <i>default</i>: <code>BLACK</code></dt>
27326
<dd><p>The color of the passage that determines which actors can pass.
27328
<dt> <b>state</b>, <i>values</i>: <code>BLACK</code>, <code>WHITE</code>; <i>default</i>: <code>BLACK</code> See section <a href="#state">state</a></dt>
27329
<dd><p>The state is a synonym for color.
27331
<dt> <b>flavor</b> <i>values</i>: <code>"square"</code>, <code>"slash"</code>, <code>"cross"</code>, <code>"frame"</code>; <i>default</i>: <code>"square"</code></dt>
27332
<dd><p>The passage shape.
27337
<dt> <b>Messages:</b></dt>
27338
<dd><dl compact="compact">
27339
<dt> <b>signal</b> See section <a href="#signal">signal</a></dt>
27340
<dd><p>Switch color of the passage.
27345
<dt> <b>Action:</b> none</dt>
27346
<dt> <b>Variants:</b></dt>
27348
<dl compact="compact">
27349
<dt> <img src="images/st_passage_black_square.png" alt="images/st_passage_black_square"><p> <b>st_passage</b>: color = <code>BLACK</code>, flavor = <code>"square"</code>
27351
<dt> <img src="images/st_passage_black_square.png" alt="images/st_passage_black_square"><p> <b>st_passage_black</b>: color = <code>BLACK</code>, flavor = <code>"square"</code>
27353
<dt> <img src="images/st_passage_black_slash.png" alt="images/st_passage_black_slash"><p> <b>st_passage_black</b>: color = <code>BLACK</code>, flavor = <code>"slash"</code>
27355
<dt> <img src="images/st_passage_black_cross.png" alt="images/st_passage_black_cross"><p> <b>st_passage_black</b>: color = <code>BLACK</code> - flavor = <code>"cross"</code>
27357
<dt> <img src="images/st_passage_black_frame.png" alt="images/st_passage_black_frame"><p> <b>st_passage_black</b>: color = <code>BLACK</code> - flavor = <code>"frame"</code>
27359
<dt> <img src="images/st_passage_white_square.png" alt="images/st_passage_white_square"><p> <b>st_passage_white</b>: color = <code>WHITE</code>, flavor = <code>"square"</code>
27361
<dt> <img src="images/st_passage_white_slash.png" alt="images/st_passage_white_slash"><p> <b>st_passage_white</b>: color = <code>WHITE</code> - flavor = <code>"slash"</code>
27363
<dt> <img src="images/st_passage_white_cross.png" alt="images/st_passage_white_cross"><p> <b>st_passage_white</b>: color = <code>WHITE</code> - flavor = <code>"cross"</code>
27365
<dt> <img src="images/st_passage_white_frame.png" alt="images/st_passage_white_frame"><p> <b>st_passage_white</b>: color = <code>WHITE</code> - flavor = <code>"frame"</code>
27373
<a name="st_005fplaster"></a>
27374
<table cellpadding="1" cellspacing="1" border="0">
27375
<tr><td valign="middle" align="left">[<a href="#st_005fpassage" title="Previous section in reading order"> < </a>]</td>
27376
<td valign="middle" align="left">[<a href="#st_005fplop" title="Next section in reading order"> > </a>]</td>
27377
<td valign="middle" align="left"> </td>
27378
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
27379
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
27380
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
27381
<td valign="middle" align="left"> </td>
27382
<td valign="middle" align="left"> </td>
27383
<td valign="middle" align="left"> </td>
27384
<td valign="middle" align="left"> </td>
27385
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
27386
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
27387
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
27388
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
27390
<a name="st_005fplaster-1"></a>
27391
<h3 class="subsection">9.5.44 st_plaster</h3>
27392
<a name="index-st_005fplaster"></a>
27394
<p>A sculptured gypsum stone that exists in various variations of basic stone
27397
<p>Unlike the similar looking <a href="#st_005fflat">st_flat</a> has no special features and behaves
27398
like a standard stone.
27400
<p>But it provides breakable variants. Like <a href="#st_005fbreak">st_break</a> it is breakable by
27401
laser light, neighboring ignitions like those caused by an exploding
27402
<a href="#it_005fdynamite">it_dynamite</a> on a direct neighboring position or an exploding black
27403
<a href="#it_005fbomb">it_bomb</a> on a diagonal neighboring position. It breaks on actor hits with
27404
a revealed <a href="#it_005fhammer">it_hammer</a>, too. But unlike <a href="#st_005fbreak">st_break</a> it offers a
27405
variant that is breakable and movable at the same time. Of course a possible
27406
break supersedes a possible push condition.
27408
<dl compact="compact">
27409
<dt> <b>Attributes:</b></dt>
27411
<dl compact="compact">
27412
<dt> <b>hollow</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: read only See section <a href="#hollow">hollow</a></dt>
27413
<dt> <b>movable</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: read only See section <a href="#movable">movable</a></dt>
27414
<dt> <b>breakable</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: read only See section <a href="#breakable">breakable</a></dt>
27418
<dt> <b>Messages:</b> none</dt>
27419
<dt> <b>Action:</b> none</dt>
27420
<dt> <b>Variants:</b></dt>
27422
<dl compact="compact">
27423
<dt> <img src="images/st_plaster.png" alt="images/st_plaster"><p> <b>st_plaster</b>:
27425
<dt> <img src="images/st_plaster.png" alt="images/st_plaster"><p> <b>st_plaster_hollow</b>: hollow=<code>true</code>
27427
<dt> <img src="images/st_plaster.png" alt="images/st_plaster"><p> <b>st_plaster_movable</b>: movable=<code>"true"</code>
27429
<dt> <img src="images/st_plaster.png" alt="images/st_plaster"><p> <b>st_plaster_breakable</b>: breakable=<code>"true"</code>
27431
<dt> <img src="images/st_plaster.png" alt="images/st_plaster"><p> <b>st_plaster_movebreakable</b>: movable=<code>"true"</code>, breakable=<code>"true"</code>
27439
<a name="st_005fplop"></a>
27440
<table cellpadding="1" cellspacing="1" border="0">
27441
<tr><td valign="middle" align="left">[<a href="#st_005fplaster" title="Previous section in reading order"> < </a>]</td>
27442
<td valign="middle" align="left">[<a href="#st_005fpolarswitch" title="Next section in reading order"> > </a>]</td>
27443
<td valign="middle" align="left"> </td>
27444
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
27445
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
27446
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
27447
<td valign="middle" align="left"> </td>
27448
<td valign="middle" align="left"> </td>
27449
<td valign="middle" align="left"> </td>
27450
<td valign="middle" align="left"> </td>
27451
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
27452
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
27453
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
27454
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
27456
<a name="st_005fplop-1"></a>
27457
<h3 class="subsection">9.5.45 st_plop</h3>
27458
<a name="index-st_005fplop"></a>
27460
<p>A movable stone that ceases to exist with a plop.
27462
<p>This stone behaves like any other standard movable stone. But unlike other
27463
stones it can cease under some conditions. And if it ceases it does it with
27464
a plop and some sparkles.
27466
<p>Currently there is just one flavor called <code>"slate"</code> according to its
27467
dark blue grey color. It falls and ceases to exist if pushed on <a href="#fl_005fwater">fl_water</a>,
27468
<a href="#fl_005fabyss">fl_abyss</a> or <a href="#fl_005fswamp">fl_swamp</a>. Unlike <a href="#st_005fbox">st_box</a> it does not build a floor.
27470
<dl compact="compact">
27471
<dt> <b>Variants:</b></dt>
27472
<dd><dl compact="compact">
27473
<dt> <img src="images/st_plop_slate.png" alt="images/st_plop_slate"><p> <b>st_plop</b>
27475
<dt> <img src="images/st_plop_slate.png" alt="images/st_plop_slate"><p> <b>st_plop_slate</b>
27482
<a name="st_005fpolarswitch"></a>
27483
<table cellpadding="1" cellspacing="1" border="0">
27484
<tr><td valign="middle" align="left">[<a href="#st_005fplop" title="Previous section in reading order"> < </a>]</td>
27485
<td valign="middle" align="left">[<a href="#st_005fportal" title="Next section in reading order"> > </a>]</td>
27486
<td valign="middle" align="left"> </td>
27487
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
27488
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
27489
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
27490
<td valign="middle" align="left"> </td>
27491
<td valign="middle" align="left"> </td>
27492
<td valign="middle" align="left"> </td>
27493
<td valign="middle" align="left"> </td>
27494
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
27495
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
27496
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
27497
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
27499
<a name="st_005fpolarswitch-1"></a>
27500
<h3 class="subsection">9.5.46 st_polarswitch</h3>
27501
<a name="index-st_005fpolarswitch"></a>
27503
<p>A special on/off switch that toggles its state on actors hitting the stone.
27504
Of course other objects can send messages on actions to make this switch turning.
27506
<p>The main purpose of this switch is its ability to switch crossing laser beams.
27507
While the switch is not transparent in its default off state, it switches to
27508
a transparent on state.
27510
<p>The switch looks like an <a href="#st_005fdarkglass">st_darkglass</a> in its opaque off state and like
27511
an <a href="#st_005flightglass">st_lightglass</a> in its transparent on state. Like other
27512
<a href="#Transparent-Stones">Transparent Stones</a> it is passable for invisible actors.
27514
<dl compact="compact">
27515
<dt> <b>Attributes:</b></dt>
27517
<dl compact="compact">
27518
<dt> <b>state</b>, <i>values</i>: <code>ON</code>, <code>OFF</code>; <i>default</i>: <code>OFF</code> See section <a href="#state">state</a></dt>
27519
<dd><p>An ‘<samp>OFF</samp>’ state is not transparent, an ‘<samp>ON</samp>’ state is transparent.
27524
<dt> <b>Messages:</b></dt>
27526
<dl compact="compact">
27527
<dt> <b>signal</b> See section <a href="#signal">signal</a></dt>
27528
<dd><p>Switches on at value ‘<samp>1</samp>’, and off at values ‘<samp>0</samp>’.
27530
<dt> <b>on</b> See section <a href="#on">on</a></dt>
27531
<dt> <b>off</b> See section <a href="#off">off</a></dt>
27535
<dt> <b>Action:</b> See section <a href="#target">target</a>, See section <a href="#action">action</a></dt>
27536
<dt> <b>Variants:</b></dt>
27537
<dd><dl compact="compact">
27538
<dt> <img src="images/st_darkglass.png" alt="images/st_darkglass"><p> <b>st_polarswitch</b>: state = <code>OFF</code>
27540
<dt> <img src="images/st_lightglass.png" alt="images/st_lightglass"><p> <b>st_polarswitch</b>: state = <code>ON</code>
27547
<a name="st_005fportal"></a>
27548
<table cellpadding="1" cellspacing="1" border="0">
27549
<tr><td valign="middle" align="left">[<a href="#st_005fpolarswitch" title="Previous section in reading order"> < </a>]</td>
27550
<td valign="middle" align="left">[<a href="#st_005fpull" title="Next section in reading order"> > </a>]</td>
27551
<td valign="middle" align="left"> </td>
27552
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
27553
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
27554
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
27555
<td valign="middle" align="left"> </td>
27556
<td valign="middle" align="left"> </td>
27557
<td valign="middle" align="left"> </td>
27558
<td valign="middle" align="left"> </td>
27559
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
27560
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
27561
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
27562
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
27564
<a name="st_005fportal-1"></a>
27565
<h3 class="subsection">9.5.47 st_portal</h3>
27566
<a name="index-st_005fportal"></a>
27568
<p>A gate that is just passable for some special kind of actors. Like
27569
<a href="#st_005fgrate">st_grate</a> it uses metallic frames but it does not let pass actors of all
27572
<p>The portal stone lets just pass actors of the kind given by its attribute
27573
‘<samp>flavor</samp>’.
27575
<p>The flavor <code>"horse"</code> lets just pass an <a href="#ac_005fhorse">ac_horse</a>.
27577
<p>The flavor <code>"pearl"</code> lets just pass an <a href="#ac_005fpearl">ac_pearl</a>.
27580
<dl compact="compact">
27581
<dt> <b>Attributes:</b></dt>
27583
<dl compact="compact">
27584
<dt> <b>flavor</b> <i>values</i>: <code>"horse"</code>, <code>"pearl"</code>; <i>default</i>: <code>"horse"</code>; <i>access</i>: read only</dt>
27588
<dt> <b>Messages:</b> none</dt>
27589
<dt> <b>Action:</b> none</dt>
27590
<dt> <b>Variants:</b></dt>
27591
<dd><dl compact="compact">
27592
<dt> <img src="images/st_portal_horse.png" alt="images/st_portal_horse"><p> <b>st_portal</b>: flavor=<code>"horse"</code>
27594
<dt> <img src="images/st_portal_horse.png" alt="images/st_portal_horse"><p> <b>st_portal_horse</b>: flavor=<code>"horse"</code>
27596
<dt> <img src="images/st_portal_horse.png" alt="images/st_portal_horse"><p> <b>st_portal_pearl</b>: flavor=<code>"pearl"</code>
27604
<a name="st_005fpull"></a>
27605
<table cellpadding="1" cellspacing="1" border="0">
27606
<tr><td valign="middle" align="left">[<a href="#st_005fportal" title="Previous section in reading order"> < </a>]</td>
27607
<td valign="middle" align="left">[<a href="#st_005fpuzzle" title="Next section in reading order"> > </a>]</td>
27608
<td valign="middle" align="left"> </td>
27609
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
27610
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
27611
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
27612
<td valign="middle" align="left"> </td>
27613
<td valign="middle" align="left"> </td>
27614
<td valign="middle" align="left"> </td>
27615
<td valign="middle" align="left"> </td>
27616
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
27617
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
27618
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
27619
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
27621
<a name="st_005fpull-1"></a>
27622
<h3 class="subsection">9.5.48 st_pull</h3>
27623
<a name="index-st_005fpull"></a>
27625
<p>A pull stone changes its position on an initiating impulse into the reverse
27626
direction of the impulse. Thus it can not be pushed like other movable stones.
27627
But when an actor hits a pull stone it acts like being pulled. If another stone
27628
is located on the destination grid, both stones will exchange their positions.
27629
The exchange will also be performed when the pull stones receives a stone impulse
27630
via an <a href="#ot_005fwire">ot_wire</a> or a neighboring <a href="#st_005fstoneimpulse">st_stoneimpulse</a>. A similar stone is
27631
the <a href="#st_005fswap">st_swap</a>, that exchanges with stones in the forward direction of the
27632
initiating impulse.
27634
<p>Actors on the destination grid, including an initiating hitting actor, are
27635
pulled through it, not caged under them. The actors reappear on the old grid
27636
position of the pull stone with their old velocities.
27638
<p>The pull stone is laser light transparent like other glass like stones.
27640
<p>An existing stone exchange partner is not mandatory. But if a stone is located
27641
on the destination position of a pull stone some conditions must be met for a
27642
stone exchange. Connected <a href="#Cluster-Stones">Cluster Stones</a> building a block, <a href="#st_005foxyd">st_oxyd</a>
27643
configured as being ‘<samp>static</samp>’, and another <a href="#st_005fswap">st_swap</a> or pull stone that
27644
is currently engaged in an own stone exchange operation will refuse swapping.
27646
<p>Stone exchanges will not cause item hit transformations as caused by push moved
27647
stones. But the exchanged stones will react on the new floor, e.g. causing
27648
<a href="#st_005fbox">st_box</a> to sink into water.
27650
<p>Further on the exchange is atomic concerning <a href="#it_005ftrigger">it_trigger</a> detection and
27651
laser light transparency. If the exchanged stone is not transparent, the light
27652
will pass on every time slice just on one of the two grids. If the exchanged
27653
stone is floating and does not press <a href="#it_005ftrigger">it_trigger</a>s, the pull stone will
27654
press just one trigger, releasing the trigger of the old position before
27655
pressing the new position’s trigger like any other stone being pushed from one
27658
<dl compact="compact">
27659
<dt> <b>Attributes:</b> none</dt>
27660
<dt> <b>Messages:</b> none</dt>
27661
<dt> <b>Action:</b> none</dt>
27662
<dt> <b>Variants:</b></dt>
27663
<dd><dl compact="compact">
27664
<dt> <img src="images/st_pull.png" alt="images/st_pull"><p> <b>st_pull</b>
27671
<a name="st_005fpuzzle"></a>
27672
<table cellpadding="1" cellspacing="1" border="0">
27673
<tr><td valign="middle" align="left">[<a href="#st_005fpull" title="Previous section in reading order"> < </a>]</td>
27674
<td valign="middle" align="left">[<a href="#st_005fquake" title="Next section in reading order"> > </a>]</td>
27675
<td valign="middle" align="left"> </td>
27676
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
27677
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
27678
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
27679
<td valign="middle" align="left"> </td>
27680
<td valign="middle" align="left"> </td>
27681
<td valign="middle" align="left"> </td>
27682
<td valign="middle" align="left"> </td>
27683
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
27684
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
27685
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
27686
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
27688
<a name="st_005fpuzzle-1"></a>
27689
<h3 class="subsection">9.5.49 st_puzzle</h3>
27690
<a name="index-st_005fpuzzle"></a>
27692
<p>Puzzle stones can construct large clusters of stones, that move together and can
27693
be destroyed together. There are two colors, blue and yellow puzzle stones,
27694
which behave different. Each of these color families again consists of 16
27695
variants that differ in the location of sockets to which neighboring puzzle
27696
stones can be attached. Further on there are hollow variants of all colors and
27699
<p>A cluster is complete as soon as all sockets of all stones are connected to
27700
matching sockets of adjacent puzzle stones of the same color, but independent
27701
of being hollow or solid. A cluster fragment still has at least one stone with
27702
an open stub. A single puzzle stone with no open sockets counts as a complete
27705
<p>Puzzle stone offer manifold features. A complete cluster can explode and
27706
dissolve. Cluster fragments and complete clusters can move and will sink on some
27707
floors building bridges. Rows and columns of adjacent, identical colored puzzle
27708
stones, connected and unconnected ones, can shift rotate thus allowing the
27709
player to rearrange and sort the puzzle.
27711
<p>Blue puzzle stones can be moved as single stones, cluster fragments and
27712
complete clusters by an actor pushing or a stone impulse by <a href="#ot_005fwire">ot_wire</a> or
27713
<a href="#st_005fstoneimpulse">st_stoneimpulse</a>. Of course all new positions of the moving puzzle must be
27714
free of other stones. If all new positions are <a href="#fl_005fwater">fl_water</a> the blue puzzle
27715
will sink and leave an object of the kind given by the global attribute
27716
<a href="#FallenPuzzle">FallenPuzzle</a>. The replacement defaults to <a href="#fl_005fgray">fl_gray</a> building a bridge
27717
over the water. The user can prohibit the sinking of the puzzle into water by
27718
pushing with a revealed <a href="#it_005fmagicwand">it_magicwand</a>. If all new positions are
27719
<a href="#fl_005fabyss">fl_abyss</a> just complete blue clusters will sink and build a bridge. If all
27720
new positions are either abyss or water with at least one abyss floor just
27721
complete blue clusters will sink. Note that puzzles just sink on moves. Moving
27722
a blue fragment besides another fragment on abyss so that both fragments build
27723
a complete cluster will not sink the new cluster. It will sink as a whole on the
27724
next move. If two or more stones of a cluster receive wire impulses originating
27725
from a single event, the whole cluster will move multiple times. But it will
27726
sink on the first opportunity.
27728
<p>Just single unconnected yellow puzzle stones can be moved by actors. They will
27729
neither sink in <a href="#fl_005fwater">fl_water</a> nor fall in <a href="#fl_005fabyss">fl_abyss</a>. Any yellow cluster of
27730
two or more stones can not be moved by actor hits. But on receiving stone
27731
impulses they move like blue puzzles.
27733
<p>All puzzle stone moves do not cause standard item transformations, like
27734
<a href="#it_005fcoin">it_coin</a> value changes, <a href="#it_005fbomb">it_bomb</a> explosions, etc. But they all are not
27735
floating and thus do press <a href="#it_005ftrigger">it_trigger</a>s and close <a href="#fl_005fbridge">fl_bridge</a>s.
27737
<p>Hollow puzzle stones let pass actors, either moving on the floor or jumping,
27738
and laser light without any interaction, too.
27740
<p>Complete clusters can explode and dissolve. A precondition is that the cluster
27741
is isolated from any adjacent, same colored further puzzle stone. Such clusters
27742
explode on an additional new laser beam hitting one of its solid stones. Yellow
27743
ones explode on any actor hit. Blue ones only on actor hits with a revealed
27744
<a href="#it_005fmagicwand">it_magicwand</a>. Additionally complete clusters will explode when an
27745
<a href="#ot_005fcannonball">ot_cannonball</a> emitted by an <a href="#st_005fspitter">st_spitter</a> happens to fall on top of
27746
one of the puzzle stones of the cluster.
27748
<p>Exploding puzzles will stay in place and do not interact any more. The exploding
27749
stones are lethal for actors hitting them, but an actor can start an explosion
27750
beneath a hollow puzzle stone and stay beneath this hollow exploding stone
27751
without harm until the puzzle dissolved.
27753
<p>Puzzles can be rearranged by column and row rotations. Blue puzzle react just
27754
on actor hits with a revealed wand, yellow ones on any actor hit. All colors
27755
do rotate on laser light hits. All rotations can originate only on a solid
27756
puzzle stone. All subsequent puzzle stones of the same color will shift away
27757
with the last puzzle of the line returning to the origin. This operation is
27758
called <code>"push_rotate"</code> and can be initiated by a message, too.
27760
<p>In case of actor hits possible explosions precede moves, which precede rotation
27761
operations. Thus you need to touch a blue puzzle row carefully with a revealed
27762
wand if the row is part of a movable cluster fragment. If the speed is
27763
sufficient for a hit operation, the cluster will move instead of an expected
27764
row rotation. An actor hit on a blue puzzle that did neither cause an explosion
27765
or a rotation will be propagated by an <a href="#ot_005fwire">ot_wire</a> connected to this puzzle
27766
stone. Hits on yellow puzzle stones will never propagate to <a href="#ot_005fwire">ot_wire</a>
27767
connected other stones.
27769
<p>Like <a href="#Cluster-Stones">Cluster Stones</a> puzzles accept a ‘<samp>cluster</samp>’ attribute. A new set
27770
puzzle stone autoconnects to adjacent, same colored puzzle stones belonging to
27771
the same cluster. But once set the puzzle stone will of course not change its
27772
connections on subsequent moves or rotations. But as a level author you need to
27773
think of possible puzzle stones pushed to positions neighboring an area on which
27774
a puzzle might be set during the running game. The new set stones may
27775
autoconnect to such unexpected stones if the color and cluster number fits.
27777
<p>The resolver <a href="#res_002epuzzle">res.puzzle</a> provides easy methods to set and shuffle puzzles.
27778
The attributes ‘<samp>algorithm</samp>’ and ‘<samp>intensity</samp>’ are used by the resolver
27781
<p>If you need to shuffle a puzzle of your own, you can make use of the messages
27782
‘<samp>get_adjacents</samp>’ which returns the group of color matching, adjacent puzzle
27783
stones, and ‘<samp>pull_rotate</samp>’ which is the exact inversion of a push rotation.
27785
<dl compact="compact">
27786
<dt> <b>Attributes:</b></dt>
27787
<dt> <b>color</b> <i>values</i>: <code>BLUE</code>, <code>YELLOW</code>; <i>default</i>: <code>BLUE</code></dt>
27788
<dd><p>The color of the puzzle stubs. Adjacent puzzle stones of matching colors and
27789
connections cluster to fragments.
27792
<dt> <b>connections</b>, <i>values</i>: string; <i>default</i>: <code>nil</code></dt>
27793
<dd><p>Describes the connection stubs of the puzzle stone. The string is a substring
27794
of <code>"nesw"</code> listing the stubs. The sequence of the sides, north, east,
27795
south, west, is guaranteed on read access but arbitrary on write access.
27798
<dt> <b>cluster</b> <i>values</i>: number; <i>default</i>: <code>nil</code></dt>
27799
<dd><p>If set to a number all adjacent puzzle stones of the same color with
27800
the identical cluster number will build a cluster. This attribute supersedes
27801
any explicitly given connection description.
27804
<dt> <b>hollow</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
27805
<dd><p>A hollow puzzle stone has a hole in its middle and allows actors to pass beneath.
27808
<dt> <b>algorithm</b>, <i>values</i>: string; <i>default</i>: <code>nil</code></dt>
27809
<dt> <b>intensity</b> <i>values</i>: number; <i>default</i>: <code>3</code></dt>
27810
<dt> <b>Messages:</b></dt>
27811
<dd><dl compact="compact">
27812
<dt> <b>get_adjacents</b></dt>
27813
<dd><p>Returns the huddle of all adjacent puzzle stones of same color independent of
27814
being connected or not. The huddle is returned as a group.
27816
<dt> <b>pull_rotate</b>, <i>value type</i>: orientation</dt>
27817
<dd><p>Perform a reverse ‘<samp>push_rotate</samp>’ from this puzzle stones with the line
27818
of puzzle stone into the given direction.
27820
<dt> <b>push_rotate</b>, <i>value type</i>: orientation</dt>
27821
<dd><p>Perform a line rotation as described above from this puzzle stones with the line
27822
of puzzle stone into the given direction.
27828
<dt> <b>Action:</b> none</dt>
27829
<dt> <b>Variants:</b></dt>
27832
<tr><td width="8%"><img src="images/st_puzzle_blue.png" alt="images/st_puzzle_blue"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>""</code>, hollow = <code>false</code></td><td width="8%"><img src="images/st_puzzle_blue_2.png" alt="images/st_puzzle_blue_2"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>"w"</code>, hollow = <code>false</code></td></tr>
27833
<tr><td width="8%"><img src="images/st_puzzle_blue_3.png" alt="images/st_puzzle_blue_3"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>"s"</code>, hollow = <code>false</code></td><td width="8%"><img src="images/st_puzzle_blue_4.png" alt="images/st_puzzle_blue_4"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>"sw"</code>, hollow = <code>false</code></td></tr>
27834
<tr><td width="8%"><img src="images/st_puzzle_blue_b.png" alt="images/st_puzzle_blue_b"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>"e"</code>, hollow = <code>false</code></td><td width="8%"><img src="images/st_puzzle_blue_b2.png" alt="images/st_puzzle_blue_b2"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>"ew"</code>, hollow = <code>false</code></td></tr>
27835
<tr><td width="8%"><img src="images/st_puzzle_blue_b3.png" alt="images/st_puzzle_blue_b3"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>"es"</code>, hollow = <code>false</code></td><td width="8%"><img src="images/st_puzzle_blue_b4.png" alt="images/st_puzzle_blue_b4"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>"esw"</code>, hollow = <code>false</code></td></tr>
27836
<tr><td width="8%"><img src="images/st_puzzle_blue_c.png" alt="images/st_puzzle_blue_c"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>"n"</code>, hollow = <code>false</code></td><td width="8%"><img src="images/st_puzzle_blue_c2.png" alt="images/st_puzzle_blue_c2"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>"nw"</code>, hollow = <code>false</code></td></tr>
27837
<tr><td width="8%"><img src="images/st_puzzle_blue_c3.png" alt="images/st_puzzle_blue_c3"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>"ns"</code>, hollow = <code>false</code></td><td width="8%"><img src="images/st_puzzle_blue_c4.png" alt="images/st_puzzle_blue_c4"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>"nsw"</code>, hollow = <code>false</code></td></tr>
27838
<tr><td width="8%"><img src="images/st_puzzle_blue_d.png" alt="images/st_puzzle_blue_d"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>"ne"</code>, hollow = <code>false</code></td><td width="8%"><img src="images/st_puzzle_blue_d2.png" alt="images/st_puzzle_blue_d2"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>"new"</code>, hollow = <code>false</code></td></tr>
27839
<tr><td width="8%"><img src="images/st_puzzle_blue_d3.png" alt="images/st_puzzle_blue_d3"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>"nes"</code>, hollow = <code>false</code></td><td width="8%"><img src="images/st_puzzle_blue_d4.png" alt="images/st_puzzle_blue_d4"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>"nesw"</code>, hollow = <code>false</code></td></tr>
27840
<tr><td width="8%"><img src="images/st_puzzle_blue_hollow.png" alt="images/st_puzzle_blue_hollow"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>""</code>, hollow = <code>true</code></td><td width="8%"><img src="images/st_puzzle_blue_hollow_2.png" alt="images/st_puzzle_blue_hollow_2"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>"w"</code>, hollow = <code>true</code></td></tr>
27841
<tr><td width="8%"><img src="images/st_puzzle_blue_hollow_3.png" alt="images/st_puzzle_blue_hollow_3"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>"s"</code>, hollow = <code>true</code></td><td width="8%"><img src="images/st_puzzle_blue_hollow_4.png" alt="images/st_puzzle_blue_hollow_4"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>"sw"</code>, hollow = <code>true</code></td></tr>
27842
<tr><td width="8%"><img src="images/st_puzzle_blue_hollow_b.png" alt="images/st_puzzle_blue_hollow_b"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>"e"</code>, hollow = <code>true</code></td><td width="8%"><img src="images/st_puzzle_blue_hollow_b2.png" alt="images/st_puzzle_blue_hollow_b2"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>"ew"</code>, hollow = <code>true</code></td></tr>
27843
<tr><td width="8%"><img src="images/st_puzzle_blue_hollow_b3.png" alt="images/st_puzzle_blue_hollow_b3"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>"es"</code>, hollow = <code>true</code></td><td width="8%"><img src="images/st_puzzle_blue_hollow_b4.png" alt="images/st_puzzle_blue_hollow_b4"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>"esw"</code>, hollow = <code>true</code></td></tr>
27844
<tr><td width="8%"><img src="images/st_puzzle_blue_hollow_c.png" alt="images/st_puzzle_blue_hollow_c"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>"n"</code>, hollow = <code>true</code></td><td width="8%"><img src="images/st_puzzle_blue_hollow_c2.png" alt="images/st_puzzle_blue_hollow_c2"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>"nw"</code>, hollow = <code>true</code></td></tr>
27845
<tr><td width="8%"><img src="images/st_puzzle_blue_hollow_c3.png" alt="images/st_puzzle_blue_hollow_c3"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>"ns"</code>, hollow = <code>true</code></td><td width="8%"><img src="images/st_puzzle_blue_hollow_c4.png" alt="images/st_puzzle_blue_hollow_c4"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>"nsw"</code>, hollow = <code>true</code></td></tr>
27846
<tr><td width="8%"><img src="images/st_puzzle_blue_hollow_d.png" alt="images/st_puzzle_blue_hollow_d"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>"ne"</code>, hollow = <code>true</code></td><td width="8%"><img src="images/st_puzzle_blue_hollow_d2.png" alt="images/st_puzzle_blue_hollow_d2"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>"new"</code>, hollow = <code>true</code></td></tr>
27847
<tr><td width="8%"><img src="images/st_puzzle_blue_hollow_d3.png" alt="images/st_puzzle_blue_hollow_d3"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>"nes"</code>, hollow = <code>true</code></td><td width="8%"><img src="images/st_puzzle_blue_hollow_d4.png" alt="images/st_puzzle_blue_hollow_d4"></td><td width="42%"><b>st_puzzle_blue</b>: color = <code>BLUE</code>, connections = <code>"nesw"</code>, hollow = <code>true</code></td></tr>
27848
<tr><td width="8%"><img src="images/st_puzzle_yellow.png" alt="images/st_puzzle_yellow"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>""</code>, hollow = <code>false</code></td><td width="8%"><img src="images/st_puzzle_yellow_2.png" alt="images/st_puzzle_yellow_2"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>"w"</code>, hollow = <code>false</code></td></tr>
27849
<tr><td width="8%"><img src="images/st_puzzle_yellow_3.png" alt="images/st_puzzle_yellow_3"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>"s"</code>, hollow = <code>false</code></td><td width="8%"><img src="images/st_puzzle_yellow_4.png" alt="images/st_puzzle_yellow_4"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>"sw"</code>, hollow = <code>false</code></td></tr>
27850
<tr><td width="8%"><img src="images/st_puzzle_yellow_b.png" alt="images/st_puzzle_yellow_b"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>"e"</code>, hollow = <code>false</code></td><td width="8%"><img src="images/st_puzzle_yellow_b2.png" alt="images/st_puzzle_yellow_b2"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>"ew"</code>, hollow = <code>false</code></td></tr>
27851
<tr><td width="8%"><img src="images/st_puzzle_yellow_b3.png" alt="images/st_puzzle_yellow_b3"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>"es"</code>, hollow = <code>false</code></td><td width="8%"><img src="images/st_puzzle_yellow_b4.png" alt="images/st_puzzle_yellow_b4"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>"esw"</code>, hollow = <code>false</code></td></tr>
27852
<tr><td width="8%"><img src="images/st_puzzle_yellow_c.png" alt="images/st_puzzle_yellow_c"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>"n"</code>, hollow = <code>false</code></td><td width="8%"><img src="images/st_puzzle_yellow_c2.png" alt="images/st_puzzle_yellow_c2"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>"nw"</code>, hollow = <code>false</code></td></tr>
27853
<tr><td width="8%"><img src="images/st_puzzle_yellow_c3.png" alt="images/st_puzzle_yellow_c3"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>"ns"</code>, hollow = <code>false</code></td><td width="8%"><img src="images/st_puzzle_yellow_c4.png" alt="images/st_puzzle_yellow_c4"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>"nsw"</code>, hollow = <code>false</code></td></tr>
27854
<tr><td width="8%"><img src="images/st_puzzle_yellow_d.png" alt="images/st_puzzle_yellow_d"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>"ne"</code>, hollow = <code>false</code></td><td width="8%"><img src="images/st_puzzle_yellow_d2.png" alt="images/st_puzzle_yellow_d2"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>"new"</code>, hollow = <code>false</code></td></tr>
27855
<tr><td width="8%"><img src="images/st_puzzle_yellow_d3.png" alt="images/st_puzzle_yellow_d3"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>"nes"</code>, hollow = <code>false</code></td><td width="8%"><img src="images/st_puzzle_yellow_d4.png" alt="images/st_puzzle_yellow_d4"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>"nesw"</code>, hollow = <code>false</code></td></tr>
27856
<tr><td width="8%"><img src="images/st_puzzle_yellow_hollow.png" alt="images/st_puzzle_yellow_hollow"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>""</code>, hollow = <code>true</code></td><td width="8%"><img src="images/st_puzzle_yellow_hollow_2.png" alt="images/st_puzzle_yellow_hollow_2"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>"w"</code>, hollow = <code>true</code></td></tr>
27857
<tr><td width="8%"><img src="images/st_puzzle_yellow_hollow_3.png" alt="images/st_puzzle_yellow_hollow_3"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>"s"</code>, hollow = <code>true</code></td><td width="8%"><img src="images/st_puzzle_yellow_hollow_4.png" alt="images/st_puzzle_yellow_hollow_4"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>"sw"</code>, hollow = <code>true</code></td></tr>
27858
<tr><td width="8%"><img src="images/st_puzzle_yellow_hollow_b.png" alt="images/st_puzzle_yellow_hollow_b"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>"e"</code>, hollow = <code>true</code></td><td width="8%"><img src="images/st_puzzle_yellow_hollow_b2.png" alt="images/st_puzzle_yellow_hollow_b2"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>"ew"</code>, hollow = <code>true</code></td></tr>
27859
<tr><td width="8%"><img src="images/st_puzzle_yellow_hollow_b3.png" alt="images/st_puzzle_yellow_hollow_b3"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>"es"</code>, hollow = <code>true</code></td><td width="8%"><img src="images/st_puzzle_yellow_hollow_b4.png" alt="images/st_puzzle_yellow_hollow_b4"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>"esw"</code>, hollow = <code>true</code></td></tr>
27860
<tr><td width="8%"><img src="images/st_puzzle_yellow_hollow_c.png" alt="images/st_puzzle_yellow_hollow_c"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>"n"</code>, hollow = <code>true</code></td><td width="8%"><img src="images/st_puzzle_yellow_hollow_c2.png" alt="images/st_puzzle_yellow_hollow_c2"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>"nw"</code>, hollow = <code>true</code></td></tr>
27861
<tr><td width="8%"><img src="images/st_puzzle_yellow_hollow_c3.png" alt="images/st_puzzle_yellow_hollow_c3"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>"ns"</code>, hollow = <code>true</code></td><td width="8%"><img src="images/st_puzzle_yellow_hollow_c4.png" alt="images/st_puzzle_yellow_hollow_c4"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>"nsw"</code>, hollow = <code>true</code></td></tr>
27862
<tr><td width="8%"><img src="images/st_puzzle_yellow_hollow_d.png" alt="images/st_puzzle_yellow_hollow_d"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>"ne"</code>, hollow = <code>true</code></td><td width="8%"><img src="images/st_puzzle_yellow_hollow_d2.png" alt="images/st_puzzle_yellow_hollow_d2"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>"new"</code>, hollow = <code>true</code></td></tr>
27863
<tr><td width="8%"><img src="images/st_puzzle_yellow_hollow_d3.png" alt="images/st_puzzle_yellow_hollow_d3"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>"nes"</code>, hollow = <code>true</code></td><td width="8%"><img src="images/st_puzzle_yellow_hollow_d4.png" alt="images/st_puzzle_yellow_hollow_d4"></td><td width="42%"><b>st_puzzle_yellow</b>: color = <code>YELLOW</code>, connections = <code>"nesw"</code>, hollow = <code>true</code></td></tr>
27870
<a name="st_005fquake"></a>
27871
<table cellpadding="1" cellspacing="1" border="0">
27872
<tr><td valign="middle" align="left">[<a href="#st_005fpuzzle" title="Previous section in reading order"> < </a>]</td>
27873
<td valign="middle" align="left">[<a href="#st_005frawglass" title="Next section in reading order"> > </a>]</td>
27874
<td valign="middle" align="left"> </td>
27875
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
27876
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
27877
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
27878
<td valign="middle" align="left"> </td>
27879
<td valign="middle" align="left"> </td>
27880
<td valign="middle" align="left"> </td>
27881
<td valign="middle" align="left"> </td>
27882
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
27883
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
27884
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
27885
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
27887
<a name="st_005fquake-1"></a>
27888
<h3 class="subsection">9.5.50 st_quake</h3>
27889
<a name="index-st_005fquake"></a>
27891
<p>This stone looks like an <a href="#st_005foxyd">st_oxyd</a> of flavor <code>"b"</code>, but it has the
27892
unpleasant habit of quaking when being activated. Unfortunately this closes all
27893
open <a href="#st_005foxyd">st_oxyd</a>s.
27895
<p>The stone gets activated on an actor hit, on <a href="#st_005fboulder">st_boulder</a>s hit and on its
27898
<p>The player can destroy this troublemaker with an actor that reveals an
27899
<a href="#it_005fhammer">it_hammer</a>, by directing a laser light onto the quake stone or by a nearby
27900
explosion or ignition.
27902
<p>Of course you can activate and destroy it by messages and state set operations,
27905
<dl compact="compact">
27906
<dt> <b>Attributes:</b></dt>
27908
<dl compact="compact">
27909
<dt> <b>state</b>, <i>values</i>: <code>IDLE</code>, <code>ACTIVE</code>, <code>BREAKING</code>; <i>default</i>: <code>IDLE</code>: See section <a href="#state">state</a></dt>
27910
<dd><p>Current state of the quake stone. You can just change the state into legal
27911
follow up states. A breaking state is final.
27916
<dt> <b>Messages:</b></dt>
27918
<dl compact="compact">
27919
<dt> <b>toggle</b> See section <a href="#toggle">toggle</a></dt>
27920
<dd><p>Toggles stone from ‘<samp>IDLE</samp>’ to ‘<samp>ACTIVE</samp>’
27922
<dt> <b>signal</b> See section <a href="#signal">signal</a></dt>
27923
<dd><p>Toggles stone from ‘<samp>IDLE</samp>’ to ‘<samp>ACTIVE</samp>’
27925
<dt> <b>ignite</b></dt>
27926
<dd><p>Toggles stone to ‘<samp>BREAKING</samp>’
27931
<dt> <b>Action:</b> none</dt>
27933
<dl compact="compact">
27934
<dt> <img src="images/st_oxydb.png" alt="images/st_oxydb"><p> <b>st_quake</b>: state = <code>IDLE</code>
27936
<dt> <img src="images/st_quake_3.png" alt="images/st_quake_3"><p> <b>st_quake</b>: state = <code>ACTIVE</code>
27938
<dt> <img src="images/st_quake_break.png" alt="images/st_quake_break"><p> <b>st_quake</b>: state = <code>BREAKING</code>
27945
<a name="st_005frawglass"></a>
27946
<table cellpadding="1" cellspacing="1" border="0">
27947
<tr><td valign="middle" align="left">[<a href="#st_005fquake" title="Previous section in reading order"> < </a>]</td>
27948
<td valign="middle" align="left">[<a href="#st_005fredfiber" title="Next section in reading order"> > </a>]</td>
27949
<td valign="middle" align="left"> </td>
27950
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
27951
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
27952
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
27953
<td valign="middle" align="left"> </td>
27954
<td valign="middle" align="left"> </td>
27955
<td valign="middle" align="left"> </td>
27956
<td valign="middle" align="left"> </td>
27957
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
27958
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
27959
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
27960
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
27962
<a name="st_005frawglass-1"></a>
27963
<h3 class="subsection">9.5.51 st_rawglass</h3>
27964
<a name="index-st_005frawglass"></a>
27966
<p>A block of raw glass. It exists in static and movable variants and is by its
27967
very nature transparent to laser light. Like other <a href="#Transparent-Stones">Transparent Stones</a> it
27968
is passable for invisible actors.
27970
<p>This stone comes in a second texture variant that looks like being composed
27971
of 4 small rawglasses. This ‘<samp>quad</samp>’ variant is not movable.
27973
<dl compact="compact">
27974
<dt> <b>Attributes:</b></dt>
27976
<dl compact="compact">
27977
<dt> <b>movable</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code>; <i>access</i>: read only See section <a href="#movable">movable</a></dt>
27981
<dt> <b>Messages:</b> none</dt>
27982
<dt> <b>Variants:</b></dt>
27984
<dl compact="compact">
27985
<dt> <img src="images/st_rawglass.png" alt="images/st_rawglass"><p> <b>st_rawglass</b>: movable = <code>false</code>
27987
<dt> <img src="images/st_rawglass_quad.png" alt="images/st_rawglass_quad"><p> <b>st_rawglass_quad</b>: movable = <code>false</code>
27989
<dt> <img src="images/st_rawglass.png" alt="images/st_rawglass"><p> <b>st_rawglass_movable</b>: movable = <code>true</code>
27997
<a name="st_005fredfiber"></a>
27998
<table cellpadding="1" cellspacing="1" border="0">
27999
<tr><td valign="middle" align="left">[<a href="#st_005frawglass" title="Previous section in reading order"> < </a>]</td>
28000
<td valign="middle" align="left">[<a href="#st_005frotator" title="Next section in reading order"> > </a>]</td>
28001
<td valign="middle" align="left"> </td>
28002
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
28003
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
28004
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
28005
<td valign="middle" align="left"> </td>
28006
<td valign="middle" align="left"> </td>
28007
<td valign="middle" align="left"> </td>
28008
<td valign="middle" align="left"> </td>
28009
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
28010
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
28011
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
28012
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
28014
<a name="st_005fredfiber-1"></a>
28015
<h3 class="subsection">9.5.52 st_redfiber</h3>
28016
<a name="index-st_005fredfiber"></a>
28018
<p>A metal frame with woven red fiber. Like other <a href="#Transparent-Stones">Transparent Stones</a> it is
28019
passable transparent to laser light. But the redfiber is not passable to any
28022
<dl compact="compact">
28023
<dt> <b>Attributes:</b> none</dt>
28024
<dt> <b>Messages:</b> none</dt>
28025
<dt> <b>Variants:</b></dt>
28027
<dl compact="compact">
28028
<dt> <img src="images/st_redfiber.png" alt="images/st_redfiber"><p> <b>st_redfiber</b>
28036
<a name="st_005frotator"></a>
28037
<table cellpadding="1" cellspacing="1" border="0">
28038
<tr><td valign="middle" align="left">[<a href="#st_005fredfiber" title="Previous section in reading order"> < </a>]</td>
28039
<td valign="middle" align="left">[<a href="#st_005frubberband" title="Next section in reading order"> > </a>]</td>
28040
<td valign="middle" align="left"> </td>
28041
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
28042
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
28043
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
28044
<td valign="middle" align="left"> </td>
28045
<td valign="middle" align="left"> </td>
28046
<td valign="middle" align="left"> </td>
28047
<td valign="middle" align="left"> </td>
28048
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
28049
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
28050
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
28051
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
28053
<a name="st_005frotator-1"></a>
28054
<h3 class="subsection">9.5.53 st_rotator</h3>
28055
<a name="index-st_005frotator"></a>
28057
<p>Rotators send impulses to neighboring stones, thus pushing them in the direction
28058
given by the rotation. <a href="#st_005fboulder">st_boulder</a> additionally change their orientation to
28059
the one they are pushed to.
28061
<p>Rotators can either rotate in clockwise or counterclockwise direction. They can
28062
be movable or unmovable.
28064
<p>The rotator changes its rotation direction when hit by an actor with a revealed
28065
<a href="#it_005fwrench">it_wrench</a> and by laser beams. Every additional laser beam causes a change
28066
in the rotation direction.
28068
<dl compact="compact">
28069
<dt> <b>Attributes:</b></dt>
28071
<dl compact="compact">
28072
<dt> <b>state</b>, <i>values</i>: <code>CW</code>, <code>CCW</code>; <i>default</i>: <code>CW</code> See section <a href="#state">state</a></dt>
28073
<dd><p>The rotation direction - ‘<samp>CW</samp>’ for clockwise as default, or ‘<samp>CCW</samp>’ for
28076
<dt> <b>counterclock</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
28077
<dd><p>The standard rotation direction is clockwise. Use this attribute to revert the
28080
<dt> <b>movable</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code> See section <a href="#movable">movable</a></dt>
28084
<dt> <b>Messages:</b></dt>
28086
<dl compact="compact">
28087
<dt> <b>toggle</b> See section <a href="#toggle">toggle</a></dt>
28088
<dd><p>Switches the rotation direction.
28093
<dt> <b>Variants:</b></dt>
28094
<dd><dl compact="compact">
28095
<dt> <img src="images/st_rotator_cw.png" alt="images/st_rotator_cw"><p> <b>st_rotator</b>: state = <code>CW</code>
28097
<dt> <img src="images/st_rotator_cw.png" alt="images/st_rotator_cw"><p> <b>st_rotator_cw</b>: state = <code>CW</code>
28099
<dt> <img src="images/st_rotator_ccw.png" alt="images/st_rotator_ccw"><p> <b>st_rotator_ccw</b>: state = <code>CCW</code>
28106
<a name="st_005frubberband"></a>
28107
<table cellpadding="1" cellspacing="1" border="0">
28108
<tr><td valign="middle" align="left">[<a href="#st_005frotator" title="Previous section in reading order"> < </a>]</td>
28109
<td valign="middle" align="left">[<a href="#st_005fscissors" title="Next section in reading order"> > </a>]</td>
28110
<td valign="middle" align="left"> </td>
28111
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
28112
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
28113
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
28114
<td valign="middle" align="left"> </td>
28115
<td valign="middle" align="left"> </td>
28116
<td valign="middle" align="left"> </td>
28117
<td valign="middle" align="left"> </td>
28118
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
28119
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
28120
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
28121
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
28123
<a name="st_005frubberband-1"></a>
28124
<h3 class="subsection">9.5.54 st_rubberband</h3>
28125
<a name="index-st_005frubberband"></a>
28127
<p>A rubberband stone attaches a new <a href="#ot_005frubberband">ot_rubberband</a> between actors hitting it
28130
<p>No rubberband is attached if the hitting actor is already connected to this
28133
<p>If the attribute ‘<samp>scissor</samp>’ is ‘<samp>true</samp>’, all rubberbands connected to
28134
the hitting actor are removed prior to attaching the direct new connection.
28136
<p>The rubberband stone is static by default. But an actor with a revealed
28137
<a href="#it_005fmagicwand">it_magicwand</a> can move it by hitting it. As the actor will get connected by
28138
an <a href="#ot_005frubberband">ot_rubberband</a> at the same time you will usually place an
28139
<a href="#st_005fscissors">st_scissors</a> near the target place as an opportunity for the marble to free
28140
itself again from the rubberband stone.
28142
<dl compact="compact">
28143
<dt> <b>Attributes:</b></dt>
28145
<dl compact="compact">
28146
<dt> <b>strength</b> <i>values</i>: number; <i>default</i>: <code>10.0</code></dt>
28147
<dd><p>The force strength.
28149
<dt> <b>length</b> <i>values</i>: positive number or <code>AUTOLENGTH</code>; <i>default</i>: <code>1.0</code></dt>
28150
<dd><p>The natural length above which forces are applied.
28152
<dt> <b>threshold</b> <i>values</i>: positive number or zero; <i>default</i>: <code>0.0</code></dt>
28153
<dd><p>The length smaller than the natural length below which inverted forces are applied.
28155
<dt> <b>min</b> <i>values</i>: positive number or zero; <i>default</i>: <code>0.0</code></dt>
28156
<dd><p>The minimum length at which actors bounce.
28158
<dt> <b>max</b> <i>values</i>: positive number or zero; <i>default</i>: <code>0.0</code></dt>
28159
<dd><p>The maximum length at which actors bounce.
28161
<dt> <b>scissor</b>, <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code></dt>
28162
<dd><p>Rubberband cutting behaviour on connection.
28167
<dt> <b>Messages:</b> none</dt>
28168
<dt> <b>Variants:</b></dt>
28169
<dd><dl compact="compact">
28170
<dt> <img src="images/st_rubberband.png" alt="images/st_rubberband"><p> <b>st_rubberband</b>
28177
<a name="st_005fscissors"></a>
28178
<table cellpadding="1" cellspacing="1" border="0">
28179
<tr><td valign="middle" align="left">[<a href="#st_005frubberband" title="Previous section in reading order"> < </a>]</td>
28180
<td valign="middle" align="left">[<a href="#st_005fshogun" title="Next section in reading order"> > </a>]</td>
28181
<td valign="middle" align="left"> </td>
28182
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
28183
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
28184
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
28185
<td valign="middle" align="left"> </td>
28186
<td valign="middle" align="left"> </td>
28187
<td valign="middle" align="left"> </td>
28188
<td valign="middle" align="left"> </td>
28189
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
28190
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
28191
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
28192
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
28194
<a name="st_005fscissors-1"></a>
28195
<h3 class="subsection">9.5.55 st_scissors</h3>
28196
<a name="index-st_005fscissors"></a>
28198
<p>This stone cuts all <a href="#ot_005frubberband">ot_rubberband</a>s attached to an actor that touches it.
28199
When at least one rubber band is cut, it performs the action given in the
28200
action/target-pair.
28202
<dl compact="compact">
28203
<dt> <b>Attributes:</b> none</dt>
28204
<dt> <b>Messages:</b> none</dt>
28205
<dt> <b>Action:</b> See section <a href="#target">target</a>, See section <a href="#action">action</a></dt>
28206
<dd><p>Sends an action message with value ‘<samp>true</samp>’ on freeing an actor from its
28210
<dt> <b>Variants:</b></dt>
28211
<dd><dl compact="compact">
28212
<dt> <img src="images/st_scissors.png" alt="images/st_scissors"><p> <b>st_scissors</b>
28219
<a name="st_005fshogun"></a>
28220
<table cellpadding="1" cellspacing="1" border="0">
28221
<tr><td valign="middle" align="left">[<a href="#st_005fscissors" title="Previous section in reading order"> < </a>]</td>
28222
<td valign="middle" align="left">[<a href="#st_005fspitter" title="Next section in reading order"> > </a>]</td>
28223
<td valign="middle" align="left"> </td>
28224
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
28225
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
28226
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
28227
<td valign="middle" align="left"> </td>
28228
<td valign="middle" align="left"> </td>
28229
<td valign="middle" align="left"> </td>
28230
<td valign="middle" align="left"> </td>
28231
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
28232
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
28233
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
28234
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
28236
<a name="st_005fshogun-1"></a>
28237
<h3 class="subsection">9.5.56 st_shogun</h3>
28238
<a name="index-st_005fshogun"></a>
28240
<p>Shogun stones are nestable stones like Fukuroma or Matryoshka dolls. The
28241
different basic variations are distinguishable by their central hole. Small,
28242
medium and large ones do exist. In contrast to the Fukuroma dolls you can push
28243
smaller variations beneath the larger ones but not vice versa. You can see
28244
smaller shoguns pushed beneath larger ones through the upper, larger hole.
28245
Thus the player is always aware of the stack of shogun stones positioned on a
28248
<p>An actor or a stone impulse hitting a shogun stack will push the smallest shogun
28249
out of the stack. The upper and larger shogun stones can never be moved out of
28250
a stack and larger shoguns stones can never be pushed over smaller ones.
28252
<p><a href="#it_005fshogun">it_shogun</a> are a special trigger type for shogun stones represented by
28253
animated blue dots. They just react on shogun stacks positioned on top of the
28254
dot items. All shogun sizes must be present from the smallest up to the size
28257
<p>Shogun stones press <a href="#it_005ftrigger">it_trigger</a>, too. But all other items that react on
28258
other stones being pushed over them will not react on shogun stones. E.g.
28259
<a href="#it_005fseed">it_seed</a> will not grow, <a href="#it_005fbomb">it_bomb</a> will not explode, <a href="#it_005fcoin">it_coin</a> will
28260
not transform and <a href="#it_005fcherry">it_cherry</a> will not smash.
28262
<p>All shogun stones keep their identity even if they are pushed together onto a
28263
single grid. Thus each shogun can be connected independently to <a href="#ot_005fwire">ot_wire</a>s
28264
or <a href="#ot_005frubberband">ot_rubberband</a>s. On initialization you can set a stack of shogun onto
28265
a grid by setting a single shogun stone with a combined flavor string. The
28266
largest shogun stone of a stack will be positioned onto the grid and all smaller
28267
ones being part of the stack will be contained by the largest one. You can name
28268
the smaller shoguns of a stack by the additional attributes ‘<samp>name_m</samp>’ and
28269
‘<samp>name_s</samp>’. Every shogun, even those being part of a stack can individually
28270
be killed by sending a <a href="#kill">kill</a> message to it. By setting another stone or
28271
‘<samp>st_nil</samp>’ onto the grid currently being occupied by a shogun grid all shogun
28272
stones being part of the stack will be killed.
28274
<dl compact="compact">
28275
<dt> <b>Attributes:</b></dt>
28276
<dd><dl compact="compact">
28277
<dt> <b>flavor</b>, <i>values</i>: <code>"s"</code>, <code>"m"</code>, <code>"l"</code>, <code>"sm"</code>, <code>"sl"</code>, <code>"ml"</code>, <code>"sml"</code>; <i>default</i>: <code>"s"</code>; <i>access</i>: after initialization read only</dt>
28278
<dd><p>A string describing the hole sizes of this shogun stone and all smaller shogun
28279
stones that are positioned beneath this stone. <code>"s"</code> for a small hole, <code>"m"</code> for
28280
a medium hole, <code>"l"</code> for a large hole, plus combinations of these
28281
characters for stacks. On initialization all shoguns of this grid’s stack will
28282
be set according to this attribute, which can be prior set. After initialization
28283
this attribute is read only and reports the current stack configuration. The
28284
character sequence is guaranteed to be sorted from small to large on read access
28285
but is arbitrary on initial write access.
28288
<dt> <b>name_m</b> <i>values</i>: string; <i>default</i>: <code>nil</code></dt>
28289
<dd><p>Name of the middle sized shogun as subpart of a stack of a large shogun.
28292
<dt> <b>name_s</b> <i>values</i>: string; <i>default</i>: <code>nil</code></dt>
28293
<dd><p>Name of the small sized shogun as subpart of a stack of a large or middle sized
28300
<dt> <b>Messages:</b> none</dt>
28301
<dt> <b>Action:</b> none</dt>
28302
<dt> <b>Variants:</b></dt>
28304
<dl compact="compact">
28305
<dt> <img src="images/st_shogun.png" alt="images/st_shogun"><p> <b>st_shogun</b>: flavor = <code>"s"</code>
28307
<dt> <img src="images/st_shogun.png" alt="images/st_shogun"><p> <b>st_shogun_s</b>: flavor = <code>"s"</code>
28309
<dt> <img src="images/st_shogun_2.png" alt="images/st_shogun_2"><p> <b>st_shogun_m</b>: flavor = <code>"m"</code>
28311
<dt> <img src="images/st_shogun_3.png" alt="images/st_shogun_3"><p> <b>st_shogun_sm</b>: flavor = <code>"sm"</code>
28313
<dt> <img src="images/st_shogun_4.png" alt="images/st_shogun_4"><p> <b>st_shogun_l</b>: flavor = <code>"l"</code>
28315
<dt> <img src="images/st_shogun_5.png" alt="images/st_shogun_5"><p> <b>st_shogun_sl</b>: flavor = <code>"sl"</code>
28317
<dt> <img src="images/st_shogun_6.png" alt="images/st_shogun_6"><p> <b>st_shogun_ml</b>: flavor = <code>"ml"</code>
28319
<dt> <img src="images/st_shogun_7.png" alt="images/st_shogun_7"><p> <b>st_shogun_sml</b>: flavor = <code>"sml"</code>
28327
<a name="st_005fspitter"></a>
28328
<table cellpadding="1" cellspacing="1" border="0">
28329
<tr><td valign="middle" align="left">[<a href="#st_005fshogun" title="Previous section in reading order"> < </a>]</td>
28330
<td valign="middle" align="left">[<a href="#st_005fstoneimpulse" title="Next section in reading order"> > </a>]</td>
28331
<td valign="middle" align="left"> </td>
28332
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
28333
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
28334
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
28335
<td valign="middle" align="left"> </td>
28336
<td valign="middle" align="left"> </td>
28337
<td valign="middle" align="left"> </td>
28338
<td valign="middle" align="left"> </td>
28339
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
28340
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
28341
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
28342
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
28344
<a name="st_005fspitter-1"></a>
28345
<h3 class="subsection">9.5.57 st_spitter</h3>
28346
<a name="index-st_005fspitter"></a>
28348
<p>A stone that spits <a href="#ot_005fcannonball">ot_cannonball</a>s on actor hits and on proper messages.
28349
The standard spitter is ‘<samp>ACTIVE</samp>’ showing a slow rotating animation. In
28350
this ‘<samp>state</samp>’ the spitter reacts on actor hits, while being ‘<samp>IDLE</samp>’
28351
it is steady and will spit just on messages.
28353
<p>On an actor hit the spitter checks the owner’s inventory for an existing
28354
<a href="#it_005fextralife">it_extralife</a>. If one exists that is not stuffed in a <a href="#it_005fbag">it_bag</a>, it
28355
takes it and spits an <a href="#ot_005fcannonball">ot_cannonball</a> according to the actors velocity
28356
and its own hit attributes. The cannonball flies into the resulting direction
28357
with a speed that is proportional to the actors hit speed.
28359
<p>All cannonballs fly the same period of time. They fly above all other objects
28360
and cross all stone walls. The flight distance is proportional to their initial
28361
speed. On landing they cause actions on some objects and destroy others:
28364
<li> <a href="#st_005foxyd">st_oxyd</a> do open,
28365
</li><li> <a href="#st_005fstoneimpulse">st_stoneimpulse</a> do pulse,
28366
</li><li> <a href="#st_005fyinyang">st_yinyang</a> do toggle,
28367
</li><li> <a href="#st_005fpuzzle">st_puzzle</a> do explode completely connected clusters,
28368
</li><li> <a href="#st_005fbrownpyramid">st_brownpyramid</a> do break,
28369
</li><li> <a href="#st_005fspitter">st_spitter</a> do break, if not being ‘<samp>secure</samp>’
28370
</li><li> other stones do remain unmodified and protect items and floors,
28371
</li><li> <a href="#it_005fdynamite">it_dynamite</a> do ignite,
28372
</li><li> <a href="#it_005fcrack">it_crack</a> do crack,
28373
</li><li> other indestructible items do remain and protect floors,
28374
</li><li> other items are blown away by an <a href="#it_005fexplosion">it_explosion</a>_debris that may destruct the floor,too,
28375
</li><li> floors dissolve via an <a href="#it_005fexplosion">it_explosion</a>_debris if not being indestructible as <a href="#fl_005fwater">fl_water</a>, <a href="#fl_005fswamp">fl_swamp</a>, <a href="#fl_005fabyss">fl_abyss</a>.
28378
<p>Actors will not be harmed by falling cannonballs.
28380
<p>The spitting can be initiated by the message <code>"hit"</code>, too. No
28381
<a href="#it_005fextralife">it_extralife</a> is needed in this case. The hit message takes either a
28382
destination as message value or in case no value is given it evaluates the
28383
‘<samp>destination</samp>’ attribute. The second case is suitable for usage of
28384
‘<samp>hit</samp>’ as an action message.
28386
<p>The destination can be any value that evaluates to a valid position, object
28387
references and object names included. In case of a ‘<samp>destination</samp>’
28388
attribute you can even supply tokens describing a series of destination
28389
positions. The destinations will be targeted by the cannonballs in turn on
28390
a sequence of ‘<samp>hit</samp>’ actions.
28392
<p>Note that the destruction of target objects can have unexpected side effects
28393
on the destination sequence. If you list three <a href="#st_005fstoneimpulse">st_stoneimpulse</a> as
28394
destinations they will be targeted in the given sequence as none of them
28395
gets destroyed. But if you list three <a href="#st_005fbrownpyramid">st_brownpyramid</a> the first
28396
cannonball destroys the first target, leaving two valid destinations. The
28397
spitter now targets the second target of its list, which happens to evaluate
28398
to the third brown pyramid stone. Finally the destination list has just one
28399
still existing brown pyramid, the second one, as target. This one will be
28400
destroyed on the next spit as the spitter starts again on the first (remaining)
28401
destination when the end of list is reached. This may be no problem if you
28402
want to destroy objects randomly or if you use named destinations with
28403
wildcards. But if you need control about the sequence you need either
28404
destinations targets that get not destroyed or floor object references, as
28405
they represent <a href="#Named-Positions">Named Positions</a> that are persistent to object destruction.
28407
<dl compact="compact">
28408
<dt> <b>Attributes:</b></dt>
28410
<dl compact="compact">
28411
<dt> <b>state</b>, <i>values</i>: <code>IDLE</code>, <code>ACTIVE</code>; <i>default</i>: <code>ACTIVE</code> See section <a href="#state">state</a></dt>
28412
<dd><p>An ‘<samp>ACTIVE</samp>’ spitter is animated and reacts on actor hits while an ‘<samp>IDLE</samp>’
28413
looks steady and does not spit on actor hits.
28415
<dt> <b>hit_strength</b> <i>values</i>: floating point numbers; <i>default</i>: <code>1.0</code>; See section <a href="#hit_005f_002a">hit_*</a></dt>
28416
<dt> <b>hit_distortion_xx</b> <i>values</i>: floating point numbers; <i>default</i>: <code>1.0</code>; See section <a href="#hit_005f_002a">hit_*</a></dt>
28417
<dt> <b>hit_distortion_xy</b> <i>values</i>: floating point numbers; <i>default</i>: <code>0.0</code>; See section <a href="#hit_005f_002a">hit_*</a></dt>
28418
<dt> <b>hit_distortion_yx</b> <i>values</i>: floating point numbers; <i>default</i>: <code>0.0</code>; See section <a href="#hit_005f_002a">hit_*</a></dt>
28419
<dt> <b>hit_distortion_yy</b> <i>values</i>: floating point numbers; <i>default</i>: <code>1.0</code>; See section <a href="#hit_005f_002a">hit_*</a></dt>
28420
<dt> <b>destination</b>, <i>values</i>: tokens or position; <i>default</i>: <code>nil</code> See section <a href="#destination">destination</a></dt>
28421
<dd><p>The destination of the cannonball given by an object or a position.
28423
<dt> <b>secure</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
28424
<dd><p>Unsecure spitters do break on a <a href="#ot_005fcannonball">ot_cannonball</a> hit.
28429
<dt> <b>Messages:</b></dt>
28431
<dl compact="compact">
28432
<dt> <b>hit</b></dt>
28433
<dd><p>Spit a cannonball. Takes either a destination as message value or ‘<samp>nil</samp>’.
28438
<dt> <b>Variants:</b></dt>
28439
<dd><dl compact="compact">
28440
<dt> <img src="images/st_spitter_idle.png" alt="images/st_spitter_idle"><p> <b>st_spitter</b>: secure = <code>false</code>, state = <code>ACTIVE</code>
28448
<a name="st_005fstoneimpulse"></a>
28449
<table cellpadding="1" cellspacing="1" border="0">
28450
<tr><td valign="middle" align="left">[<a href="#st_005fspitter" title="Previous section in reading order"> < </a>]</td>
28451
<td valign="middle" align="left">[<a href="#st_005fsurprise" title="Next section in reading order"> > </a>]</td>
28452
<td valign="middle" align="left"> </td>
28453
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
28454
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
28455
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
28456
<td valign="middle" align="left"> </td>
28457
<td valign="middle" align="left"> </td>
28458
<td valign="middle" align="left"> </td>
28459
<td valign="middle" align="left"> </td>
28460
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
28461
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
28462
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
28463
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
28465
<a name="st_005fstoneimpulse-1"></a>
28466
<h3 class="subsection">9.5.58 st_stoneimpulse</h3>
28467
<a name="index-st_005fstoneimpulse"></a>
28469
<p>When being triggered these stones do pulse and send stone pushing impulses to
28470
their direct neighbors. There exist solid, hollow and movable variants of this
28473
<p>The pulsing can either be triggered by an actor touching or hitting the stone,
28474
by receiving a stone impulse from a neighboring <a href="#st_005fstoneimpulse">st_stoneimpulse</a>, via
28475
<a href="#ot_005fwire">ot_wire</a> or a dropped <a href="#it_005fpuller">it_puller</a>. Further on laser light, an
28476
<a href="#st_005fboulder">st_boulder</a> hitting and of course messages will cause the pulsing, too.
28478
<p>Even though the three major variants can be set by attributes, they are mutual
28479
exclusive. A ‘<samp>hollow</samp>’ stone is never movable or solid and vice versa. That
28480
means setting one of these basic attributes will reset the others to their
28483
<p>A movable stoneimpulse being pushed will pulse due to the actor hit at the
28484
new grid position. Even when it is pushed while pulsing it will continue the
28485
running pulse animation on the new grid and if necessary it will repulse to
28486
guarantee that impulses are send to the neighboring stones at the new position.
28488
<p>But if an actor with a revealed <a href="#it_005fmagicwand">it_magicwand</a> pushes a movable stoneimpulse
28489
it will move without any additional pulse.
28491
<p>In general stoneimpulse stones are very responsive to actor contacts. The
28492
slightest touch is sufficient to cause a pulsing. Hollow stones will shatter
28493
actors beneath it while pulsing.
28495
<p>Hollow stoneimpulse stones are transparent to laserlight and thus do not react.
28496
But all other stones do pulse. A standard not ‘<samp>steady</samp>’ stoneimpulse will
28497
pulse just one time on each new added light beam. But if you set ‘<samp>steady</samp>’
28498
to <code>true</code> the stone will continue pulsing as long as a single beam hits
28501
<p>An <a href="#st_005fboulder">st_boulder</a> that hits a stoneimpulse causes it to pulse once. The
28502
impulse will not backfire onto the <a href="#st_005fboulder">st_boulder</a>. It will just propagate to
28503
the other three directions. Thus the boulder remains aside the stoneimpulse. But
28504
when the stoneimpulse gets activated otherwise it will push back the boulder,
28505
which will in return hit the stoneimpulse again.
28507
<p>An <a href="#ot_005fcannonball">ot_cannonball</a> emitted from an <a href="#st_005fspitter">st_spitter</a> and now falling onto
28508
a stoneimpulse causes it to pulse, too.
28510
<p>On a chain of stoneimpulse stones the pulsing will propagate along the chain
28511
without backfiring, as the previous stone is still active when its successor
28512
impulses. This feature lets propagate a linear front of impulses through a field
28513
of stoneimpulse stones as expected.
28515
<p>If you want to setup a linear circle of stoneimpulse stones with an impulse
28516
wandering around the circle in one direction forever, you should insert one
28517
‘<samp>st_stoneimpulse_new</samp>’ into the chain. According to the
28518
<a href="#Snapshot-Principle">Snapshot Principle</a> it is a stone that is just about to start pulsing.
28519
You need to set the attribute ‘<samp>orientation</samp>’, which is just evaluated for
28520
new stones when set to the grid. It takes the incoming direction of the impulse
28521
when it reached the new stone. E.g. an orientation of east means that the stone
28522
received an impulse from a stone located west of it which was bound to east.
28523
Thus the stone will emit impulses to all directions but west.
28525
<p>Impulse stones will be destroyed by <a href="#it_005fdynamite">it_dynamite</a> exploding on one of the
28526
eight neighboring grid positions while the stone is enlightened by a laser. But
28527
other explosions, including <a href="#it_005fbomb">it_bomb</a>, will not effect stoneimpulse stones.
28529
<dl compact="compact">
28530
<dt> <b>Attributes:</b></dt>
28532
<dl compact="compact">
28533
<dt> <b>movable</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
28534
<dd><p>Movable stones are not hollow.
28536
<dt> <b>hollow</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
28537
<dd><p>Hollow stones are neither movable, nor steady.
28539
<dt> <b>steady</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
28540
<dd><p>Steady stones send continuous impulses while exposed to laser light. Steady stones
28546
<dt> <b>Messages:</b></dt>
28548
<dl compact="compact">
28549
<dt> <b>signal</b> See section <a href="#signal">signal</a></dt>
28550
<dd><p>Pulse at a value of ‘<samp>1</samp>’.
28555
<dt> <b>Action:</b> none</dt>
28556
<dt> <b>Variants:</b></dt>
28557
<dd><dl compact="compact">
28558
<dt> <img src="images/st_stoneimpulse.png" alt="images/st_stoneimpulse"><p> <b>st_stoneimpulse</b>
28560
<dt> <img src="images/st_stoneimpulse.png" alt="images/st_stoneimpulse"><p> <b>st_stoneimpulse_movable</b>: movable = <code>true</code>
28562
<dt> <img src="images/st_stoneimpulse_hollow.png" alt="images/st_stoneimpulse_hollow"><p> <b>st_stoneimpulse_hollow</b>: hollow = <code>true</code>
28564
<dt> <img src="images/st_stoneimpulse_6.png" alt="images/st_stoneimpulse_6"><p> <b>st_stoneimpulse_steady</b>: steady = <code>true</code>
28566
<dt> <img src="images/st_stoneimpulse.png" alt="images/st_stoneimpulse"><p> <b>st_stoneimpulse_new</b>:
28568
<dd><p>A stone that is about to pulse when being set.
28576
<a name="st_005fsurprise"></a>
28577
<table cellpadding="1" cellspacing="1" border="0">
28578
<tr><td valign="middle" align="left">[<a href="#st_005fstoneimpulse" title="Previous section in reading order"> < </a>]</td>
28579
<td valign="middle" align="left">[<a href="#st_005fswap" title="Next section in reading order"> > </a>]</td>
28580
<td valign="middle" align="left"> </td>
28581
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
28582
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
28583
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
28584
<td valign="middle" align="left"> </td>
28585
<td valign="middle" align="left"> </td>
28586
<td valign="middle" align="left"> </td>
28587
<td valign="middle" align="left"> </td>
28588
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
28589
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
28590
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
28591
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
28593
<a name="st_005fsurprise-1"></a>
28594
<h3 class="subsection">9.5.59 st_surprise</h3>
28595
<a name="index-st_005fsurprise"></a>
28597
<p>A stone that transforms into a random stone as soon as an actor hits it.
28599
<p>The replacement stone is a random one out of a given selection. You can set
28600
the ‘<samp>selection</samp>’ attribute with tokens of strings. Every string needs either
28601
to be an <a href="#Object-Kind">Object Kind</a> or a tile key prefixed by an equal sign ‘<samp>=</samp>’.
28603
<table><tr><td> </td><td><pre class="example">ti["b"] = {"st_brake"}
28604
ti["d"] = {"st_death"}
28605
ti["s"] = {"st_surprise", selection={"st_chess", "=b", "=d", "=d"}}
28606
</pre></td></tr></table>
28608
<p>The replacement stone is randomly chosen out of the given selection. By listing
28609
a stone several times you can take influence on the likelihood.
28611
<p>The tile declarations referenced by a key may even contain objects besides
28612
stone. But you should make rare and proper usage of this feature.
28614
<p>Prior replacing the surprise stone the surprise stone will perform its action.
28615
You can use this action to modify the selection or to set objects on your own.
28617
<p>The surprise stone is killed by any replacement stone set to the grid position.
28618
If your selection does not resolve to a stone you may need to add <code>"st_nil"</code>
28619
to the replacement tile declaration.
28621
<dl compact="compact">
28622
<dt> <b>Attributes:</b></dt>
28623
<dd><dl compact="compact">
28624
<dt> <b>selection</b>, <i>values</i>: tokens of stone kinds and tile keys; <i>default</i>: <code>{"st_grate_cross", "st_death", "st_surprise", "st_lightglass_hollow", "st_knight", "st_thief", "st_flat_breakable", "st_flat_breaking"}</code></dt>
28628
<dt> <b>Messages:</b></dt>
28629
<dt> <b>Action:</b> See section <a href="#target">target</a>, See section <a href="#action">action</a></dt>
28630
<dt> <b>Variants:</b></dt>
28631
<dd><dl compact="compact">
28632
<dt> <img src="images/st_surprise.png" alt="images/st_surprise"><p> <b>st_surprise</b>
28639
<a name="st_005fswap"></a>
28640
<table cellpadding="1" cellspacing="1" border="0">
28641
<tr><td valign="middle" align="left">[<a href="#st_005fsurprise" title="Previous section in reading order"> < </a>]</td>
28642
<td valign="middle" align="left">[<a href="#st_005fswitch" title="Next section in reading order"> > </a>]</td>
28643
<td valign="middle" align="left"> </td>
28644
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
28645
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
28646
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
28647
<td valign="middle" align="left"> </td>
28648
<td valign="middle" align="left"> </td>
28649
<td valign="middle" align="left"> </td>
28650
<td valign="middle" align="left"> </td>
28651
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
28652
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
28653
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
28654
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
28656
<a name="st_005fswap-1"></a>
28657
<h3 class="subsection">9.5.60 st_swap</h3>
28658
<a name="index-st_005fswap"></a>
28660
<p>A swap stone can exchange its position with a neighboring stone on the side
28661
in direction of the initiating impulse. It is not freely movable by pushes.
28662
But when an actor hits a swap stone and another stone is located on the opposite
28663
side of the swap stone, both stones will exchange their positions. The swap will
28664
also be performed when the swap stone receives a stone impulse via an
28665
<a href="#ot_005fwire">ot_wire</a> or a neighboring <a href="#st_005fstoneimpulse">st_stoneimpulse</a>. A similar stone it the
28666
<a href="#st_005fpull">st_pull</a>, that exchanges with stones in the reverse direction of the
28667
initiating impulse.
28669
<p>An existing stone exchange partner is mandatory. Nearly all stones can be
28670
swapped. Just connected <a href="#Cluster-Stones">Cluster Stones</a> building a block, <a href="#st_005foxyd">st_oxyd</a>
28671
configured as being ‘<samp>static</samp>’, and another swap stone or <a href="#st_005fpull">st_pull</a> that
28672
is currently engaged in an own stone exchange operation will refuse swapping.
28674
<p>Stone exchanges will not cause item hit transformations as caused by push moved
28675
stones. But the exchanged stones will react on the new floor, e.g. causing
28676
<a href="#st_005fbox">st_box</a> to sink into water.
28678
<p>Further on the exchange is atomic concerning <a href="#it_005ftrigger">it_trigger</a> detection and
28679
laser light transparency. If the exchanged stone is transparent, the light
28680
will pass on every time slice just on one of the two grids. If the exchanged
28681
stone is floating and does not press <a href="#it_005ftrigger">it_trigger</a>s, the swap stone will
28682
press just one trigger, releasing the trigger of the old position before
28683
pressing the new position’s trigger like any other stone being pushed from one
28686
<dl compact="compact">
28687
<dt> <b>Attributes:</b> none</dt>
28688
<dt> <b>Messages:</b> none</dt>
28689
<dt> <b>Action:</b> none</dt>
28690
<dt> <b>Variants:</b></dt>
28691
<dd><dl compact="compact">
28692
<dt> <img src="images/st_swap.png" alt="images/st_swap"><p> <b>st_swap</b>
28699
<a name="st_005fswitch"></a>
28700
<table cellpadding="1" cellspacing="1" border="0">
28701
<tr><td valign="middle" align="left">[<a href="#st_005fswap" title="Previous section in reading order"> < </a>]</td>
28702
<td valign="middle" align="left">[<a href="#st_005fthief" title="Next section in reading order"> > </a>]</td>
28703
<td valign="middle" align="left"> </td>
28704
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
28705
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
28706
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
28707
<td valign="middle" align="left"> </td>
28708
<td valign="middle" align="left"> </td>
28709
<td valign="middle" align="left"> </td>
28710
<td valign="middle" align="left"> </td>
28711
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
28712
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
28713
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
28714
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
28716
<a name="st_005fswitch-1"></a>
28717
<h3 class="subsection">9.5.61 st_switch</h3>
28718
<a name="index-st_005fswitch"></a>
28720
<p>A classical on/off switch that toggles its state on actors hitting the stone.
28721
Of course other objects can send messages on actions to make this switch turning.
28723
<p>Three variants of the switch do exist. A neutral, grey colored one that reacts
28724
on any actor hits, and a black and a white colored switch. These last two
28725
switches will react only if hit by actors of matching color.
28727
<p>If a switch turns on or off there will be a short delay until it reaches the
28728
new state and performs it actions. If you need a switch without delay you
28729
need to set the ‘<samp>instant</samp>’ attribute.
28731
<dl compact="compact">
28732
<dt> <b>Attributes:</b></dt>
28734
<dl compact="compact">
28735
<dt> <b>state</b>, <i>values</i>: <code>ON</code>, <code>OFF</code>; <i>default</i>: <code>OFF</code> See section <a href="#state">state</a></dt>
28736
<dt> <b>color</b> <i>values</i>: <code>nil</code>, <code>BLACK</code>, <code>WHITE</code>; <i>default</i>: <code>nil</code></dt>
28737
<dd><p>The color of the switch that needs to match the hitting actor to cause a toggle.
28738
The default ‘<samp>nil</samp>’ color is a grey switch that matches all actors, marbles,
28739
pearls or killers of any color as well as all other actors.
28741
<dt> <b>instant</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
28742
<dd><p>A default switch requires a short time equivalent to the animation until the
28743
new state is reached and the actions are performed. An instant switch jumps
28744
directly into the new state.
28749
<dt> <b>Messages:</b></dt>
28751
<dl compact="compact">
28752
<dt> <b>signal</b> See section <a href="#signal">signal</a></dt>
28753
<dd><p>Switches on at value ‘<samp>1</samp>’, and off at values ‘<samp>0</samp>’.
28755
<dt> <b>on</b> See section <a href="#on">on</a></dt>
28756
<dt> <b>off</b> See section <a href="#off">off</a></dt>
28760
<dt> <b>Action:</b> See section <a href="#target">target</a>, See section <a href="#action">action</a></dt>
28761
<dt> <b>Variants:</b></dt>
28763
<dl compact="compact">
28764
<dt> <img src="images/st_switch.png" alt="images/st_switch"><p> <b>st_switch</b>
28766
<dt> <img src="images/st_switch_black.png" alt="images/st_switch_black"><p> <b>st_switch_black</b>: color = <code>BLACK</code>
28768
<dt> <img src="images/st_switch_white.png" alt="images/st_switch_white"><p> <b>st_switch_white</b>: color = <code>WHITE</code>
28776
<a name="st_005fthief"></a>
28777
<table cellpadding="1" cellspacing="1" border="0">
28778
<tr><td valign="middle" align="left">[<a href="#st_005fswitch" title="Previous section in reading order"> < </a>]</td>
28779
<td valign="middle" align="left">[<a href="#st_005ftimer" title="Next section in reading order"> > </a>]</td>
28780
<td valign="middle" align="left"> </td>
28781
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
28782
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
28783
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
28784
<td valign="middle" align="left"> </td>
28785
<td valign="middle" align="left"> </td>
28786
<td valign="middle" align="left"> </td>
28787
<td valign="middle" align="left"> </td>
28788
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
28789
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
28790
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
28791
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
28793
<a name="st_005fthief-1"></a>
28794
<h3 class="subsection">9.5.62 st_thief</h3>
28795
<a name="index-st_005fthief"></a>
28797
<p>A thief steals an item from the player’s inventory when it is hit by an owned
28798
actor. Unfortunately the thief is visually indistinguishable from a
28799
<a href="#st_005fbluegray">st_bluegray</a>.
28801
<p>The item is not directly stolen at the moment of the hit. The hit itself just
28802
causes the thief to emerge from his hiding-place. The thief steals from the
28803
actor that did hit the stone at the moment of maximum visibility. He takes
28804
a random item from the owner’s inventory. But he just will steal an item if
28805
the actor is not shielded due to an activated <a href="#it_005fumbrella">it_umbrella</a>.
28807
<p>Thieves have an addiction to alcohol. Thus they get drunken and inactive if
28808
they happen to steal a bottle filled with stuff.
28810
<p>Thieves have an enemy - the <a href="#st_005fchess">st_chess</a>. If a chess stone is pushed onto
28811
a thief it will capture the thief, sober or drunken. The thief stone vanishes
28812
and the chess stone jumps onto its position. But the thief will leave behind
28813
on the grid all stolen items in his own <a href="#it_005fbag">it_bag</a>. If an item happens to
28814
be positioned beneath the captured thief stone, this item will be added to
28815
the thief’s bag, too. If the thief has not stolen any items he leaves no empty
28818
<dl compact="compact">
28819
<dt> <b>Attributes:</b> none</dt>
28820
<dt> <b>Messages:</b> none</dt>
28821
<dt> <b>Action:</b> none</dt>
28822
<dt> <b>Variants:</b></dt>
28823
<dd><dl compact="compact">
28824
<dt> <img src="images/st_bluegray.png" alt="images/st_bluegray"><p> <b>st_thief</b>: hidden
28826
<dt> <img src="images/st_thief.png" alt="images/st_thief"><p> <b>st_thief</b>: showing up at the moment when stealing items
28828
<dt> <img src="images/st_thief_capture.png" alt="images/st_thief_capture"><p> <b>st_thief</b>: when being captured
28830
<dt> <img src="images/st_thief_drunken.png" alt="images/st_thief_drunken"><p> <b>st_thief</b>: drunken thief
28837
<a name="st_005ftimer"></a>
28838
<table cellpadding="1" cellspacing="1" border="0">
28839
<tr><td valign="middle" align="left">[<a href="#st_005fthief" title="Previous section in reading order"> < </a>]</td>
28840
<td valign="middle" align="left">[<a href="#st_005fturnstile" title="Next section in reading order"> > </a>]</td>
28841
<td valign="middle" align="left"> </td>
28842
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
28843
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
28844
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
28845
<td valign="middle" align="left"> </td>
28846
<td valign="middle" align="left"> </td>
28847
<td valign="middle" align="left"> </td>
28848
<td valign="middle" align="left"> </td>
28849
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
28850
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
28851
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
28852
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
28854
<a name="st_005ftimer-1"></a>
28855
<h3 class="subsection">9.5.63 st_timer</h3>
28856
<a name="index-st_005ftimer"></a>
28858
<p>This stone can be used to trigger a delayed single or periodic events. An
28859
active, switched on timer is usually visualized by an animation. An inactive,
28860
switched off timer shows a static image. An alternative to an invisible timer
28861
stone is an <a href="#ot_005ftimer">ot_timer</a> gadget.
28863
<p>Note that this is an exceptional object as its default state is ‘<samp>ON</samp>’ to
28864
support the most common case of immediately running timers.
28866
<p>A single shot, not looping timer will send an action value of ‘<samp>true</samp>’. A
28867
looping timer will alternate the boolean action values starting with value
28868
‘<samp>true</samp>’. You can use <a href="#inverse">inverse</a> to start with a value of ‘<samp>false</samp>’.
28870
<p>If you stop a timer by switching it off, no further events will be performed.
28871
Restarting the timer by switching it on again will restart the timer like
28874
<p>The time interval to the first event and between subsequent events can be relied
28875
on to an accuracy of 0.01 seconds. But due to performance reasons and visibility
28876
of the reactions timers should not be set to intervals below 0.1 seconds. An
28877
interval of less than 0.01 seconds is not valid for a looping timer.
28879
<dl compact="compact">
28880
<dt> <b>Attributes:</b></dt>
28882
<dl compact="compact">
28883
<dt> <b>state</b>, <i>values</i>: <code>ON</code>, <code>OFF</code>; <i>default</i>: <code>ON</code> See section <a href="#state">state</a></dt>
28884
<dd><p>An ‘<samp>ON</samp>’ state timer is running. A timer in state ‘<samp>OFF</samp>’ is reset and
28885
waiting for reactivation.
28887
<dt> <b>invisible</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
28888
<dd><p>An invisible timer is totally transparent. But the user may notice it, as actors
28889
cannot pass and other stones cannot be moved onto the same grid position.
28891
<dt> <b>interval</b> <i>values</i>: positive number; <i>default</i>: <code>1.0</code></dt>
28892
<dd><p>Number of seconds until the first and between subsequent events. The interval
28893
must be larger or equal 0.01 seconds for looping timers.
28895
<dt> <b>loop</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code></dt>
28896
<dd><p>A looping timer will send periodic events.
28901
<dt> <b>Messages:</b></dt>
28903
<dl compact="compact">
28904
<dt> <b>signal</b> See section <a href="#signal">signal</a></dt>
28905
<dd><p>Switches on at value ‘<samp>1</samp>’, and off at values ‘<samp>0</samp>’.
28907
<dt> <b>on</b> See section <a href="#on">on</a></dt>
28908
<dt> <b>off</b> See section <a href="#off">off</a></dt>
28912
<dt> <b>Action:</b> See section <a href="#target">target</a>, See section <a href="#action">action</a></dt>
28913
<dd><p>The action value starts with ‘<samp>true</samp>’ and alternates on every event between
28914
‘<samp>false</samp>’ and ‘<samp>true</samp>’. A timer that is reset starts again with value
28915
‘<samp>true</samp>’
28918
<dt> <b>Variants:</b></dt>
28919
<dd><dl compact="compact">
28920
<dt> <img src="images/st_timer_3.png" alt="images/st_timer_3"><p> <b>st_timer</b>: state = <code>OFF</code>
28922
<dt> <img src="images/st_timer.png" alt="images/st_timer"><p> <b>st_timer</b>: state = <code>ON</code>
28929
<a name="st_005fturnstile"></a>
28930
<table cellpadding="1" cellspacing="1" border="0">
28931
<tr><td valign="middle" align="left">[<a href="#st_005ftimer" title="Previous section in reading order"> < </a>]</td>
28932
<td valign="middle" align="left">[<a href="#st_005fturnstilearm" title="Next section in reading order"> > </a>]</td>
28933
<td valign="middle" align="left"> </td>
28934
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
28935
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
28936
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
28937
<td valign="middle" align="left"> </td>
28938
<td valign="middle" align="left"> </td>
28939
<td valign="middle" align="left"> </td>
28940
<td valign="middle" align="left"> </td>
28941
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
28942
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
28943
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
28944
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
28946
<a name="st_005fturnstile-1"></a>
28947
<h3 class="subsection">9.5.64 st_turnstile</h3>
28948
<a name="index-st_005fturnstile"></a>
28950
<p>A turnstile is a stone cluster that consists of a central pivot, this
28951
‘<samp>st_turnstile</samp>’, and up to four neighboring <a href="#st_005fturnstilearm">st_turnstilearm</a>s of
28952
connecting orientations. When one the arms is hit by an actor or receives a
28953
stone pushing impulse by another object (e.g. ‘<samp>st_rotator</samp>’, ‘<samp>ot_wire</samp>’,
28954
‘<samp>it_puller</samp>’, ...), the whole cluster turns by 90 degrees into the impulse
28955
direction. Of course the turnstile complex just turns if it is not blocked by
28956
other stones in its surrounding. Even movable stones will block turnstiles.
28958
<p>There are two ‘<samp>flavor</samp>’s of turnstiles. The common ‘<samp>red</samp>’ version
28959
pulls only the actor, that did hit the arm. It keeps it behind the
28960
‘<samp>st_turnstilearm</samp>’ and shatters all others in its surrounding. Whereas the
28961
‘<samp>green</samp>’ version pushes all actors with its attached ‘<samp>st_turnstilearm</samp>’s
28962
and keeps them in front of the arms. Just actors being in range of the arms will
28963
be pushed. That means that they need to be in a distance of less than 1.5 grids
28964
to the center of the pivot. Thus actors located at the very edge of the
28965
diagonal grid positions will not be pushed. As actors can not be moved out of
28966
the world, a green turnstile positioned at the level border that moves an arm
28967
to the border will shatter actors instead.
28969
<p>Any actor moved by a turnstile is directly warped to its new position without
28970
touching any grid in between. Thus actors can pass abyss or water floors,
28971
but they will not grab any items located on the grid positions in between.
28972
The relative position of an actor within the grid is maintained during its
28973
circular move. Thus two small actors moved at the same time keep their relative
28974
positioning. It is guaranteed that any moved actors will fall even into a tiny
28975
<a href="#it_005fmeditation">it_meditation</a>_dent that is positioned at the destination grid.
28977
<p>Items in the range of the rotating arms will act like a stone being pushed over
28980
<p>When green turnstiles push actors to a diagonal grid position they will push
28981
away an <a href="#st_005fturnstilearm">st_turnstilearm</a>, and just this single kind of stone, if it is
28982
located on this target grid. This feature can be used to intertwine several
28983
turnstiles as it can be seen in the level ‘<samp>ZigZag</samp>’.
28985
<p>There are two other ways of coupling turnstiles. You can simply set another
28986
‘<samp>st_turnstile</samp>’ as the target of a first one and perform a ‘<samp>signal</samp>’
28987
action. This will turn both turnstiles in the same direction. But if one is
28988
blocked the rotations will desynchronize.
28990
<p>Another way is the coupling of two <a href="#st_005fturnstilearm">st_turnstilearm</a>s via an <a href="#ot_005fwire">ot_wire</a>.
28991
A turnstile will propagate its rotation impulses via an wire that is connected
28992
at one of its arms. Two turnstiles connected by wired arms will resynchronize in their
28993
rotation even if one of them is temporarily blocked.
28995
<p>Turnstiles can be turned by standard messages and attributes. They do even
28996
evaluate the turns and keep the attribute ‘<samp>orientation</samp>’ up to date for
28997
easy read evaluation of the current turnstile orientation.
28999
<dl compact="compact">
29000
<dt> <b>Attributes:</b></dt>
29001
<dd><dl compact="compact">
29002
<dt> <b>flavor</b> <i>values</i>: <code>"red"</code>, <code>"green"</code>; <i>default</i>: <code>"red"</code></dt>
29003
<dd><p>The distinguishing color of the pivot that signals the behaviour.
29005
<dt> <b>counterclock</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
29006
<dd><p>The standard turning direction is clockwise. Use this attribute to revert the
29008
<a name="index-orientation-2"></a>
29010
<dt> <b>orientation</b>, <i>values</i>: <code>NORTH</code>, <code>EAST</code>, <code>SOUTH</code>, <code>WEST</code>; <i>default</i>: <code>NORTH</code></dt>
29011
<dd><p>The orientation of the turnstile that is only visible by its arms. Setting
29012
this attribute just defines a new base, but does not turn the turnstile as the
29013
orientation would not be defined. But every rotation does update this attribute
29014
relative to its previous value.
29019
<dt> <b>Messages:</b></dt>
29021
<dl compact="compact">
29022
<dt> <b>signal</b> See section <a href="#signal">signal</a></dt>
29023
<dd><p>Rotates the turnstile counterclockwise on ‘<samp>1</samp>’, and clockwise at values ‘<samp>0</samp>’.
29025
<dt> <b>turn</b></dt>
29026
<dd><p>Turns in turning direction as defined by attribute ‘<samp>counterclock</samp>’.
29028
<dt> <b>turnback</b></dt>
29029
<dd><p>Turns in opposite turning direction as defined by attribute ‘<samp>counterclock</samp>’.
29034
<dt> <b>Action:</b> See section <a href="#target">target</a>, See section <a href="#action">action</a></dt>
29035
<dd><p>At the end of each turn the action is performed with a value of ‘<samp>true</samp>’
29036
on counterclock turns and ‘<samp>false</samp>’ on clockwise turns.
29039
<dt> <b>Variants:</b></dt>
29040
<dd><dl compact="compact">
29041
<dt> <img src="images/st_turnstile.png" alt="images/st_turnstile"><p> <b>st_turnstile</b>: flavor = <code>"red"</code>
29043
<dt> <img src="images/st_turnstile.png" alt="images/st_turnstile"><p> <b>st_turnstile_red</b>: flavor = <code>"red"</code>
29045
<dt> <img src="images/st_turnstile_green.png" alt="images/st_turnstile_green"><p> <b>st_turnstile_green</b>: flavor = <code>"green"</code>
29052
<a name="st_005fturnstilearm"></a>
29053
<table cellpadding="1" cellspacing="1" border="0">
29054
<tr><td valign="middle" align="left">[<a href="#st_005fturnstile" title="Previous section in reading order"> < </a>]</td>
29055
<td valign="middle" align="left">[<a href="#st_005fvolcano" title="Next section in reading order"> > </a>]</td>
29056
<td valign="middle" align="left"> </td>
29057
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
29058
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
29059
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
29060
<td valign="middle" align="left"> </td>
29061
<td valign="middle" align="left"> </td>
29062
<td valign="middle" align="left"> </td>
29063
<td valign="middle" align="left"> </td>
29064
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
29065
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
29066
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
29067
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
29069
<a name="st_005fturnstilearm-1"></a>
29070
<h3 class="subsection">9.5.65 st_turnstilearm</h3>
29071
<a name="index-st_005fturnstilearm"></a>
29073
<p>An arm that usually connects to an <a href="#st_005fturnstile">st_turnstile</a> pivot building a turnstile
29074
cluster. The arm’s subkind suffix, its state and orientation are named according
29075
to the arm’s position within the turnstile cluster. Thus a ‘<samp>NORTH</samp>’ arm has
29076
a single standard connection of <code>"s"</code>, the reverse orientation.
29078
<p>As long as a turnstile arm is not connected to a pivot it is a free movable
29079
stone. Intentionally it is visually indistinguishable from a <a href="#st_005fpuzzle">st_puzzle</a>
29080
with the same connections. But neither an arm will not connect to other
29081
<a href="#st_005fpuzzle">st_puzzle</a> nor a puzzle to a pivot.
29083
<p>An arm is connected to a pivot on a neighboring grid position solely by a
29084
matching connection. It is no longer freely movable. All its impulses will turn
29085
the <a href="#st_005fturnstile">st_turnstile</a> cluster instead.
29087
<p>A special move of an arm is due to actors being moved by another green
29088
<a href="#st_005fturnstile">st_turnstile</a> to its position. The arm receives an impulse by the other
29089
pivot and will either move straight forward or turn its own pivot if being
29092
<p>The orientation of an arm can be set by attribute or messages. Neither way will
29093
generate an impulse to turn a connected turnstile cluster. The arm will be
29094
reorientated alone.
29096
<dl compact="compact">
29097
<dt> <b>Attributes:</b></dt>
29099
<dl compact="compact">
29100
<dt> <b>state</b>, <i>values</i>: <code>NORTH</code>, <code>EAST</code>, <code>SOUTH</code>, <code>WEST</code>; <i>default</i>: <code>NORTH</code> See section <a href="#state">state</a></dt>
29101
<dd><p>The position of an arm in a turnstile cluster.
29102
<a name="index-orientation-3"></a>
29104
<dt> <b>orientation</b>, <i>values</i>: <code>NORTH</code>, <code>EAST</code>, <code>SOUTH</code>, <code>WEST</code>; <i>default</i>: <code>NORTH</code></dt>
29105
<dd><p>The position of an arm in a turnstile cluster.
29107
<dt> <b>connections</b> <i>values</i>: string; <i>default</i>: <code>"s"</code></dt>
29108
<dd><p>Describes the <a href="#st_005fpuzzle">st_puzzle</a> like connection that is the opposite of the
29109
orientation. The string is a string of a single character describing the
29115
<dt> <b>Messages:</b></dt>
29117
<dl compact="compact">
29118
<dd><a name="index-orientate-2"></a>
29120
<dt> <b>orientate</b>, <i>value type</i>: orientation</dt>
29121
<dd><p>Change the orientation to the given orientation value. The <a href="#st_005ffourswitch">st_fourswitch</a>
29122
provides a compatible action which allows you to set an arm as
29123
target and this message as action.
29128
<dt> <b>Action:</b> none</dt>
29129
<dt> <b>Variants:</b></dt>
29130
<dd><dl compact="compact">
29131
<dt> <img src="images/st_puzzle_blue_3.png" alt="images/st_puzzle_blue_3"><p> <b>st_turnstilearm</b>: orientation = <code>NORTH</code>
29133
<dt> <img src="images/st_puzzle_blue_3.png" alt="images/st_puzzle_blue_3"><p> <b>st_turnstilearm_n</b>: orientation = <code>NORTH</code>
29135
<dt> <img src="images/st_puzzle_blue_2.png" alt="images/st_puzzle_blue_2"><p> <b>st_turnstilearm_e</b>: orientation = <code>EAST</code>
29137
<dt> <img src="images/st_puzzle_blue_c.png" alt="images/st_puzzle_blue_c"><p> <b>st_turnstilearm_s</b>: orientation = <code>SOUTH</code>
29139
<dt> <img src="images/st_puzzle_blue_b.png" alt="images/st_puzzle_blue_b"><p> <b>st_turnstilearm_w</b>: orientation = <code>WEST</code>
29146
<a name="st_005fvolcano"></a>
29147
<table cellpadding="1" cellspacing="1" border="0">
29148
<tr><td valign="middle" align="left">[<a href="#st_005fturnstilearm" title="Previous section in reading order"> < </a>]</td>
29149
<td valign="middle" align="left">[<a href="#st_005fwindow" title="Next section in reading order"> > </a>]</td>
29150
<td valign="middle" align="left"> </td>
29151
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
29152
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
29153
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
29154
<td valign="middle" align="left"> </td>
29155
<td valign="middle" align="left"> </td>
29156
<td valign="middle" align="left"> </td>
29157
<td valign="middle" align="left"> </td>
29158
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
29159
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
29160
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
29161
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
29163
<a name="st_005fvolcano-1"></a>
29164
<h3 class="subsection">9.5.66 st_volcano</h3>
29165
<a name="index-st_005fvolcano"></a>
29167
<p>A volcano stone spreads slowly to neighboring grid positions filling up
29168
complete areas and will just stop on boundaries set by other stones.
29170
<p>A volcano can either start by the setting of an ‘<samp>ACTIVE</samp>’ variant, by
29171
an inactive ‘<samp>IDLE</samp>’ variant being triggered by a message or a hitting
29172
<a href="#st_005fboulder">st_boulder</a>, or by an <a href="#it_005fseed">it_seed</a> of flavor <code>volcano</code> being dropped
29175
<p>Once being activated a volcano stone spreads randomly to its direct neighbor
29176
positions. Even though the new set volcano seeds can be passed by actors
29177
without harm for a short period of time the volcano gets lethal while growing.
29178
After reaching its full size a volcano remains for a random time in an active,
29179
glowing state spreading to neighbour positions. During this phase an actor
29180
with a revealed <a href="#it_005fhammer">it_hammer</a> can destroy the active volcano stone.
29182
<p>The spreading of the volcano can be made ‘<samp>secure</samp>’ by setting this attribute
29183
to ‘<samp>true</samp>’. Per default the spreading in not secure and a volcano may
29184
stop spreading with a certain chance anywhere, but especially in narrow gateways.
29185
In contrast a secure volcano remains active until it is guaranteed that all its
29186
neighbor grid positions will be filled with volcano stones.
29188
<p>After its active phase a volcano reaches its final inactive state and can not
29189
be reactivated anymore.
29191
<p>A volcano stone will press any <a href="#it_005ftrigger">it_trigger</a> as soon as it starts growing.
29193
<p>!!Work in progress!! special behaviour on items and floors may yet be added
29195
<dl compact="compact">
29196
<dt> <b>Attributes:</b></dt>
29197
<dd><dl compact="compact">
29198
<dt> <b>state</b>, <i>values</i>: <code>IDLE</code>, <code>ACTIVE</code>; <i>default</i>: <code>IDLE</code> See section <a href="#state">state</a></dt>
29199
<dd><p>Inactive, finished and breaking volcano will report an ‘<samp>IDLE</samp>’ state,
29200
new, growing and active volcano will report an ‘<samp>ACTIVE</samp>’ state. An inactive
29201
volcano can be activated by setting the state to ‘<samp>ACTIVE</samp>’. All other
29202
attempts to set the state will be silently ignored.
29204
<dt> <b>secure</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
29205
<dd><p>A secure volcano will spread a complete area with guarantee.
29210
<dt> <b>Messages:</b></dt>
29211
<dd><dl compact="compact">
29212
<dt> <b>toggle</b> See section <a href="#toggle">toggle</a></dt>
29213
<dd><p>Activates an inactive volcano stone.
29218
<dt> <b>Variants:</b></dt>
29219
<dd><dl compact="compact">
29220
<dt> <img src="images/st_flat.png" alt="images/st_flat"><p> <b>st_volcano</b>: state = <code>IDLE</code>
29222
<dt> <img src="images/st_flat.png" alt="images/st_flat"><p> <b>st_volcano_idle</b>: state = <code>IDLE</code>
29224
<dt> <img src="images/st_quake_3.png" alt="images/st_quake_3"><p> <b>st_volcano_active</b>: state = <code>ACTIVE</code>
29226
<dt> <img src="images/it_seed.png" alt="images/it_seed"><p> <b>st_volcano_new</b>:
29228
<dd><p>An active volcano starting in the seed like phase.
29230
<dt> <img src="images/st_volcano_growing.png" alt="images/st_volcano_growing"><p> <b>st_volcano_growing</b>:
29232
<dd><p>An active volcano starting in the growing phase.
29239
<a name="st_005fwindow"></a>
29240
<table cellpadding="1" cellspacing="1" border="0">
29241
<tr><td valign="middle" align="left">[<a href="#st_005fvolcano" title="Previous section in reading order"> < </a>]</td>
29242
<td valign="middle" align="left">[<a href="#st_005fyinyang" title="Next section in reading order"> > </a>]</td>
29243
<td valign="middle" align="left"> </td>
29244
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
29245
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
29246
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
29247
<td valign="middle" align="left"> </td>
29248
<td valign="middle" align="left"> </td>
29249
<td valign="middle" align="left"> </td>
29250
<td valign="middle" align="left"> </td>
29251
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
29252
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
29253
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
29254
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
29256
<a name="st_005fwindow-1"></a>
29257
<h3 class="subsection">9.5.67 st_window</h3>
29258
<a name="index-st_005fwindow"></a>
29260
<p>A stone made up just of glass window faces. All combinations of window faces with
29261
at least one face are possible. There exist two versions of windows, normal
29262
blue colored glass and green colored safety glass, that is nearly indestructible.
29263
Safety glass is selected by setting the attribute ‘<samp>secure</samp>’ to ‘<samp>true</samp>’.
29264
Every glass face can be weakened by ‘<samp>scratches</samp>’ which are visible in the
29267
<p>All windows are transparent to laser light.
29269
<p>Slowly moving actors will bounce from window faces on any side. They can freely
29270
move within the inner part of the window stone. Invisible actors can even pass
29271
the normal blue window faces, but not the green safety glass faces.
29273
<p>Fast moving actors can blast normal blue window faces into smithereens. But too
29274
strong hits will cause marbles to shatter themselves. An actor can lower the
29275
required speed by adding <a href="#it_005fweight">it_weight</a>, by revealing an <a href="#it_005fhammer">it_hammer</a>, or by
29276
weakening the window faces by prior scratching it with an <a href="#it_005fring">it_ring</a>. Green
29277
safety glass windows will never break on actor attacks and actors will not
29278
shatter on hitting safety glass.
29280
<p>Bomb explosions can shatter window faces, too. Normal blue window faces adjacent
29281
to a bomb explosion will break. Green safety glass faces will break only if
29282
prior weakened by an <a href="#it_005fring">it_ring</a> scratch.
29284
<p>Window faces can be rearranged by actors with a revealed <a href="#it_005fwrench">it_wrench</a>.
29285
Pushing a face from the outside may move it to the opposite side of the window.
29286
But it will only move to the opposite side if there is not already a window face.
29287
And additionally the grid position adjacent to the opposite side must be free
29288
of a stone. Just another window stone without an adjacent window face is allowed
29289
on this position. The reason is, that the moving window face will push
29290
non static items and any actors positioned on the affected window grid to the
29291
next grid. If this grid is already occupied by an item, the window grid item
29292
will be <a href="#it_005fsquashed">it_squashed</a>.
29294
<p>Window face rearrangements can also be initiated by an <a href="#it_005fpuller">it_puller</a> dropped
29295
within the window and by the message ‘<samp>inner_pull</samp>’.
29297
<p>Windows do support <a href="#Flood-Spreading">Flood Spreading</a> and <a href="#Fire-Spreading">Fire Spreading</a> through open
29300
<dl compact="compact">
29301
<dt> <b>Attributes:</b></dt>
29303
<dl compact="compact">
29304
<dt> <b>faces</b> <i>values</i>: string; <i>default</i>: <code>"s"</code></dt>
29305
<dd><p>Describes the window faces of the stone. The string is a substring of
29306
<code>"nesw"</code> listing the faces. The sequence of the sides, north, east, south,
29307
west, is guaranteed on read access but arbitrary on write access.
29309
<dt> <b>secure</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
29310
<dd><p>Green safety glass is secure, whereas normal blue is not.
29312
<dt> <b>scratches</b> <i>values</i>: string; <i>default</i>: <code>""</code></dt>
29313
<dd><p>Describes the scratched window faces of the stone. The string is a substring of
29314
<code>"nesw"</code> listing the affected faces. The sequence of the sides, north, east,
29315
south, west, is guaranteed on read access but arbitrary on write access.
29320
<dt> <b>Messages:</b></dt>
29322
<dl compact="compact">
29323
<dt> <b>inner_pull</b>, <i>value type</i>: orientation</dt>
29324
<dd><p>Tries to tear the opposite window face into the given orientation.
29329
<dt> <b>Variants:</b></dt>
29331
<tr><td width="8%"><img src="images/st_window_blue_3.png" alt="images/st_window_blue_3"></td><td width="42%"><b>st_window</b>: faces = <code>"s"</code>, secure = <code>false</code></td><td width="8%"><img src="images/st_window_green_3.png" alt="images/st_window_green_3"></td><td width="42%"><b>st_window</b>: faces = <code>"s"</code>, secure = <code>true</code></td></tr>
29332
<tr><td width="8%"><img src="images/st_window_blue_2.png" alt="images/st_window_blue_2"></td><td width="42%"><b>st_window_w</b>: faces = <code>"w"</code>, secure = <code>false</code></td><td width="8%"><img src="images/st_window_green_2.png" alt="images/st_window_green_2"></td><td width="42%"><b>st_window_w</b>: faces = <code>"w"</code>, secure = <code>true</code></td></tr>
29333
<tr><td width="8%"><img src="images/st_window_blue_3.png" alt="images/st_window_blue_3"></td><td width="42%"><b>st_window_s</b>: faces = <code>"s"</code>, secure = <code>false</code></td><td width="8%"><img src="images/st_window_green_3.png" alt="images/st_window_green_3"></td><td width="42%"><b>st_window_s</b>: faces = <code>"s"</code>, secure = <code>true</code></td></tr>
29334
<tr><td width="8%"><img src="images/st_window_blue_4.png" alt="images/st_window_blue_4"></td><td width="42%"><b>st_window_sw</b>: faces = <code>"sw"</code>, secure = <code>false</code></td><td width="8%"><img src="images/st_window_green_4.png" alt="images/st_window_green_4"></td><td width="42%"><b>st_window_sw</b>: faces = <code>"sw"</code>, secure = <code>true</code></td></tr>
29335
<tr><td width="8%"><img src="images/st_window_blue_b.png" alt="images/st_window_blue_b"></td><td width="42%"><b>st_window_e</b>: faces = <code>"e"</code>, secure = <code>false</code></td><td width="8%"><img src="images/st_window_green_b.png" alt="images/st_window_green_b"></td><td width="42%"><b>st_window_e</b>: faces = <code>"e"</code>, secure = <code>true</code></td></tr>
29336
<tr><td width="8%"><img src="images/st_window_blue_b2.png" alt="images/st_window_blue_b2"></td><td width="42%"><b>st_window_ew</b>: faces = <code>"ew"</code>, secure = <code>false</code></td><td width="8%"><img src="images/st_window_green_b2.png" alt="images/st_window_green_b2"></td><td width="42%"><b>st_window_ew</b>: faces = <code>"ew"</code>, secure = <code>true</code></td></tr>
29337
<tr><td width="8%"><img src="images/st_window_blue_b3.png" alt="images/st_window_blue_b3"></td><td width="42%"><b>st_window_es</b>: faces = <code>"es"</code>, secure = <code>false</code></td><td width="8%"><img src="images/st_window_green_b3.png" alt="images/st_window_green_b3"></td><td width="42%"><b>st_window_es</b>: faces = <code>"es"</code>, secure = <code>true</code></td></tr>
29338
<tr><td width="8%"><img src="images/st_window_blue_b4.png" alt="images/st_window_blue_b4"></td><td width="42%"><b>st_window_esw</b>: faces = <code>"esw"</code>, secure = <code>false</code></td><td width="8%"><img src="images/st_window_green_b4.png" alt="images/st_window_green_b4"></td><td width="42%"><b>st_window_esw</b>: faces = <code>"esw"</code>, secure = <code>true</code></td></tr>
29339
<tr><td width="8%"><img src="images/st_window_blue_c.png" alt="images/st_window_blue_c"></td><td width="42%"><b>st_window_n</b>: faces = <code>"n"</code>, secure = <code>false</code></td><td width="8%"><img src="images/st_window_green_c.png" alt="images/st_window_green_c"></td><td width="42%"><b>st_window_n</b>: faces = <code>"n"</code>, secure = <code>true</code></td></tr>
29340
<tr><td width="8%"><img src="images/st_window_blue_c2.png" alt="images/st_window_blue_c2"></td><td width="42%"><b>st_window_nw</b>: faces = <code>"nw"</code>, secure = <code>false</code></td><td width="8%"><img src="images/st_window_green_c2.png" alt="images/st_window_green_c2"></td><td width="42%"><b>st_window_nw</b>: faces = <code>"nw"</code>, secure = <code>true</code></td></tr>
29341
<tr><td width="8%"><img src="images/st_window_blue_c3.png" alt="images/st_window_blue_c3"></td><td width="42%"><b>st_window_ns</b>: faces = <code>"ns"</code>, secure = <code>false</code></td><td width="8%"><img src="images/st_window_green_c3.png" alt="images/st_window_green_c3"></td><td width="42%"><b>st_window_ns</b>: faces = <code>"ns"</code>, secure = <code>true</code></td></tr>
29342
<tr><td width="8%"><img src="images/st_window_blue_c4.png" alt="images/st_window_blue_c4"></td><td width="42%"><b>st_window_nsw</b>: faces = <code>"nsw"</code>, secure = <code>false</code></td><td width="8%"><img src="images/st_window_green_c4.png" alt="images/st_window_green_c4"></td><td width="42%"><b>st_window_nsw</b>: faces = <code>"nsw"</code>, secure = <code>true</code></td></tr>
29343
<tr><td width="8%"><img src="images/st_window_blue_d.png" alt="images/st_window_blue_d"></td><td width="42%"><b>st_window_ne</b>: faces = <code>"ne"</code>, secure = <code>false</code></td><td width="8%"><img src="images/st_window_green_d.png" alt="images/st_window_green_d"></td><td width="42%"><b>st_window_ne</b>: faces = <code>"ne"</code>, secure = <code>true</code></td></tr>
29344
<tr><td width="8%"><img src="images/st_window_blue_d2.png" alt="images/st_window_blue_d2"></td><td width="42%"><b>st_window_new</b>: faces = <code>"new"</code>, secure = <code>false</code></td><td width="8%"><img src="images/st_window_green_d2.png" alt="images/st_window_green_d2"></td><td width="42%"><b>st_window_new</b>: faces = <code>"new"</code>, secure = <code>true</code></td></tr>
29345
<tr><td width="8%"><img src="images/st_window_blue_d3.png" alt="images/st_window_blue_d3"></td><td width="42%"><b>st_window_nes</b>: faces = <code>"nes"</code>, secure = <code>false</code></td><td width="8%"><img src="images/st_window_green_d3.png" alt="images/st_window_green_d3"></td><td width="42%"><b>st_window_nes</b>: faces = <code>"nes"</code>, secure = <code>true</code></td></tr>
29346
<tr><td width="8%"><img src="images/st_window_blue_d4.png" alt="images/st_window_blue_d4"></td><td width="42%"><b>st_window_nesw</b>: faces = <code>"nesw"</code>, secure = <code>false</code></td><td width="8%"><img src="images/st_window_green_d4.png" alt="images/st_window_green_d4"></td><td width="42%"><b>st_window_nesw</b>: faces = <code>"nesw"</code>, secure = <code>true</code></td></tr>
29352
<a name="st_005fyinyang"></a>
29353
<table cellpadding="1" cellspacing="1" border="0">
29354
<tr><td valign="middle" align="left">[<a href="#st_005fwindow" title="Previous section in reading order"> < </a>]</td>
29355
<td valign="middle" align="left">[<a href="#Stone-Feature-Summaries" title="Next section in reading order"> > </a>]</td>
29356
<td valign="middle" align="left"> </td>
29357
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
29358
<td valign="middle" align="left">[<a href="#Special-Stones" title="Up section"> Up </a>]</td>
29359
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
29360
<td valign="middle" align="left"> </td>
29361
<td valign="middle" align="left"> </td>
29362
<td valign="middle" align="left"> </td>
29363
<td valign="middle" align="left"> </td>
29364
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
29365
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
29366
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
29367
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
29369
<a name="st_005fyinyang-1"></a>
29370
<h3 class="subsection">9.5.68 st_yinyang</h3>
29371
<a name="index-st_005fyinyang"></a>
29373
<p>A special switch that allows the user to toggle the <a href="#Player-and-Inventory">Player and Inventory</a>
29374
between <code>YIN</code> and <code>YANG</code>.
29376
<p>In contrast to <a href="#it_005fyinyang">it_yinyang</a> the player can not switch at any point of time
29377
but is limited to situations where he can hit the stone by one of the actors
29378
he controls. Of course other objects can send <code>"toggle"</code> messages on
29379
actions to this switch, too. Additionally an <a href="#ot_005fcannonball">ot_cannonball</a> emitted by
29380
an <a href="#st_005fspitter">st_spitter</a> that now happens to fall on top of a yinyang stone
29383
<p>When being activated the yinyang stone switches from the ‘<samp>IDLE</samp>’ state to
29384
the ‘<samp>ACTIVE</samp>’ state which is animated by a turning yinyang symbol. By
29385
default the player switch takes place at the end of this animation with the
29386
stone returning to its ‘<samp>IDLE</samp>’ state.
29388
<p>If you need a yinyang stone that switches without delay you need to set the
29389
‘<samp>instant</samp>’ attribute to ‘<samp>true</samp>’. The animation is executed after
29390
the switching. Note that even an instant stone variant can not be reactivated
29391
until it returns to its ‘<samp>IDLE</samp>’ state after the completion of the animation.
29393
<p>By default the yinyang stone loops between its two states ‘<samp>IDLE</samp>’ and
29394
‘<samp>ACTIVE</samp>’. This means the user can hit the stone many times causing every
29395
time a player toggle action. But if you set ‘<samp>loop</samp>’ to ‘<samp>false</samp>’ the
29396
yinyang stone will forward to the state ‘<samp>INACTIVE</samp>’ after the next
29397
activation. Thus the user can use this stone just once to toggle the players.
29399
<p>You can use an instance of this stone to toggle the player directly at the
29400
start of the level. Use an ‘<samp>ACTIVE</samp>’ yinyang stone to switch after a short
29401
period of animation, or set additionally ‘<samp>instant</samp>’ to ‘<samp>true</samp>’ to switch
29402
the player before the user can act on <code>YIN</code>.
29404
<dl compact="compact">
29405
<dt> <b>Attributes:</b></dt>
29407
<dl compact="compact">
29408
<dt> <b>state</b>, <i>values</i>: <code>IDLE</code>, <code>ACTIVE</code>, <code>INACTIVE</code>; <i>default</i>: <code>IDLE</code> See section <a href="#state">state</a></dt>
29409
<dd><p>An ‘<samp>IDLE</samp>’ yinyang is ready for activation. An ‘<samp>ACTIVE</samp>’ yinyang is
29410
performing its animation and rejects any further attempts to reactivate. An
29411
‘<samp>INACTIVE</samp>’ yinyang reached its final state and can not be reactivated by
29412
actor hits or toggle messages.
29414
<dt> <b>instant</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>false</code></dt>
29415
<dd><p>A default yinyang stone toggles the player after a short period of animation.
29416
An instant yinyang switches directly with start of the animation.
29418
<dt> <b>loop</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code></dt>
29419
<dd><p>A looping yinyang returns to ‘<samp>IDLE</samp>’ state after completion of the
29420
‘<samp>ACTIVE</samp>’ state. A yinyang with a ‘<samp>loop</samp>’ value of ‘<samp>false</samp>’ forwards
29421
to the final ‘<samp>INACTIVE</samp>’ state
29426
<dt> <b>Messages:</b></dt>
29428
<dl compact="compact">
29429
<dt> <b>toggle</b> See section <a href="#toggle">toggle</a></dt>
29430
<dd><p>Activate the yinyang like an actor hitting the stone.
29435
<dt> <b>Action:</b> See section <a href="#target">target</a>, See section <a href="#action">action</a></dt>
29436
<dt> <b>Variants:</b></dt>
29438
<dl compact="compact">
29439
<dt> <img src="images/st_yinyang.png" alt="images/st_yinyang"><p> <b>st_yinyang</b>: state = <code>IDLE</code>
29441
<dt> <img src="images/st_yinyang.png" alt="images/st_yinyang"><p> <b>st_yinyang_active</b>: state = <code>ACTIVE</code>
29443
<dt> <img src="images/st_yinyang_inactive.png" alt="images/st_yinyang_inactive"><p> <b>st_yinyang_inactive</b>: state = <code>INACTIVE</code>
29445
<dt> <img src="images/st_yinyang.png" alt="images/st_yinyang"><p> <b>st_yinyang_instant</b>: instant = <code>true</code>, state = <code>IDLE</code>
29453
<a name="Stone-Feature-Summaries"></a>
29454
<table cellpadding="1" cellspacing="1" border="0">
29455
<tr><td valign="middle" align="left">[<a href="#st_005fyinyang" title="Previous section in reading order"> < </a>]</td>
29456
<td valign="middle" align="left">[<a href="#Transparent-Stones" title="Next section in reading order"> > </a>]</td>
29457
<td valign="middle" align="left"> </td>
29458
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
29459
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Up section"> Up </a>]</td>
29460
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
29461
<td valign="middle" align="left"> </td>
29462
<td valign="middle" align="left"> </td>
29463
<td valign="middle" align="left"> </td>
29464
<td valign="middle" align="left"> </td>
29465
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
29466
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
29467
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
29468
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
29470
<a name="Stone-Feature-Summaries-1"></a>
29471
<h2 class="section">9.6 Stone Feature Summaries</h2>
29473
<table class="menu" border="0" cellspacing="0">
29474
<tr><td align="left" valign="top"><a href="#Transparent-Stones">9.6.1 Transparent Stones</a></td><td> </td><td align="left" valign="top">
29476
<tr><td align="left" valign="top"><a href="#Breakable-Stones">9.6.2 Breakable Stones</a></td><td> </td><td align="left" valign="top">
29481
<a name="Transparent-Stones"></a>
29482
<table cellpadding="1" cellspacing="1" border="0">
29483
<tr><td valign="middle" align="left">[<a href="#Stone-Feature-Summaries" title="Previous section in reading order"> < </a>]</td>
29484
<td valign="middle" align="left">[<a href="#Breakable-Stones" title="Next section in reading order"> > </a>]</td>
29485
<td valign="middle" align="left"> </td>
29486
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
29487
<td valign="middle" align="left">[<a href="#Stone-Feature-Summaries" title="Up section"> Up </a>]</td>
29488
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
29489
<td valign="middle" align="left"> </td>
29490
<td valign="middle" align="left"> </td>
29491
<td valign="middle" align="left"> </td>
29492
<td valign="middle" align="left"> </td>
29493
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
29494
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
29495
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
29496
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
29498
<a name="Transparent-Stones-1"></a>
29499
<h3 class="subsection">9.6.1 Transparent Stones</h3>
29501
<p>Enigma provides a collection of transparent stones, all similar, but with
29502
different features. Some of them may be passed after the use of an
29503
<a href="#it_005fcherry">it_cherry</a>, others will be just pushed. Some are transparent for lasers,
29504
but not all! This table shows their exact properties.
29507
<thead><tr><th>class</th><th>kind:</th><th>actor is visible:</th><th>actor is invisible:</th><th>lasertransparent:</th></tr></thead>
29508
<tr><td><a href="#st_005frawglass">st_rawglass</a></td><td>st_rawglass</td><td>rebound</td><td>pass</td><td>yes</td></tr>
29509
<tr><td><a href="#st_005frawglass">st_rawglass</a></td><td>st_rawglass_movable</td><td>push</td><td>pass</td><td>yes</td></tr>
29510
<tr><td><a href="#st_005flightglass">st_lightglass</a></td><td>st_lightglass</td><td>rebound</td><td>pass</td><td>yes</td></tr>
29511
<tr><td><a href="#st_005flightglass">st_lightglass</a></td><td>st_lightglass_movable</td><td>push</td><td>push</td><td>yes</td></tr>
29512
<tr><td><a href="#st_005flightglass">st_lightglass</a></td><td>st_lightglass_hollow</td><td>pass</td><td>pass</td><td>yes</td></tr>
29513
<tr><td><a href="#st_005fdarkglass">st_darkglass</a></td><td>st_darkglass</td><td>rebound</td><td>pass</td><td>no</td></tr>
29514
<tr><td><a href="#st_005fdarkglass">st_darkglass</a></td><td>st_darkglass_movable</td><td>push</td><td>push</td><td>no</td></tr>
29515
<tr><td><a href="#st_005fdarkglass">st_darkglass</a></td><td>st_darkglass_hollow</td><td>pass</td><td>pass</td><td>yes</td></tr>
29516
<tr><td><a href="#st_005fredfiber">st_redfiber</a></td><td>st_redfiber</td><td>rebound</td><td>rebound</td><td>yes</td></tr>
29517
<tr><td><a href="#st_005fpolarswitch">st_polarswitch</a></td><td>st_polarswitch_on</td><td>toggle</td><td>pass</td><td>yes</td></tr>
29518
<tr><td><a href="#st_005fpolarswitch">st_polarswitch</a></td><td>st_polarswitch_off</td><td>toggle</td><td>pass</td><td>no</td></tr>
29519
<tr><td><a href="#st_005fbeads">st_beads</a></td><td>st_beads</td><td>leave</td><td>pass</td><td>no</td></tr>
29520
<tr><td><a href="#st_005flightpassenger">st_lightpassenger</a></td><td>st_lightpassenger_off</td><td>rebound</td><td>rebound</td><td>no</td></tr>
29521
<tr><td><a href="#st_005fice">st_ice</a></td><td>st_ice</td><td>push</td><td>push</td><td>yes</td></tr>
29522
<tr><td><a href="#st_005finvisible">st_invisible</a></td><td>st_invisible</td><td>rebound</td><td>rebound</td><td>no</td></tr>
29523
<tr><td><a href="#st_005finvisible">st_invisible</a></td><td>st_invisible_movable</td><td>push</td><td>push</td><td>no</td></tr>
29524
<tr><td><a href="#st_005finvisible">st_invisible</a></td><td>st_invisible_hollow</td><td>pass</td><td>pass</td><td>no</td></tr>
29525
<tr><td><a href="#st_005fghost">st_ghost</a></td><td>st_ghost_purplemarble</td><td>rebound</td><td>rebound</td><td>no</td></tr>
29526
<tr><td><a href="#st_005fghost">st_ghost</a></td><td>st_ghost_greenbrown</td><td>rebound</td><td>rebound</td><td>yes</td></tr>
29527
<tr><td><a href="#st_005fghost">st_ghost</a></td><td>st_ghost_break</td><td>rebound</td><td>rebound</td><td>yes</td></tr>
29530
<p>These entries can be memorized as follows: A stone is transparent for laser
29531
light if it is hollow, but not if it is dark. Exception is ‘<samp>st_beads</samp>’,
29532
whose irregular sides would scatter the beam. A stone can always be passed by
29533
invisible actors, with three exceptions: ‘<samp>st_redfiber</samp>’, whose inside is
29534
filled with red stripes, and the two movables ‘<samp>st_lightglass_movable</samp>’ and
29535
‘<samp>st_darkglass_movable</samp>’ which have a non-glass frame which the actor can
29536
use to move the stone. <code>st_rawglass_movable</code> does not have such a frame
29537
and can not be moved by an invisible actor.
29540
<a name="Breakable-Stones"></a>
29541
<table cellpadding="1" cellspacing="1" border="0">
29542
<tr><td valign="middle" align="left">[<a href="#Transparent-Stones" title="Previous section in reading order"> < </a>]</td>
29543
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next section in reading order"> > </a>]</td>
29544
<td valign="middle" align="left"> </td>
29545
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
29546
<td valign="middle" align="left">[<a href="#Stone-Feature-Summaries" title="Up section"> Up </a>]</td>
29547
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Next chapter"> >> </a>]</td>
29548
<td valign="middle" align="left"> </td>
29549
<td valign="middle" align="left"> </td>
29550
<td valign="middle" align="left"> </td>
29551
<td valign="middle" align="left"> </td>
29552
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
29553
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
29554
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
29555
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
29557
<a name="Breakable-Stones-1"></a>
29558
<h3 class="subsection">9.6.2 Breakable Stones</h3>
29562
<a name="Actor-Objects"></a>
29563
<table cellpadding="1" cellspacing="1" border="0">
29564
<tr><td valign="middle" align="left">[<a href="#Breakable-Stones" title="Previous section in reading order"> < </a>]</td>
29565
<td valign="middle" align="left">[<a href="#Actor-Attributes" title="Next section in reading order"> > </a>]</td>
29566
<td valign="middle" align="left"> </td>
29567
<td valign="middle" align="left">[<a href="#Stone-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
29568
<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up </a>]</td>
29569
<td valign="middle" align="left">[<a href="#Other-Objects" title="Next chapter"> >> </a>]</td>
29570
<td valign="middle" align="left"> </td>
29571
<td valign="middle" align="left"> </td>
29572
<td valign="middle" align="left"> </td>
29573
<td valign="middle" align="left"> </td>
29574
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
29575
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
29576
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
29577
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
29579
<a name="Actor-Objects-1"></a>
29580
<h1 class="chapter">10. Actor Objects</h1>
29582
<table class="menu" border="0" cellspacing="0">
29583
<tr><td align="left" valign="top"><a href="#Actor-Attributes">10.1 Actor Attributes</a></td><td> </td><td align="left" valign="top"> Common attributes
29585
<tr><td align="left" valign="top"><a href="#Actors">10.2 Actors</a></td><td> </td><td align="left" valign="top"> All actors
29587
<tr><td align="left" valign="top"><a href="#Actor-Features">10.3 Actor Features</a></td><td> </td><td align="left" valign="top"> Common noteworthy features
29593
<a name="Actor-Attributes"></a>
29594
<table cellpadding="1" cellspacing="1" border="0">
29595
<tr><td valign="middle" align="left">[<a href="#Actor-Objects" title="Previous section in reading order"> < </a>]</td>
29596
<td valign="middle" align="left">[<a href="#adhesion-_0028actor_0029" title="Next section in reading order"> > </a>]</td>
29597
<td valign="middle" align="left"> </td>
29598
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
29599
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Up section"> Up </a>]</td>
29600
<td valign="middle" align="left">[<a href="#Other-Objects" title="Next chapter"> >> </a>]</td>
29601
<td valign="middle" align="left"> </td>
29602
<td valign="middle" align="left"> </td>
29603
<td valign="middle" align="left"> </td>
29604
<td valign="middle" align="left"> </td>
29605
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
29606
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
29607
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
29608
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
29610
<a name="Actor-Attributes-1"></a>
29611
<h2 class="section">10.1 Actor Attributes</h2>
29613
<table class="menu" border="0" cellspacing="0">
29614
<tr><td align="left" valign="top"><a href="#adhesion-_0028actor_0029">10.1.1 adhesion (actor)</a></td><td> </td><td align="left" valign="top"> Effectiveness of mousemotion
29616
<tr><td align="left" valign="top"><a href="#charge">10.1.2 charge</a></td><td> </td><td align="left" valign="top"> Initial electrical charge
29618
<tr><td align="left" valign="top"><a href="#controllers">10.1.3 controllers</a></td><td> </td><td align="left" valign="top"> Mouse
29620
<tr><td align="left" valign="top"><a href="#color">10.1.4 color</a></td><td> </td><td align="left" valign="top"> Color
29622
<tr><td align="left" valign="top"><a href="#essential">10.1.5 essential</a></td><td> </td><td align="left" valign="top">
29624
<tr><td align="left" valign="top"><a href="#essential_005fid">10.1.6 essential_id</a></td><td> </td><td align="left" valign="top">
29626
<tr><td align="left" valign="top"><a href="#owner">10.1.7 owner</a></td><td> </td><td align="left" valign="top"> Inventory owner
29628
<tr><td align="left" valign="top"><a href="#velocity_005fx">10.1.8 velocity_x</a></td><td> </td><td align="left" valign="top"> Initial velocity
29630
<tr><td align="left" valign="top"><a href="#velocity_005fy">10.1.9 velocity_y</a></td><td> </td><td align="left" valign="top"> Initial velocity
29636
<a name="adhesion-_0028actor_0029"></a>
29637
<table cellpadding="1" cellspacing="1" border="0">
29638
<tr><td valign="middle" align="left">[<a href="#Actor-Attributes" title="Previous section in reading order"> < </a>]</td>
29639
<td valign="middle" align="left">[<a href="#charge" title="Next section in reading order"> > </a>]</td>
29640
<td valign="middle" align="left"> </td>
29641
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
29642
<td valign="middle" align="left">[<a href="#Actor-Attributes" title="Up section"> Up </a>]</td>
29643
<td valign="middle" align="left">[<a href="#Other-Objects" title="Next chapter"> >> </a>]</td>
29644
<td valign="middle" align="left"> </td>
29645
<td valign="middle" align="left"> </td>
29646
<td valign="middle" align="left"> </td>
29647
<td valign="middle" align="left"> </td>
29648
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
29649
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
29650
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
29651
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
29653
<a name="adhesion-_0028actor_0029-1"></a>
29654
<h3 class="subsection">10.1.1 adhesion (actor)</h3>
29656
<p>The responsiveness of an actor on mouse movements. It is a scalar factor to
29657
the accelerating force applied to the actor. Note that mouse forces are only
29658
applied to an actor if the <a href="#controllers">controllers</a> attribute allows forces at all.
29659
Vice versa you should exclude an actor from mouse forces by usage of the
29660
<a href="#controllers">controllers</a> attribute instead of setting its adhesion to zero. The
29661
adhesion may take negative values, too. Such values correspond to inverse forces.
29663
<dl compact="compact">
29664
<dt> <b>Type:</b> number</dt>
29665
<dt> <b>Values:</b> float number</dt>
29666
<dt> <b>Default:</b> <code>0.0</code></dt>
29667
<dt> <b>Access:</b> read/write</dt>
29671
<a name="charge"></a>
29672
<table cellpadding="1" cellspacing="1" border="0">
29673
<tr><td valign="middle" align="left">[<a href="#adhesion-_0028actor_0029" title="Previous section in reading order"> < </a>]</td>
29674
<td valign="middle" align="left">[<a href="#controllers" title="Next section in reading order"> > </a>]</td>
29675
<td valign="middle" align="left"> </td>
29676
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
29677
<td valign="middle" align="left">[<a href="#Actor-Attributes" title="Up section"> Up </a>]</td>
29678
<td valign="middle" align="left">[<a href="#Other-Objects" title="Next chapter"> >> </a>]</td>
29679
<td valign="middle" align="left"> </td>
29680
<td valign="middle" align="left"> </td>
29681
<td valign="middle" align="left"> </td>
29682
<td valign="middle" align="left"> </td>
29683
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
29684
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
29685
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
29686
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
29688
<a name="charge-1"></a>
29689
<h3 class="subsection">10.1.2 charge</h3>
29691
<p>The initial electrical charge that a new actor starts with when being added to
29692
the world. Actors do charge and recharge by hitting <a href="#st_005fcharge">st_charge</a>. Hits
29693
of charged actors among themselves does not affect their charge load. Each
29694
actor keeps its charge load.
29696
<p>The electrical force on a charged actor is given by its own load and the load
29697
and position of all other charged actors. Note that a constant global factor
29698
<a href="#ElectricStrength">ElectricStrength</a> is applied, too. If this factor is negative, equal
29699
charged actors may even attract each other.
29701
<dl compact="compact">
29702
<dt> <b>Type:</b> number</dt>
29703
<dt> <b>Values:</b> float number</dt>
29704
<dt> <b>Default:</b> <code>0.0</code></dt>
29705
<dt> <b>Access:</b> read/write</dt>
29709
<a name="controllers"></a>
29710
<table cellpadding="1" cellspacing="1" border="0">
29711
<tr><td valign="middle" align="left">[<a href="#charge" title="Previous section in reading order"> < </a>]</td>
29712
<td valign="middle" align="left">[<a href="#color" title="Next section in reading order"> > </a>]</td>
29713
<td valign="middle" align="left"> </td>
29714
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
29715
<td valign="middle" align="left">[<a href="#Actor-Attributes" title="Up section"> Up </a>]</td>
29716
<td valign="middle" align="left">[<a href="#Other-Objects" title="Next chapter"> >> </a>]</td>
29717
<td valign="middle" align="left"> </td>
29718
<td valign="middle" align="left"> </td>
29719
<td valign="middle" align="left"> </td>
29720
<td valign="middle" align="left"> </td>
29721
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
29722
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
29723
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
29724
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
29726
<a name="controllers-1"></a>
29727
<h3 class="subsection">10.1.3 controllers</h3>
29729
<p>The players that can control the actor by their mouse movements.
29731
<dl compact="compact">
29732
<dt> <b>Type:</b> number</dt>
29733
<dt> <b>Values:</b> <code>CTRL_NONE</code>, <code>CTRL_YIN</code>, <code>CTRL_YANG</code>, <code>CTRL_YINYANG</code></dt>
29734
<dt> <b>Default:</b> <code>CTRL_NONE</code></dt>
29735
<dt> <b>Access:</b> read/write</dt>
29739
<a name="color"></a>
29740
<table cellpadding="1" cellspacing="1" border="0">
29741
<tr><td valign="middle" align="left">[<a href="#controllers" title="Previous section in reading order"> < </a>]</td>
29742
<td valign="middle" align="left">[<a href="#essential" title="Next section in reading order"> > </a>]</td>
29743
<td valign="middle" align="left"> </td>
29744
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
29745
<td valign="middle" align="left">[<a href="#Actor-Attributes" title="Up section"> Up </a>]</td>
29746
<td valign="middle" align="left">[<a href="#Other-Objects" title="Next chapter"> >> </a>]</td>
29747
<td valign="middle" align="left"> </td>
29748
<td valign="middle" align="left"> </td>
29749
<td valign="middle" align="left"> </td>
29750
<td valign="middle" align="left"> </td>
29751
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
29752
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
29753
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
29754
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
29756
<a name="color-1"></a>
29757
<h3 class="subsection">10.1.4 color</h3>
29759
<p>The logical color of the actor. All actors besides <a href="#ac_005fmarble">ac_marble</a>s,
29760
<a href="#ac_005fpearl">ac_pearl</a>s and <a href="#ac_005fkiller">ac_killer</a>s will report color <code>nil</code>. The color of
29761
an actor can not be changed, it is a read only attribute.
29763
<dl compact="compact">
29764
<dt> <b>Type:</b> number</dt>
29765
<dt> <b>Values:</b> <code>BLACK</code>, <code>WHITE</code>, <code>nil</code></dt>
29766
<dt> <b>Default:</b> <code>nil</code></dt>
29767
<dt> <b>Access:</b> read only</dt>
29771
<a name="essential"></a>
29772
<table cellpadding="1" cellspacing="1" border="0">
29773
<tr><td valign="middle" align="left">[<a href="#color" title="Previous section in reading order"> < </a>]</td>
29774
<td valign="middle" align="left">[<a href="#essential_005fid" title="Next section in reading order"> > </a>]</td>
29775
<td valign="middle" align="left"> </td>
29776
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
29777
<td valign="middle" align="left">[<a href="#Actor-Attributes" title="Up section"> Up </a>]</td>
29778
<td valign="middle" align="left">[<a href="#Other-Objects" title="Next chapter"> >> </a>]</td>
29779
<td valign="middle" align="left"> </td>
29780
<td valign="middle" align="left"> </td>
29781
<td valign="middle" align="left"> </td>
29782
<td valign="middle" align="left"> </td>
29783
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
29784
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
29785
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
29786
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
29788
<a name="essential-1"></a>
29789
<h3 class="subsection">10.1.5 essential</h3>
29791
<p>Describes the necessity of an actor to be alive in case of multiple actors being
29792
attached to a player. A value ‘<samp>DISPENSABLE</samp>’ marks an actor as not essential.
29793
The player may well continue to play with other actors that he controls which
29794
are still alive. A value of ‘<samp>INDISPENSABLE</samp>’ marks an actor as totally
29795
necessary. If such an actor cannot be resurrected after a death, the player is
29796
essentially dead. A value of ‘<samp>PERKIND</samp>’ marks an actor as partially
29797
essential. Not the actor itself needs to survive but the number of actors of
29798
its kind controlled by the player need to be larger than the number of actors
29799
with value ‘<samp>PERKIND</samp>’. For example, marking 4 out of 5 <a href="#ac_005fpearl">ac_pearl</a> with
29800
‘<samp>PERKIND</samp>’ means that the player is dead if 2 pearls are no longer alive.
29802
<p>Of course shattered or sunken actors will first be resurrected if an
29803
<a href="#it_005fextralife">it_extralife</a> is available and the global attribute <a href="#ConserveLevel">ConserveLevel</a>
29804
allows a resurrection.
29806
<p>For more details about level restart see <a href="#Level-Restart">Level Restart</a>.
29808
<dl compact="compact">
29809
<dt> <b>Type:</b> number</dt>
29810
<dt> <b>Values:</b> <code>DISPENSABLE</code>, <code>INDISPENSABLE</code>, <code>PERKIND</code></dt>
29811
<dt> <b>Default:</b> <code></code></dt>
29812
<dt> <b>Access:</b> read/write</dt>
29816
<a name="essential_005fid"></a>
29817
<table cellpadding="1" cellspacing="1" border="0">
29818
<tr><td valign="middle" align="left">[<a href="#essential" title="Previous section in reading order"> < </a>]</td>
29819
<td valign="middle" align="left">[<a href="#owner" title="Next section in reading order"> > </a>]</td>
29820
<td valign="middle" align="left"> </td>
29821
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
29822
<td valign="middle" align="left">[<a href="#Actor-Attributes" title="Up section"> Up </a>]</td>
29823
<td valign="middle" align="left">[<a href="#Other-Objects" title="Next chapter"> >> </a>]</td>
29824
<td valign="middle" align="left"> </td>
29825
<td valign="middle" align="left"> </td>
29826
<td valign="middle" align="left"> </td>
29827
<td valign="middle" align="left"> </td>
29828
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
29829
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
29830
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
29831
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
29833
<a name="essential_005fid-1"></a>
29834
<h3 class="subsection">10.1.6 essential_id</h3>
29836
<p>Since a player may control actors of different kinds at the same time, the
29837
essentialness of actors is limited to its kind via this id. It is possible to
29838
group actors of different kinds into an essential group via this id. The engine
29839
keeps this id even if actors are transformed into other kinds like on activation
29840
of an <a href="#it_005fdrop">it_drop</a>.
29842
<dl compact="compact">
29843
<dt> <b>Type:</b> string</dt>
29844
<dt> <b>Values:</b> any</dt>
29845
<dt> <b>Default:</b> model name of actor</dt>
29846
<dt> <b>Access:</b> read/write</dt>
29850
<a name="owner"></a>
29851
<table cellpadding="1" cellspacing="1" border="0">
29852
<tr><td valign="middle" align="left">[<a href="#essential_005fid" title="Previous section in reading order"> < </a>]</td>
29853
<td valign="middle" align="left">[<a href="#velocity_005fx" title="Next section in reading order"> > </a>]</td>
29854
<td valign="middle" align="left"> </td>
29855
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
29856
<td valign="middle" align="left">[<a href="#Actor-Attributes" title="Up section"> Up </a>]</td>
29857
<td valign="middle" align="left">[<a href="#Other-Objects" title="Next chapter"> >> </a>]</td>
29858
<td valign="middle" align="left"> </td>
29859
<td valign="middle" align="left"> </td>
29860
<td valign="middle" align="left"> </td>
29861
<td valign="middle" align="left"> </td>
29862
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
29863
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
29864
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
29865
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
29867
<a name="owner-1"></a>
29868
<h3 class="subsection">10.1.7 owner</h3>
29870
<p>The player that owns the actor. The owner gets all items picked up by an actor
29871
added to his inventory. The ownership of an actor does not influence the
29872
ability of a player to control the actors movements. Note that you need to
29873
assign the value <code>DEFAULT</code> in Lua tables to set the value <code>nil</code> due to
29874
the well known Lua table <a href="#Caveats">Caveats</a>. The other two values <code>YIN</code> and
29875
<code>YANG</code> are common <a href="#state-values">state values</a>.
29877
<dl compact="compact">
29878
<dt> <b>Type:</b> number</dt>
29879
<dt> <b>Values:</b> <code>YIN</code>, <code>YANG</code>, <code>nil</code></dt>
29880
<dt> <b>Default:</b> <code>nil</code></dt>
29881
<dt> <b>Access:</b> read/write</dt>
29885
<a name="velocity_005fx"></a>
29886
<table cellpadding="1" cellspacing="1" border="0">
29887
<tr><td valign="middle" align="left">[<a href="#owner" title="Previous section in reading order"> < </a>]</td>
29888
<td valign="middle" align="left">[<a href="#velocity_005fy" title="Next section in reading order"> > </a>]</td>
29889
<td valign="middle" align="left"> </td>
29890
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
29891
<td valign="middle" align="left">[<a href="#Actor-Attributes" title="Up section"> Up </a>]</td>
29892
<td valign="middle" align="left">[<a href="#Other-Objects" title="Next chapter"> >> </a>]</td>
29893
<td valign="middle" align="left"> </td>
29894
<td valign="middle" align="left"> </td>
29895
<td valign="middle" align="left"> </td>
29896
<td valign="middle" align="left"> </td>
29897
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
29898
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
29899
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
29900
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
29902
<a name="velocity_005fx-1"></a>
29903
<h3 class="subsection">10.1.8 velocity_x</h3>
29905
<p>The velocity into x direction that a new actor starts with when being added to
29906
the world. Even though this attribute is readable it does not reflect the
29907
current velocity of an actor during runtime.
29909
<dl compact="compact">
29910
<dt> <b>Type:</b> number</dt>
29911
<dt> <b>Values:</b> float number</dt>
29912
<dt> <b>Default:</b> <code>0.0</code></dt>
29913
<dt> <b>Access:</b> read/write</dt>
29917
<a name="velocity_005fy"></a>
29918
<table cellpadding="1" cellspacing="1" border="0">
29919
<tr><td valign="middle" align="left">[<a href="#velocity_005fx" title="Previous section in reading order"> < </a>]</td>
29920
<td valign="middle" align="left">[<a href="#Actors" title="Next section in reading order"> > </a>]</td>
29921
<td valign="middle" align="left"> </td>
29922
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
29923
<td valign="middle" align="left">[<a href="#Actor-Attributes" title="Up section"> Up </a>]</td>
29924
<td valign="middle" align="left">[<a href="#Other-Objects" title="Next chapter"> >> </a>]</td>
29925
<td valign="middle" align="left"> </td>
29926
<td valign="middle" align="left"> </td>
29927
<td valign="middle" align="left"> </td>
29928
<td valign="middle" align="left"> </td>
29929
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
29930
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
29931
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
29932
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
29934
<a name="velocity_005fy-1"></a>
29935
<h3 class="subsection">10.1.9 velocity_y</h3>
29937
<p>The velocity into y direction that a new actor starts with when being added to
29938
the world. Even though this attribute is readable it does not reflect the
29939
current velocity of an actor during runtime.
29941
<dl compact="compact">
29942
<dt> <b>Type:</b> number</dt>
29943
<dt> <b>Values:</b> float number</dt>
29944
<dt> <b>Default:</b> <code>0.0</code></dt>
29945
<dt> <b>Access:</b> read/write</dt>
29949
<a name="Actors"></a>
29950
<table cellpadding="1" cellspacing="1" border="0">
29951
<tr><td valign="middle" align="left">[<a href="#velocity_005fy" title="Previous section in reading order"> < </a>]</td>
29952
<td valign="middle" align="left">[<a href="#ac_005fbug" title="Next section in reading order"> > </a>]</td>
29953
<td valign="middle" align="left"> </td>
29954
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
29955
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Up section"> Up </a>]</td>
29956
<td valign="middle" align="left">[<a href="#Other-Objects" title="Next chapter"> >> </a>]</td>
29957
<td valign="middle" align="left"> </td>
29958
<td valign="middle" align="left"> </td>
29959
<td valign="middle" align="left"> </td>
29960
<td valign="middle" align="left"> </td>
29961
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
29962
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
29963
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
29964
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
29966
<a name="Actors-1"></a>
29967
<h2 class="section">10.2 Actors</h2>
29969
<table class="menu" border="0" cellspacing="0">
29970
<tr><td align="left" valign="top"><a href="#ac_005fbug">10.2.1 ac_bug</a></td><td> </td><td align="left" valign="top">
29972
<tr><td align="left" valign="top"><a href="#ac_005fhorse">10.2.2 ac_horse</a></td><td> </td><td align="left" valign="top">
29974
<tr><td align="left" valign="top"><a href="#ac_005fkiller">10.2.3 ac_killer</a></td><td> </td><td align="left" valign="top">
29976
<tr><td align="left" valign="top"><a href="#ac_005fmarble">10.2.4 ac_marble</a></td><td> </td><td align="left" valign="top">
29978
<tr><td align="left" valign="top"><a href="#ac_005fpearl">10.2.5 ac_pearl</a></td><td> </td><td align="left" valign="top">
29980
<tr><td align="left" valign="top"><a href="#ac_005frotor">10.2.6 ac_rotor</a></td><td> </td><td align="left" valign="top">
29982
<tr><td align="left" valign="top"><a href="#ac_005ftop">10.2.7 ac_top</a></td><td> </td><td align="left" valign="top">
29987
<a name="ac_005fbug"></a>
29988
<table cellpadding="1" cellspacing="1" border="0">
29989
<tr><td valign="middle" align="left">[<a href="#Actors" title="Previous section in reading order"> < </a>]</td>
29990
<td valign="middle" align="left">[<a href="#ac_005fhorse" title="Next section in reading order"> > </a>]</td>
29991
<td valign="middle" align="left"> </td>
29992
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
29993
<td valign="middle" align="left">[<a href="#Actors" title="Up section"> Up </a>]</td>
29994
<td valign="middle" align="left">[<a href="#Other-Objects" title="Next chapter"> >> </a>]</td>
29995
<td valign="middle" align="left"> </td>
29996
<td valign="middle" align="left"> </td>
29997
<td valign="middle" align="left"> </td>
29998
<td valign="middle" align="left"> </td>
29999
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
30000
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
30001
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
30002
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
30004
<a name="ac_005fbug-1"></a>
30005
<h3 class="subsection">10.2.1 ac_bug</h3>
30006
<a name="index-ac_005fbug"></a>
30008
<p>An actor that looks like a small grey ball with two red dots on it. Bugs are
30009
harmless actors that do not affect other actors and they are usually passive.
30011
<p>In contrast to the main actors they can not jump or pass an <a href="#it_005fvortex">it_vortex</a>, and
30012
will not sink, fall or shatter. Bugs are immortal.
30014
<p>Note that you need to set ‘<samp>controllers</samp>’ as well as ‘<samp>adhesion</samp>’ to proper
30015
values if you want a player to control a bug directly. If a bug is owned by a
30016
player <a href="#fl_005fthief">fl_thief</a> and <a href="#st_005fthief">st_thief</a> will steal items from it.
30018
<dl compact="compact">
30019
<dt> <b>Attributes:</b> common actor attributes</dt>
30020
<dd><dl compact="compact">
30021
<dt> <b>adhesion</b> <i>values</i>: number; <i>default</i>: <code>0.0</code>; See section <a href="#adhesion">adhesion</a></dt>
30022
<dt> <b>controllers</b> <i>values</i>: <code>CTRL_NONE</code>, <code>CTRL_YIN</code>, <code>CTRL_YANG</code>, <code>CTRL_YINYANG</code>; <i>default</i>: <code>CTRL_NONE</code>; See section <a href="#controllers">controllers</a></dt>
30023
<dt> <b>owner</b> <i>values</i>: <code>YIN</code>, <code>YANG</code>, <code>nil</code>; <i>default</i>: <code>nil</code>; See section <a href="#owner">owner</a></dt>
30024
<dt> <b>mass</b> <i>values</i>: positive float number; <i>default</i>: <code>0.7</code>; <i>access</i>: read only</dt>
30028
<dt> <b>Messages:</b> none</dt>
30029
<dt> <b>Variants:</b></dt>
30031
<dl compact="compact">
30032
<dt> <img src="images/ac_bug.png" alt="images/ac_bug"><p> <b>ac_bug</b>: color = <code>nil</code>, controllers = <code>CTRL_NONE</code>, owner = <code>nil</code>
30040
<a name="ac_005fhorse"></a>
30041
<table cellpadding="1" cellspacing="1" border="0">
30042
<tr><td valign="middle" align="left">[<a href="#ac_005fbug" title="Previous section in reading order"> < </a>]</td>
30043
<td valign="middle" align="left">[<a href="#ac_005fkiller" title="Next section in reading order"> > </a>]</td>
30044
<td valign="middle" align="left"> </td>
30045
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
30046
<td valign="middle" align="left">[<a href="#Actors" title="Up section"> Up </a>]</td>
30047
<td valign="middle" align="left">[<a href="#Other-Objects" title="Next chapter"> >> </a>]</td>
30048
<td valign="middle" align="left"> </td>
30049
<td valign="middle" align="left"> </td>
30050
<td valign="middle" align="left"> </td>
30051
<td valign="middle" align="left"> </td>
30052
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
30053
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
30054
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
30055
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
30057
<a name="ac_005fhorse-1"></a>
30058
<h3 class="subsection">10.2.2 ac_horse</h3>
30059
<a name="index-ac_005fhorse"></a>
30061
<p>A large blue disc like actor. It is called a horse because in some future Enigma
30062
release <a href="#ac_005fmarble">ac_marble</a>s and <a href="#ac_005fpearl">ac_pearl</a>s should be able to ride on it.
30064
<p>In contrast to the main actors it can not jump or pass an <a href="#it_005fvortex">it_vortex</a>, and
30065
will not sink, fall or shatter. A horse is immortal.
30067
<p>By default a horse is a passive actor. But nevertheless a horse may move along
30068
its own path. A set of attributes let you control the movement in various ways.
30070
<p>The most simple approach just uses the attributes ‘<samp>destination</samp>’ and
30071
‘<samp>strength</samp>’. You can mark a path marked by an arbitrary number of positions
30072
given as <a href="#destination">destination</a>s. The horse will try to reach the destinations one
30073
in a row with a force given by the strength attribute. As soon as one
30074
destination has been reached the horse targets for the next position and will
30075
start over again as soon as the last position has been reached. In this
30076
‘<samp>steady</samp>’ mode the horse is continously accelerated into the direction of
30077
the next destination target. If it misses the destination on the first approach
30078
it will return by a loop again until it finally passes the target position. This
30079
approach is rather crude and not well suited for a precise control needed if the
30080
horse should hit certain stones or move on a well defined trajectory.
30082
<p>Setting ‘<samp>steady</samp>’ to the value <code>false</code> causes another accelaration
30083
algorithm that will decelerate the horse on approach to its target position.
30084
This allows a very precise control over the path taken by the horse.
30086
<p>Furtheron you can request anytime the index of the current destination target. You
30087
can even set ‘<samp>destidx</samp>’ anytime. Note that this index counts the destination
30088
targets starting with 0 and taking every position into account, which might not
30089
be in sync with the destination token number in case a single token part
30090
addresses several positions at a time.
30092
<p>Furtheron you can control the behaviour of the horse when it reaches the last
30093
destination target. It either stops or restarts if the attribute ‘<samp>loop</samp>’
30094
is set to <code>true</code>.
30096
<p>Setting either ‘<samp>destination</samp>’ to <code>nil</code>, ‘<samp>destidx</samp>’ or ‘<samp>strength</samp>’
30097
to a negative value caues the horse to stop its automatic travel.
30099
<p>On its move a horse tries to reach the target position. But if the target
30100
position is blocked by a stone, the horse continues its travel targeting the
30101
next destination position as soon as it hits the stone. Thus you can use the
30102
horse to toggle <a href="#st_005fswitch">st_switch</a> and other active stones.
30104
<p>Whenever the horse reaches a target position it will perform its action. You
30105
can reset the ‘<samp>destination</samp>’ and other attributes within the callback to
30106
define a new destination target.
30108
<p>Note that you need to set ‘<samp>controllers</samp>’ as well as ‘<samp>adhesion</samp>’ to proper
30109
values if you want a player to control a horse directly.
30111
<dl compact="compact">
30112
<dt> <b>Attributes:</b></dt>
30114
<dl compact="compact">
30115
<dt> <b>adhesion</b> <i>values</i>: number; <i>default</i>: <code>0.0</code>; See section <a href="#adhesion">adhesion</a></dt>
30116
<dt> <b>controllers</b> <i>values</i>: <code>CTRL_NONE</code>, <code>CTRL_YIN</code>, <code>CTRL_YANG</code>, <code>CTRL_YINYANG</code>; <i>default</i>: <code>CTRL_NONE</code>; See section <a href="#controllers">controllers</a></dt>
30117
<dt> <b>owner</b> <i>values</i>: <code>YIN</code>, <code>YANG</code>, <code>nil</code>; <i>default</i>: <code>nil</code>; See section <a href="#owner">owner</a></dt>
30118
<dt> <b>destination</b>, <i>values</i>: position or tokens; <i>default</i>: <code>nil</code> See section <a href="#destination">destination</a></dt>
30119
<dd><p>A path given by a sequence of positions.
30121
<dt> <b>destidx</b> <i>values</i>: integer number; <i>default</i>: <code>0</code></dt>
30122
<dd><p>The index of the targeted destination.
30124
<dt> <b>loop</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code></dt>
30125
<dd><p>Flag that determines whether ‘<samp>destidx</samp>’ is reset to its default when the
30126
last destination has been reached.
30128
<dt> <b>strength</b> <i>values</i>: float number; <i>default</i>: <code>+10.0</code></dt>
30129
<dd><p>A scalar factor for the horse force that drive it to the next destination.
30131
<dt> <b>steady</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code></dt>
30132
<dd><p>Flag that determines the chosen acceleration algorithm. On steady force the
30133
actor is continuously accelerated in direction to the next destination. If it
30134
misses the destination it will loop. If steady is false the force will switch
30135
its sign as soon as the actor reaches a critical distance. Thus the actor will
30136
reach the destination with nearly no remaining speed.
30138
<dt> <b>mass</b> <i>values</i>: positive float number; <i>default</i>: <code>1.2</code>; <i>access</i>: read only</dt>
30142
<dt> <b>Messages:</b> none</dt>
30143
<dt> <b>Action:</b> See section <a href="#target">target</a>, See section <a href="#action">action</a></dt>
30144
<dd><p>Performed on every reached destination position or on stone hits when the
30145
destination position if blocked by a stone.
30148
<dt> <b>Variants:</b></dt>
30150
<dl compact="compact">
30151
<dt> <img src="images/ac_horse.png" alt="images/ac_horse"><p> <b>ac_horse</b>: controllers = <code>CTRL_NONE</code>, owner = <code>nil</code>
30159
<a name="ac_005fkiller"></a>
30160
<table cellpadding="1" cellspacing="1" border="0">
30161
<tr><td valign="middle" align="left">[<a href="#ac_005fhorse" title="Previous section in reading order"> < </a>]</td>
30162
<td valign="middle" align="left">[<a href="#ac_005fmarble" title="Next section in reading order"> > </a>]</td>
30163
<td valign="middle" align="left"> </td>
30164
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
30165
<td valign="middle" align="left">[<a href="#Actors" title="Up section"> Up </a>]</td>
30166
<td valign="middle" align="left">[<a href="#Other-Objects" title="Next chapter"> >> </a>]</td>
30167
<td valign="middle" align="left"> </td>
30168
<td valign="middle" align="left"> </td>
30169
<td valign="middle" align="left"> </td>
30170
<td valign="middle" align="left"> </td>
30171
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
30172
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
30173
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
30174
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
30176
<a name="ac_005fkiller-1"></a>
30177
<h3 class="subsection">10.2.3 ac_killer</h3>
30178
<a name="index-ac_005fkiller"></a>
30180
<p>An actor that looks like a white <a href="#ac_005fpearl">ac_pearl</a>, but is a death bringing killer
30181
ball that shatters <a href="#ac_005fmarble">ac_marble</a>s and <a href="#ac_005fpearl">ac_pearl</a>s on contact.
30183
<p>In contrast to the main actors it can not jump or pass an <a href="#it_005fvortex">it_vortex</a>, and
30184
will not sink, fall or shatter. A killer ball is immortal.
30186
<p>A killer is preset to its standard attribute values, that let both players
30187
control the actor and do assign a higher ‘<samp>adhesion</samp>’ to it than to
30188
<a href="#ac_005fpearl">ac_pearl</a>s.
30190
<p>Note that even though a killer looks quite dangerous, <a href="#fl_005fthief">fl_thief</a> and
30191
<a href="#st_005fthief">st_thief</a> do steal items from them, if the killer is owned by a player.
30193
<dl compact="compact">
30194
<dt> <b>Attributes:</b></dt>
30196
<dl compact="compact">
30197
<dt> <b>color</b> <i>values</i>: <code>BLACK</code>, <code>WHITE</code>; <i>default</i>: <code>WHITE</code>; <i>access</i>: read only</dt>
30198
<dd><p>The color of the killer.
30200
<dt> <b>adhesion</b> <i>values</i>: number; <i>default</i>: <code>2.0</code>; See section <a href="#adhesion">adhesion</a></dt>
30201
<dt> <b>controllers</b> <i>values</i>: <code>CTRL_NONE</code>, <code>CTRL_YIN</code>, <code>CTRL_YANG</code>, <code>CTRL_YINYANG</code>; <i>default</i>: <code>CTRL_YINYANG</code>; See section <a href="#controllers">controllers</a></dt>
30202
<dt> <b>owner</b> <i>values</i>: <code>YIN</code>, <code>YANG</code>, <code>nil</code>; <i>default</i>: <code>nil</code>; See section <a href="#owner">owner</a></dt>
30203
<dt> <b>mass</b> <i>values</i>: positive float number; <i>default</i>: <code>0.7</code>; <i>access</i>: read only</dt>
30207
<dt> <b>Messages:</b> none</dt>
30208
<dt> <b>Variants:</b></dt>
30210
<dl compact="compact">
30211
<dt> <img src="images/ac_pearl_white.png" alt="images/ac_pearl_white"><p> <b>ac_killer</b>: color = <code>WHITE</code>, controllers = <code>CTRL_YINYANG</code>, owner = <code>nil</code>
30213
<dt> <img src="images/ac_pearl_black.png" alt="images/ac_pearl_black"><p> <b>ac_killer_black</b>: color = <code>BLACK</code>, controllers = <code>CTRL_YINYANG</code>, owner = <code>nil</code>
30215
<dt> <img src="images/ac_pearl_white.png" alt="images/ac_pearl_white"><p> <b>ac_killer_white</b>: color = <code>WHITE</code>, controllers = <code>CTRL_YINYANG</code>, owner = <code>nil</code>
30223
<a name="ac_005fmarble"></a>
30224
<table cellpadding="1" cellspacing="1" border="0">
30225
<tr><td valign="middle" align="left">[<a href="#ac_005fkiller" title="Previous section in reading order"> < </a>]</td>
30226
<td valign="middle" align="left">[<a href="#ac_005fpearl" title="Next section in reading order"> > </a>]</td>
30227
<td valign="middle" align="left"> </td>
30228
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
30229
<td valign="middle" align="left">[<a href="#Actors" title="Up section"> Up </a>]</td>
30230
<td valign="middle" align="left">[<a href="#Other-Objects" title="Next chapter"> >> </a>]</td>
30231
<td valign="middle" align="left"> </td>
30232
<td valign="middle" align="left"> </td>
30233
<td valign="middle" align="left"> </td>
30234
<td valign="middle" align="left"> </td>
30235
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
30236
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
30237
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
30238
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
30240
<a name="ac_005fmarble-1"></a>
30241
<h3 class="subsection">10.2.4 ac_marble</h3>
30242
<a name="index-ac_005fmarble"></a>
30244
<p>The main actor in the shape of a large ball, either black or white. Marbles are
30245
versatile actors that can jump, pass <a href="#it_005fvortex">it_vortex</a>, but on the other hand they
30246
can sink, fall and shatter, too.
30248
<p>As long as the ‘<samp>owner</samp>’ has an <a href="#it_005fextralife">it_extralife</a> in his inventory a dying
30249
marble will be resurrected. If no extra life is available a dying actor ends
30250
up in the ‘<samp>state</samp>’ dead and can no longer be controlled.
30252
<p>The marbles are preset to their standard attribute values. A recoloring of
30253
marbles is not possible. The marbles state changes due to events and can be
30256
<dl compact="compact">
30257
<dt> <b>Attributes:</b></dt>
30259
<dl compact="compact">
30260
<dt> <b>state</b>, <i>values</i>: <code>ALIVE</code>, <code>DEAD</code>; <i>default</i>: <code>ALIVE</code>; See section <a href="#state">state</a>; <i>access</i>: read only</dt>
30261
<dt> <b>color</b> <i>values</i>: <code>BLACK</code>, <code>WHITE</code>; <i>default</i>: <code>BLACK</code>; <i>access</i>: read only</dt>
30262
<dd><p>The color of the marble.
30264
<dt> <b>adhesion</b> <i>values</i>: number; <i>default</i>: <code>1.0</code>; See section <a href="#adhesion">adhesion</a></dt>
30265
<dt> <b>controllers</b> <i>values</i>: <code>CTRL_NONE</code>, <code>CTRL_YIN</code>, <code>CTRL_YANG</code>, <code>CTRL_YINYANG</code>; <i>default</i>: <code>CTRL_NONE</code>; See section <a href="#controllers">controllers</a></dt>
30266
<dt> <b>owner</b> <i>values</i>: <code>YIN</code>, <code>YANG</code>, <code>nil</code>; <i>default</i>: <code>nil</code>; See section <a href="#owner">owner</a></dt>
30267
<dt> <b>mass</b> <i>values</i>: positive float number; <i>default</i>: <code>1.0</code>; <i>access</i>: read only</dt>
30271
<dt> <b>Messages:</b> none</dt>
30272
<dt> <b>Variants:</b></dt>
30274
<dl compact="compact">
30275
<dt> <img src="images/ac_marble_black.png" alt="images/ac_marble_black"><p> <b>ac_marble</b>: color = <code>BLACK</code>, controllers = <code>CTRL_YIN</code>, owner = <code>YIN</code>
30277
<dt> <img src="images/ac_marble_black.png" alt="images/ac_marble_black"><p> <b>ac_marble_black</b>: color = <code>BLACK</code>, controllers = <code>CTRL_YIN</code>, owner = <code>YIN</code>
30279
<dt> <img src="images/ac_marble_white.png" alt="images/ac_marble_white"><p> <b>ac_marble_white</b>: color = <code>WHITE</code>, controllers = <code>CTRL_YANG</code>, owner = <code>YANG</code>
30287
<a name="ac_005fpearl"></a>
30288
<table cellpadding="1" cellspacing="1" border="0">
30289
<tr><td valign="middle" align="left">[<a href="#ac_005fmarble" title="Previous section in reading order"> < </a>]</td>
30290
<td valign="middle" align="left">[<a href="#ac_005frotor" title="Next section in reading order"> > </a>]</td>
30291
<td valign="middle" align="left"> </td>
30292
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
30293
<td valign="middle" align="left">[<a href="#Actors" title="Up section"> Up </a>]</td>
30294
<td valign="middle" align="left">[<a href="#Other-Objects" title="Next chapter"> >> </a>]</td>
30295
<td valign="middle" align="left"> </td>
30296
<td valign="middle" align="left"> </td>
30297
<td valign="middle" align="left"> </td>
30298
<td valign="middle" align="left"> </td>
30299
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
30300
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
30301
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
30302
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
30304
<a name="ac_005fpearl-1"></a>
30305
<h3 class="subsection">10.2.5 ac_pearl</h3>
30306
<a name="index-ac_005fpearl"></a>
30308
<p>The main actor for meditation levels in the shape of a small ball, currently
30309
just in white color available. Pearls are like marbles versatile actors that
30310
can jump, pass <a href="#it_005fvortex">it_vortex</a>, but on the other hand they can sink, fall and
30313
<p>As long as the ‘<samp>owner</samp>’ has an <a href="#it_005fextralife">it_extralife</a> in his inventory a dying
30314
marble will be resurrected. If no extra life is available a dying actor ends
30315
up in the ‘<samp>state</samp>’ dead and can no longer be controlled.
30317
<p>The pearls are preset to their standard attribute values. The pearls state
30318
changes due to events and can be read only.
30320
<dl compact="compact">
30321
<dt> <b>Attributes:</b></dt>
30323
<dl compact="compact">
30324
<dt> <b>state</b>, <i>values</i>: <code>ALIVE</code>, <code>DEAD</code>; <i>default</i>: <code>ALIVE</code>; See section <a href="#state">state</a>; <i>access</i>: read only</dt>
30325
<dt> <b>color</b> <i>values</i>: <code>BLACK</code>, <code>WHITE</code>; <i>default</i>: <code>WHITE</code>; <i>access</i>: read only</dt>
30326
<dd><p>The color of the pearl.
30328
<dt> <b>adhesion</b> <i>values</i>: number; <i>default</i>: <code>1.0</code>; See section <a href="#adhesion">adhesion</a></dt>
30329
<dt> <b>controllers</b> <i>values</i>: <code>CTRL_NONE</code>, <code>CTRL_YIN</code>, <code>CTRL_YANG</code>, <code>CTRL_YINYANG</code>; <i>default</i>: <code>CTRL_NONE</code>; See section <a href="#controllers">controllers</a></dt>
30330
<dt> <b>owner</b> <i>values</i>: <code>YIN</code>, <code>YANG</code>, <code>nil</code>; <i>default</i>: <code>nil</code>; See section <a href="#owner">owner</a></dt>
30331
<dt> <b>mass</b> <i>values</i>: positive float number; <i>default</i>: <code>0.7</code>; <i>access</i>: read only</dt>
30335
<dt> <b>Messages:</b> none</dt>
30336
<dt> <b>Variants:</b></dt>
30338
<dl compact="compact">
30339
<dt> <img src="images/ac_pearl_white.png" alt="images/ac_pearl_white"><p> <b>ac_pearl</b>: color = <code>WHITE</code>, controllers = <code>CTRL_YINYANG</code>, owner = <code>YIN</code>
30341
<dt> <img src="images/ac_pearl_black.png" alt="images/ac_pearl_black"><p> <b>ac_pearl_black</b>: color = <code>BLACK</code>, controllers = <code>CTRL_YINYANG</code>, owner = <code>YIN</code>
30343
<dt> <img src="images/ac_pearl_white.png" alt="images/ac_pearl_white"><p> <b>ac_pearl_white</b>: color = <code>WHITE</code>, controllers = <code>CTRL_YINYANG</code>, owner = <code>YIN</code>
30351
<a name="ac_005frotor"></a>
30352
<table cellpadding="1" cellspacing="1" border="0">
30353
<tr><td valign="middle" align="left">[<a href="#ac_005fpearl" title="Previous section in reading order"> < </a>]</td>
30354
<td valign="middle" align="left">[<a href="#ac_005ftop" title="Next section in reading order"> > </a>]</td>
30355
<td valign="middle" align="left"> </td>
30356
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
30357
<td valign="middle" align="left">[<a href="#Actors" title="Up section"> Up </a>]</td>
30358
<td valign="middle" align="left">[<a href="#Other-Objects" title="Next chapter"> >> </a>]</td>
30359
<td valign="middle" align="left"> </td>
30360
<td valign="middle" align="left"> </td>
30361
<td valign="middle" align="left"> </td>
30362
<td valign="middle" align="left"> </td>
30363
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
30364
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
30365
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
30366
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
30368
<a name="ac_005frotor-1"></a>
30369
<h3 class="subsection">10.2.6 ac_rotor</h3>
30370
<a name="index-ac_005frotor"></a>
30372
<p>A rotating actor build up of 4 greenish cudgels. It is a death bringing actor
30373
that shatters <a href="#ac_005fmarble">ac_marble</a>s and <a href="#ac_005fpearl">ac_pearl</a>s on contact. Its behaviour
30374
is identical to an <a href="#ac_005ftop">ac_top</a>.
30376
<p>In contrast to the main actors it can not jump or pass an <a href="#it_005fvortex">it_vortex</a>, and
30377
will not sink, fall or shatter. A rotor is immortal.
30379
<p>Rotors do usually hunt mortal actors trying to shatter them. They accelerate by
30380
force given by the attribute ‘<samp>strength</samp>’, but they limit their hunt to
30381
actors in the given ‘<samp>range</samp>’. If no attackable actor remains in this range
30382
they return to their initial position if the attribute ‘<samp>gohome</samp>’ is
30383
‘<samp>true</samp>’.
30385
<p>Note that in case multiple attackable actors are in range the rotor gets
30386
confused and tries to attack the center of its victims. But if you set the
30387
attribute ‘<samp>attacknearest</samp>’ to ‘<samp>true</samp>’ the rotor will concentrate just
30388
on the nearest victim. By adjusting the attribute ‘<samp>prefercurrent</samp>’ you
30389
can instruct the rotors to prefer victims of the current active player with
30390
a certain likelihood.
30392
<p>Note that you need to set ‘<samp>controllers</samp>’ as well as ‘<samp>adhesion</samp>’ to proper
30393
values if you want a player to control a rotor directly. If a rotor is owned by a
30394
player <a href="#fl_005fthief">fl_thief</a> and <a href="#st_005fthief">st_thief</a> will steal items from it.
30396
<p>An <a href="#ac_005fmarble">ac_marble</a> will temporarily transform into a rotor when it activates
30397
an <a href="#it_005fdrop">it_drop</a>. During the 5 seconds of transformation the actor is a real
30398
immortal rotor with the identity inclusive the ‘<samp>essential_id</samp>’ of the
30399
former marble. After the period is over it transforms back to its original
30402
<dl compact="compact">
30403
<dt> <b>Attributes:</b></dt>
30405
<dl compact="compact">
30406
<dt> <b>range</b> <i>values</i>: float number; <i>default</i>: <code>5.0</code></dt>
30407
<dd><p>The distance up to which victims are hunted.
30409
<dt> <b>strength</b> <i>values</i>: float number; <i>default</i>: <code>+10.0</code></dt>
30410
<dd><p>The force that drives the rotor to its victims.
30412
<dt> <b>gohome</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code></dt>
30413
<dd><p>Behaviour of a rotor without victim in range.
30415
<dt> <b>attacknearest</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code></dt>
30416
<dd><p>Behaviour of a rotor with multiple victims in range
30418
<dt> <b>prefercurrent</b> <i>values</i>: float number in range [0.0 - 1.0]; <i>default</i>: <code>+0.0</code></dt>
30419
<dd><p>Likelihood of attack strategy. You will usually use this attribute in
30420
combination with ‘<samp>attacknearest</samp>’ set to ‘<samp>true</samp>’. The Level
30421
‘<samp>Toreador</samp>’ is an example of the behavior of such rotors.
30423
<dt> <b>mass</b> <i>values</i>: positive float number; <i>default</i>: <code>0.8</code>; <i>access</i>: read only</dt>
30427
<dt> <b>Messages:</b> none</dt>
30428
<dt> <b>Variants:</b></dt>
30430
<dl compact="compact">
30431
<dt> <img src="images/ac_rotor.png" alt="images/ac_rotor"><p> <b>ac_rotor</b>: color = <code>nil</code>, controllers = <code>CTRL_NONE</code>, owner = <code>nil</code>
30439
<a name="ac_005ftop"></a>
30440
<table cellpadding="1" cellspacing="1" border="0">
30441
<tr><td valign="middle" align="left">[<a href="#ac_005frotor" title="Previous section in reading order"> < </a>]</td>
30442
<td valign="middle" align="left">[<a href="#Actor-Features" title="Next section in reading order"> > </a>]</td>
30443
<td valign="middle" align="left"> </td>
30444
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
30445
<td valign="middle" align="left">[<a href="#Actors" title="Up section"> Up </a>]</td>
30446
<td valign="middle" align="left">[<a href="#Other-Objects" title="Next chapter"> >> </a>]</td>
30447
<td valign="middle" align="left"> </td>
30448
<td valign="middle" align="left"> </td>
30449
<td valign="middle" align="left"> </td>
30450
<td valign="middle" align="left"> </td>
30451
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
30452
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
30453
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
30454
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
30456
<a name="ac_005ftop-1"></a>
30457
<h3 class="subsection">10.2.7 ac_top</h3>
30458
<a name="index-ac_005ftop"></a>
30460
<p>A fast rotating, greenish disk like actor. It is a death bringing actor
30461
that shatters <a href="#ac_005fmarble">ac_marble</a>s and <a href="#ac_005fpearl">ac_pearl</a>s on contact. Its behaviour
30462
is identical to an <a href="#ac_005frotor">ac_rotor</a>.
30464
<p>In contrast to the main actors it can not jump or pass an <a href="#it_005fvortex">it_vortex</a>, and
30465
will not sink, fall or shatter. A top is immortal.
30467
<p>Tops do usually hunt mortal actors trying to shatter them. They accelerate by
30468
force given by the attribute ‘<samp>strength</samp>’, but they limit their hunt to
30469
actors in the given ‘<samp>range</samp>’. If no attackable actor remains in this range
30470
they return to their initial position if the attribute ‘<samp>gohome</samp>’ is
30471
‘<samp>true</samp>’.
30473
<p>Note that in case multiple attackable actors are in range the top gets
30474
confused and tries to attack the center of its victims. But if you set the
30475
attribute ‘<samp>attacknearest</samp>’ to ‘<samp>true</samp>’ the top will concentrate just
30476
on the nearest victim. By adjusting the attribute ‘<samp>prefercurrent</samp>’ you
30477
can instruct the top to prefer victims of the current active player with
30478
a certain likelihood.
30480
<p>Note that you need to set ‘<samp>controllers</samp>’ as well as ‘<samp>adhesion</samp>’ to proper
30481
values if you want a player to control a top directly. If a top is owned by a
30482
player <a href="#fl_005fthief">fl_thief</a> and <a href="#st_005fthief">st_thief</a> will steal items from it.
30484
<dl compact="compact">
30485
<dt> <b>Attributes:</b></dt>
30487
<dl compact="compact">
30488
<dt> <b>range</b> <i>values</i>: float number; <i>default</i>: <code>5.0</code></dt>
30489
<dd><p>The distance up to which victims are hunted.
30491
<dt> <b>strength</b> <i>values</i>: float number; <i>default</i>: <code>+10.0</code></dt>
30492
<dd><p>The force that drives the top to its victims.
30494
<dt> <b>gohome</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code></dt>
30495
<dd><p>Behaviour of a top without victim in range.
30497
<dt> <b>attacknearest</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code></dt>
30498
<dd><p>Behaviour of a top with multiple victims in range
30500
<dt> <b>prefercurrent</b> <i>values</i>: float number in range [0.0 - 1.0]; <i>default</i>: <code>+0.0</code></dt>
30501
<dd><p>Likelihood of attack strategy. You will usually use this attribute in
30502
combination with ‘<samp>attacknearest</samp>’ set to ‘<samp>true</samp>’. The Level
30503
‘<samp>Toreador</samp>’ is an example of the behavior of such rotors.
30505
<dt> <b>mass</b> <i>values</i>: positive float number; <i>default</i>: <code>0.8</code>; <i>access</i>: read only</dt>
30509
<dt> <b>Messages:</b> none</dt>
30510
<dt> <b>Variants:</b></dt>
30512
<dl compact="compact">
30513
<dt> <img src="images/ac_top.png" alt="images/ac_top"><p> <b>ac_top</b>: color = <code>nil</code>, controllers = <code>CTRL_NONE</code>, owner = <code>nil</code>
30521
<a name="Actor-Features"></a>
30522
<table cellpadding="1" cellspacing="1" border="0">
30523
<tr><td valign="middle" align="left">[<a href="#ac_005ftop" title="Previous section in reading order"> < </a>]</td>
30524
<td valign="middle" align="left">[<a href="#Flying-Actors" title="Next section in reading order"> > </a>]</td>
30525
<td valign="middle" align="left"> </td>
30526
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
30527
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Up section"> Up </a>]</td>
30528
<td valign="middle" align="left">[<a href="#Other-Objects" title="Next chapter"> >> </a>]</td>
30529
<td valign="middle" align="left"> </td>
30530
<td valign="middle" align="left"> </td>
30531
<td valign="middle" align="left"> </td>
30532
<td valign="middle" align="left"> </td>
30533
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
30534
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
30535
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
30536
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
30538
<a name="Actor-Features-1"></a>
30539
<h2 class="section">10.3 Actor Features</h2>
30541
<table class="menu" border="0" cellspacing="0">
30542
<tr><td align="left" valign="top"><a href="#Flying-Actors">10.3.1 Flying Actors</a></td><td> </td><td align="left" valign="top"></td></tr>
30546
<a name="Flying-Actors"></a>
30547
<table cellpadding="1" cellspacing="1" border="0">
30548
<tr><td valign="middle" align="left">[<a href="#Actor-Features" title="Previous section in reading order"> < </a>]</td>
30549
<td valign="middle" align="left">[<a href="#Other-Objects" title="Next section in reading order"> > </a>]</td>
30550
<td valign="middle" align="left"> </td>
30551
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
30552
<td valign="middle" align="left">[<a href="#Actor-Features" title="Up section"> Up </a>]</td>
30553
<td valign="middle" align="left">[<a href="#Other-Objects" title="Next chapter"> >> </a>]</td>
30554
<td valign="middle" align="left"> </td>
30555
<td valign="middle" align="left"> </td>
30556
<td valign="middle" align="left"> </td>
30557
<td valign="middle" align="left"> </td>
30558
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
30559
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
30560
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
30561
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
30563
<a name="Flying-Actors-1"></a>
30564
<h3 class="subsection">10.3.1 Flying Actors</h3>
30566
<p>Ball like actors, namely <a href="#ac_005fmarble">ac_marble</a> and <a href="#ac_005fpearl">ac_pearl</a> are able to fly for
30567
short period of time if they get catapulted by some item.
30569
<p>Currently there are portable <a href="#it_005fspring">it_spring</a> that let actors jump on activation,
30570
static <a href="#it_005fspringboard">it_springboard</a> that catapult crossing actors and <a href="#it_005fvortex">it_vortex</a>
30571
that catapult warping actors.
30573
<p>A flying actor can pass lethal grids with <a href="#fl_005fwater">fl_water</a>, <a href="#fl_005fabyss">fl_abyss</a>,
30574
<a href="#it_005ftrap">it_trap</a> and even laser beams. But most stones will block flying actors,
30575
even some hollow ones like <a href="#st_005fgrate">st_grate</a> or <a href="#st_005foneway">st_oneway</a>. But some others as
30576
<a href="#st_005fdoor">st_door</a> or hollow <a href="#Standard-Stones">Standard Stones</a> let flying actors pass.
30578
<p>While flying an actor can not pick up any item. But the actor can still drop
30579
items. Activation of a spring while sinking in <a href="#fl_005fwater">fl_water</a> or <a href="#fl_005fswamp">fl_swamp</a>
30580
lets the actor jump immediately out of them and starts the sinking process from
30581
scratch anew when landing on such a floor.
30586
<a name="Other-Objects"></a>
30587
<table cellpadding="1" cellspacing="1" border="0">
30588
<tr><td valign="middle" align="left">[<a href="#Flying-Actors" title="Previous section in reading order"> < </a>]</td>
30589
<td valign="middle" align="left">[<a href="#Visible-Others" title="Next section in reading order"> > </a>]</td>
30590
<td valign="middle" align="left"> </td>
30591
<td valign="middle" align="left">[<a href="#Actor-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
30592
<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up </a>]</td>
30593
<td valign="middle" align="left">[<a href="#Libraries" title="Next chapter"> >> </a>]</td>
30594
<td valign="middle" align="left"> </td>
30595
<td valign="middle" align="left"> </td>
30596
<td valign="middle" align="left"> </td>
30597
<td valign="middle" align="left"> </td>
30598
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
30599
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
30600
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
30601
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
30603
<a name="Other-Objects-1"></a>
30604
<h1 class="chapter">11. Other Objects</h1>
30606
<table class="menu" border="0" cellspacing="0">
30607
<tr><td align="left" valign="top"><a href="#Visible-Others">11.1 Visible Others</a></td><td> </td><td align="left" valign="top"> Special gaming objects
30609
<tr><td align="left" valign="top"><a href="#Gadgets">11.2 Gadgets</a></td><td> </td><td align="left" valign="top"> Tools for plug and play construction of levels
30615
<a name="Visible-Others"></a>
30616
<table cellpadding="1" cellspacing="1" border="0">
30617
<tr><td valign="middle" align="left">[<a href="#Other-Objects" title="Previous section in reading order"> < </a>]</td>
30618
<td valign="middle" align="left">[<a href="#ot_005fcannonball" title="Next section in reading order"> > </a>]</td>
30619
<td valign="middle" align="left"> </td>
30620
<td valign="middle" align="left">[<a href="#Other-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
30621
<td valign="middle" align="left">[<a href="#Other-Objects" title="Up section"> Up </a>]</td>
30622
<td valign="middle" align="left">[<a href="#Libraries" title="Next chapter"> >> </a>]</td>
30623
<td valign="middle" align="left"> </td>
30624
<td valign="middle" align="left"> </td>
30625
<td valign="middle" align="left"> </td>
30626
<td valign="middle" align="left"> </td>
30627
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
30628
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
30629
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
30630
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
30632
<a name="Visible-Others-1"></a>
30633
<h2 class="section">11.1 Visible Others</h2>
30635
<table class="menu" border="0" cellspacing="0">
30636
<tr><td align="left" valign="top"><a href="#ot_005fcannonball">11.1.1 ot_cannonball</a></td><td> </td><td align="left" valign="top"> Projectile of a Spitter
30638
<tr><td align="left" valign="top"><a href="#ot_005frubberband">11.1.2 ot_rubberband</a></td><td> </td><td align="left" valign="top"> Rubberband with forces
30640
<tr><td align="left" valign="top"><a href="#ot_005fwire">11.1.3 ot_wire</a></td><td> </td><td align="left" valign="top"> Stone connection that transfers impulses
30646
<a name="ot_005fcannonball"></a>
30647
<table cellpadding="1" cellspacing="1" border="0">
30648
<tr><td valign="middle" align="left">[<a href="#Visible-Others" title="Previous section in reading order"> < </a>]</td>
30649
<td valign="middle" align="left">[<a href="#ot_005frubberband" title="Next section in reading order"> > </a>]</td>
30650
<td valign="middle" align="left"> </td>
30651
<td valign="middle" align="left">[<a href="#Other-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
30652
<td valign="middle" align="left">[<a href="#Visible-Others" title="Up section"> Up </a>]</td>
30653
<td valign="middle" align="left">[<a href="#Libraries" title="Next chapter"> >> </a>]</td>
30654
<td valign="middle" align="left"> </td>
30655
<td valign="middle" align="left"> </td>
30656
<td valign="middle" align="left"> </td>
30657
<td valign="middle" align="left"> </td>
30658
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
30659
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
30660
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
30661
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
30663
<a name="ot_005fcannonball-1"></a>
30664
<h3 class="subsection">11.1.1 ot_cannonball</h3>
30665
<a name="index-ot_005fcannonball"></a>
30667
<p>A short living projectile emitted by an <a href="#st_005fspitter">st_spitter</a>. It is an internal
30668
object that can not be directly instantiated. It is listed here just for
30672
<a name="ot_005frubberband"></a>
30673
<table cellpadding="1" cellspacing="1" border="0">
30674
<tr><td valign="middle" align="left">[<a href="#ot_005fcannonball" title="Previous section in reading order"> < </a>]</td>
30675
<td valign="middle" align="left">[<a href="#ot_005fwire" title="Next section in reading order"> > </a>]</td>
30676
<td valign="middle" align="left"> </td>
30677
<td valign="middle" align="left">[<a href="#Other-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
30678
<td valign="middle" align="left">[<a href="#Visible-Others" title="Up section"> Up </a>]</td>
30679
<td valign="middle" align="left">[<a href="#Libraries" title="Next chapter"> >> </a>]</td>
30680
<td valign="middle" align="left"> </td>
30681
<td valign="middle" align="left"> </td>
30682
<td valign="middle" align="left"> </td>
30683
<td valign="middle" align="left"> </td>
30684
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
30685
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
30686
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
30687
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
30689
<a name="ot_005frubberband-1"></a>
30690
<h3 class="subsection">11.1.2 ot_rubberband</h3>
30691
<a name="index-ot_005frubberband"></a>
30693
<p>An orange link between two objects that can apply attracting or repelling forces
30696
<p>The two connected objects are called anchors. The attribute ‘<samp>anchor1</samp>’ holds
30697
the first object’s reference that must be an actor. The ‘<samp>anchor2</samp>’ references
30698
the second object that can either be another actor or a stone. Both objects
30699
must exist to <a href="#add">add</a> a rubberband to the world. If the stone sinks, breaks
30700
or is killed otherwise the rubberband will be destroyed, too.
30702
<p>Both anchor objects will update their attributes <a href="#rubbers">rubbers</a> and <a href="#fellows">fellows</a>
30703
to list this rubberband and the connected object for purposes of evaluation.
30705
<p>The force that is applied between the objects can be configured by several
30706
attributes. Every rubberband has a natural ‘<samp>length</samp>’ at which it does not
30707
apply any force to the actors. The more the rubberband is extended from this
30708
point it applies a force of the given ‘<samp>strength</samp>’. A positive strength is
30709
a natural attracting force, whereas a negative strength would repel the actors.
30711
<p>A rubberband that is shorter than its natural ‘<samp>length</samp>’ would normally not
30712
apply any force. But this special rubber allows you to set a ‘<samp>threshold</samp>’
30713
where the rubberband starts to apply the opposite directed forces onto the
30714
actors, like a spring would do. Thus a positive ‘<samp>strength</samp>’ would lead to a
30715
repelling force, a negative one to an attracting force. A rubberband with a
30716
length in between ‘<samp>threshold</samp>’ and ‘<samp>length</samp>’ will apply no forces.
30717
If you set the attribute ‘<samp>length</samp>’ to the value <code>AUTOLENGTH</code>, the
30718
length of the rubberband is determined from the distance of its two endpoints
30719
at the time of creation.
30721
<p>In some cases you do want to limit the length of the rubberband. You can do this
30722
by setting ‘<samp>min</samp>’ and ‘<samp>max</samp>’ attributes. Actors will bounce on these
30723
limits. Do not try to use artificial large ‘<samp>strength</samp>’ values instead to
30724
ensure length limits, as this could lead to extreme forces causing unexpected and
30725
unstable actor movements.
30727
<p>If you set ‘<samp>min</samp>’ or ‘<samp>max</samp>’ limits, extraordinary events like actor
30728
warping, actor resurrection, moving anchor stones or simply rubberbands that are
30729
created with an off limit length can cause trouble. When such a limit violation
30730
is detected an action is performed with a value ‘<samp>false</samp>’. You may want to kill
30731
the rubberband or react in another way by a callback function. The default
30732
handling is an application of a constant force to bring the actors back within
30733
the limits. This force value is given by <a href="#RubberViolationStrength">RubberViolationStrength</a> and
30734
defaults to ‘<samp>50.0</samp>’. If you really need to assure that the player is not able
30735
to violate the limits any further you may need to increase this constant.
30737
<p>Rubberbands can be cut by <a href="#st_005fscissors">st_scissors</a>, by an <a href="#it_005fvortex">it_vortex</a> or
30738
<a href="#it_005fwormhole">it_wormhole</a> with a set ‘<samp>scissors</samp>’ attribute, by receiving a
30739
<a href="#kill">kill</a> message, by one of the anchors receiving a <a href="#disconnect">disconnect</a> message
30740
or a stone anchor that ceases to exist.
30742
<p>Rubberbands can be dynamically generated by <a href="#it_005frubberband">it_rubberband</a> and
30743
<a href="#st_005frubberband">st_rubberband</a>.
30745
<dl compact="compact">
30746
<dt> <b>Attributes:</b></dt>
30748
<dl compact="compact">
30749
<dt> <b>anchor1</b> <i>values</i>: actor object; <i>default</i>: <code>nil</code></dt>
30750
<dd><p>Object reference or name of an actor that the rubber will be connected to. Note
30751
that the reference will be immediately evaluated and thus the actor must exist
30754
<dt> <b>anchor2</b> <i>values</i>: actor or stone object; <i>default</i>: <code>nil</code></dt>
30755
<dd><p>Object reference or name of an actor or a stone that the rubber will be
30756
connected to. Note that the reference will be immediately evaluated and thus the
30757
actor or stone must exist already.
30759
<dt> <b>strength</b> <i>values</i>: number; <i>default</i>: <code>10.0</code></dt>
30760
<dd><p>The force strength.
30762
<dt> <b>length</b> <i>values</i>: positive number or <code>AUTOLENGTH</code>; <i>default</i>: <code>1.0</code></dt>
30763
<dd><p>The natural length above which forces are applied.
30765
<dt> <b>threshold</b> <i>values</i>: positive number or zero; <i>default</i>: <code>0.0</code></dt>
30766
<dd><p>The length smaller than the natural length below which inverted forces are applied.
30768
<dt> <b>min</b> <i>values</i>: positive number or zero; <i>default</i>: <code>0.0</code></dt>
30769
<dd><p>The minimum length at which actors bounce.
30771
<dt> <b>max</b> <i>values</i>: positive number or zero; <i>default</i>: <code>0.0</code></dt>
30772
<dd><p>The maximum length at which actors bounce.
30777
<dt> <b>Messages:</b> none</dt>
30778
<dt> <b>Action:</b> See section <a href="#target">target</a>, See section <a href="#action">action</a></dt>
30779
<dd><p>An action will be performed with value ‘<samp>false</samp>’ on violation of a min or max
30780
limit. Additionally an action will be performed on behalf of <a href="#it_005frubberband">it_rubberband</a>
30781
after application and creation of this rubberband with an action value of
30782
‘<samp>true</samp>’.
30787
<a name="ot_005fwire"></a>
30788
<table cellpadding="1" cellspacing="1" border="0">
30789
<tr><td valign="middle" align="left">[<a href="#ot_005frubberband" title="Previous section in reading order"> < </a>]</td>
30790
<td valign="middle" align="left">[<a href="#Gadgets" title="Next section in reading order"> > </a>]</td>
30791
<td valign="middle" align="left"> </td>
30792
<td valign="middle" align="left">[<a href="#Other-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
30793
<td valign="middle" align="left">[<a href="#Visible-Others" title="Up section"> Up </a>]</td>
30794
<td valign="middle" align="left">[<a href="#Libraries" title="Next chapter"> >> </a>]</td>
30795
<td valign="middle" align="left"> </td>
30796
<td valign="middle" align="left"> </td>
30797
<td valign="middle" align="left"> </td>
30798
<td valign="middle" align="left"> </td>
30799
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
30800
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
30801
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
30802
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
30804
<a name="ot_005fwire-1"></a>
30805
<h3 class="subsection">11.1.3 ot_wire</h3>
30806
<a name="index-ot_005fwire"></a>
30808
<p>A wire is a purple wire connecting two stones that transfers every stone pushing
30809
impulse from one stone to the other and vice versa. Thus both stones will move
30810
on the impulse if they are movable at all and not blocked in the direction of
30811
the impulse. The impulses may originate from an actor hitting a stone, an
30812
<a href="#it_005fpuller">it_puller</a>, an <a href="#st_005frotator">st_rotator</a>, an <a href="#st_005fstoneimpulse">st_stoneimpulse</a>.
30814
<p>A single stone can be wired to many other stones. All these <a href="#fellows">fellows</a> will
30815
move on an impulse. But the impulses will not be propagated to further stones
30816
that are wired themselves to any of the fellows. Just the direct wired stones
30819
<p>But you can wire to stones just once. Any subsequent additional wire between
30820
two already wired stones will cut the old wire prior establishing the new one.
30822
<p>You can request the wires connected to a stone by the stones <a href="#wires">wires</a>
30823
attribute. As it is tedious to evaluate both anchors, every stone supports
30824
an attribute <a href="#fellows">fellows</a> that reports the connected objects.
30826
<dl compact="compact">
30827
<dt> <b>Attributes:</b></dt>
30829
<dl compact="compact">
30830
<dt> <b>anchor1</b> <i>values</i>: stone object; <i>default</i>: <code>nil</code></dt>
30831
<dd><p>Object reference or name of a stone that the wire will be connected to. Note
30832
that the reference will be immediately evaluated and thus the stone must exist
30835
<dt> <b>anchor2</b> <i>values</i>: stone object; <i>default</i>: <code>nil</code></dt>
30836
<dd><p>Object reference or name of a stone that the wire will be connected to. Note
30837
that the reference will be immediately evaluated and thus the stone must exist
30843
<dt> <b>Messages:</b> none</dt>
30844
<dt> <b>Actions:</b> none</dt>
30848
<a name="Gadgets"></a>
30849
<table cellpadding="1" cellspacing="1" border="0">
30850
<tr><td valign="middle" align="left">[<a href="#ot_005fwire" title="Previous section in reading order"> < </a>]</td>
30851
<td valign="middle" align="left">[<a href="#ot_005fcounter" title="Next section in reading order"> > </a>]</td>
30852
<td valign="middle" align="left"> </td>
30853
<td valign="middle" align="left">[<a href="#Other-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
30854
<td valign="middle" align="left">[<a href="#Other-Objects" title="Up section"> Up </a>]</td>
30855
<td valign="middle" align="left">[<a href="#Libraries" title="Next chapter"> >> </a>]</td>
30856
<td valign="middle" align="left"> </td>
30857
<td valign="middle" align="left"> </td>
30858
<td valign="middle" align="left"> </td>
30859
<td valign="middle" align="left"> </td>
30860
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
30861
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
30862
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
30863
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
30865
<a name="Gadgets-1"></a>
30866
<h2 class="section">11.2 Gadgets</h2>
30869
<table class="menu" border="0" cellspacing="0">
30870
<tr><td align="left" valign="top"><a href="#ot_005fcounter">11.2.1 ot_counter</a></td><td> </td><td align="left" valign="top"> Threshold Switch
30872
<tr><td align="left" valign="top"><a href="#ot_005ftimer">11.2.2 ot_timer</a></td><td> </td><td align="left" valign="top"> Invisible Timer
30877
<a name="ot_005fcounter"></a>
30878
<table cellpadding="1" cellspacing="1" border="0">
30879
<tr><td valign="middle" align="left">[<a href="#Gadgets" title="Previous section in reading order"> < </a>]</td>
30880
<td valign="middle" align="left">[<a href="#ot_005ftimer" title="Next section in reading order"> > </a>]</td>
30881
<td valign="middle" align="left"> </td>
30882
<td valign="middle" align="left">[<a href="#Other-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
30883
<td valign="middle" align="left">[<a href="#Gadgets" title="Up section"> Up </a>]</td>
30884
<td valign="middle" align="left">[<a href="#Libraries" title="Next chapter"> >> </a>]</td>
30885
<td valign="middle" align="left"> </td>
30886
<td valign="middle" align="left"> </td>
30887
<td valign="middle" align="left"> </td>
30888
<td valign="middle" align="left"> </td>
30889
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
30890
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
30891
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
30892
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
30894
<a name="ot_005fcounter-1"></a>
30895
<h3 class="subsection">11.2.1 ot_counter</h3>
30896
<a name="index-ot_005fcounter"></a>
30898
<p>A counter that switches on given thresholds. As a supplement to single switch
30899
like objects as <a href="#it_005ftrigger">it_trigger</a>, <a href="#st_005fswitch">st_switch</a>, <a href="#st_005flaserswitch">st_laserswitch</a>,
30900
<a href="#st_005fcoinslot">st_coinslot</a>, <a href="#st_005fkey">st_key</a>, <a href="#st_005ffloppy">st_floppy</a>, etc. this gadget allows to
30901
react on a given number of these switches to be switched ‘<samp>ON</samp>’ while the
30902
others being switched ‘<samp>OFF</samp>’.
30904
<p>The attribute ‘<samp>state</samp>’ represents the count of switches in ‘<samp>ON</samp>’ state.
30905
Due to the <a href="#Snapshot-Principle">Snapshot Principle</a> you need to set it to the initial number
30906
of ‘<samp>ON</samp>’ switches. All switches need to declare the counter gadget as their
30907
‘<samp>target</samp>’. They all need to send a <code>"signal"</code> message as ‘<samp>action</samp>’.
30908
The counter gadget increases or decreases its count state on every received
30909
signal message thus keeping it up to date.
30911
<p>The gadget itself can perform actions by usage of <a href="#Object-State">Object State</a> dependent
30912
targets and actions.
30914
<p>E.g. let us assume 8 <a href="#it_005ftrigger">it_trigger</a>s and 8 <a href="#st_005fbox">st_box</a>es. Two boxes are
30915
initially on top of two triggers. A door should open as soon as the user
30916
succeeds in pushing all boxes onto the triggers.
30918
<table><tr><td> </td><td><pre class="example">ti["t"] = {"it_trigger", target="mycounter", action="signal"}
30919
ti["b"] = {"st_box"}
30920
ti["o"] = ti["t"] .. ti["b"]
30921
ti["d"] = {"st_door", "mydoor"}
30922
wo(ti, " ", {"t t t o t o t t",
30923
"b b b b b b",
30924
" d @ "})
30925
wo:add({"ot_counter", "mycounter", state=2, target="mydoor", action_7="close", action_8="open"})
30926
</pre></td></tr></table>
30928
<p>Note that it is not sufficient to send an <code>"open"</code> message on a
30929
‘<samp>state</samp>’ count of 8, as this event occurs, when 7 boxes are on top of
30930
triggers and the last trigger is pressed by the actor itself, too. When the
30931
actor leaves the 8th trigger the gadget state decreases its state to 7 and
30932
sends a <code>"close"</code> message to the door.
30934
<dl compact="compact">
30935
<dt> <b>Attributes:</b></dt>
30937
<dl compact="compact">
30938
<dt> <b>state</b>, <i>values</i>: numbers; <i>default</i>: 0 See section <a href="#state">state</a></dt>
30939
<dd><p>The count of switches in ‘<samp>ON</samp>’ state.
30944
<dt> <b>Messages:</b></dt>
30946
<dl compact="compact">
30947
<dt> <b>signal</b> See section <a href="#signal">signal</a></dt>
30948
<dd><p>Increases state on a value of ‘<samp>1</samp>’, and decreases on a value of ‘<samp>0</samp>’.
30953
<dt> <b>Action:</b> See section <a href="#target">target</a>, See section <a href="#action">action</a></dt>
30954
<dd><p>Sends an action with value ‘<samp>true</samp>’ just on explicitly given
30955
<a href="#Object-State">Object State</a> dependent target or action attributes. No default
30956
<code>"toggle"</code> actions will be issued on other states.
30962
<a name="ot_005ftimer"></a>
30963
<table cellpadding="1" cellspacing="1" border="0">
30964
<tr><td valign="middle" align="left">[<a href="#ot_005fcounter" title="Previous section in reading order"> < </a>]</td>
30965
<td valign="middle" align="left">[<a href="#Libraries" title="Next section in reading order"> > </a>]</td>
30966
<td valign="middle" align="left"> </td>
30967
<td valign="middle" align="left">[<a href="#Other-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
30968
<td valign="middle" align="left">[<a href="#Gadgets" title="Up section"> Up </a>]</td>
30969
<td valign="middle" align="left">[<a href="#Libraries" title="Next chapter"> >> </a>]</td>
30970
<td valign="middle" align="left"> </td>
30971
<td valign="middle" align="left"> </td>
30972
<td valign="middle" align="left"> </td>
30973
<td valign="middle" align="left"> </td>
30974
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
30975
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
30976
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
30977
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
30979
<a name="ot_005ftimer-1"></a>
30980
<h3 class="subsection">11.2.2 ot_timer</h3>
30981
<a name="index-ot_005ftimer"></a>
30983
<p>This gadget can be used to trigger a delayed single or periodic events. It is
30984
nearly identical to the <a href="#st_005ftimer">st_timer</a>, but does neither require a grid position
30985
nor disturb the user by a pulsing animation.
30987
<p>Note that this is an exceptional object as its default state is ‘<samp>ON</samp>’ to
30988
support the most common case of immediately running timers.
30990
<p>A single shot, not looping timer will send an action value of ‘<samp>true</samp>’. A
30991
looping timer will alternate the boolean action values starting with value
30992
‘<samp>true</samp>’. You can use <a href="#inverse">inverse</a> to start with a value of ‘<samp>false</samp>’.
30994
<p>If you stop a timer by switching it off, no further events will be performed.
30995
Restarting the timer by switching it on again will restart the timer like
30998
<p>The time interval to the first event and between subsequent events can be relied
30999
on to an accuracy of 0.01 seconds. But due to performance reasons and visibility
31000
of the reactions timers should not be set to intervals below 0.1 seconds. An
31001
interval of less than 0.01 seconds is not valid for a looping timer.
31003
<dl compact="compact">
31004
<dt> <b>Attributes:</b></dt>
31006
<dl compact="compact">
31007
<dt> <b>state</b>, <i>values</i>: <code>ON</code>, <code>OFF</code>; <i>default</i>: <code>ON</code> See section <a href="#state">state</a></dt>
31008
<dd><p>An ‘<samp>ON</samp>’ state timer is running. A timer in state ‘<samp>OFF</samp>’ is reset and
31009
waiting for reactivation.
31011
<dt> <b>interval</b> <i>values</i>: positive number; <i>default</i>: <code>1.0</code></dt>
31012
<dd><p>Number of seconds until the first and between subsequent events. The interval
31013
must be larger or equal 0.01 seconds for looping timers.
31015
<dt> <b>loop</b> <i>values</i>: <code>true</code>, <code>false</code>; <i>default</i>: <code>true</code></dt>
31016
<dd><p>A looping timer will send periodic events.
31021
<dt> <b>Messages:</b></dt>
31023
<dl compact="compact">
31024
<dt> <b>signal</b> See section <a href="#signal">signal</a></dt>
31025
<dd><p>Switches on at value ‘<samp>1</samp>’, and off at values ‘<samp>0</samp>’.
31027
<dt> <b>on</b> See section <a href="#on">on</a></dt>
31028
<dt> <b>off</b> See section <a href="#off">off</a></dt>
31032
<dt> <b>Action:</b> See section <a href="#target">target</a>, See section <a href="#action">action</a></dt>
31033
<dd><p>The action value starts with ‘<samp>true</samp>’ and alternates on every event between
31034
‘<samp>false</samp>’ and ‘<samp>true</samp>’. A timer that is reset starts again with value
31035
‘<samp>true</samp>’
31041
<a name="Libraries"></a>
31042
<table cellpadding="1" cellspacing="1" border="0">
31043
<tr><td valign="middle" align="left">[<a href="#ot_005ftimer" title="Previous section in reading order"> < </a>]</td>
31044
<td valign="middle" align="left">[<a href="#Basic-Functions" title="Next section in reading order"> > </a>]</td>
31045
<td valign="middle" align="left"> </td>
31046
<td valign="middle" align="left">[<a href="#Other-Objects" title="Beginning of this chapter or previous chapter"> << </a>]</td>
31047
<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up </a>]</td>
31048
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
31049
<td valign="middle" align="left"> </td>
31050
<td valign="middle" align="left"> </td>
31051
<td valign="middle" align="left"> </td>
31052
<td valign="middle" align="left"> </td>
31053
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
31054
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
31055
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
31056
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
31058
<a name="Libraries-1"></a>
31059
<h1 class="chapter">12. Libraries</h1>
31061
<p>Libraries do contain extensions that are not necessary for every level. By
31062
outsourcing them into separate files they do not get loaded if not used. This
31063
improves the level load time and runtime resource consumption. But as a level
31064
author you have to declare the usage of a library by an XML metadata
31065
‘<samp>dependency</samp>’ element within the <a href="#g_t_003ccompatibility_003e"><compatibility></a> element. The
31066
necessary line of code is listed within every library description.
31068
<p>Some libraries contain collections of useful functions and methods. They are
31069
described in this chapter. Other libraries do contain <a href="#Resolvers">Resolvers</a> and are
31070
described just there.
31072
<table class="menu" border="0" cellspacing="0">
31073
<tr><td align="left" valign="top"><a href="#Basic-Functions">12.1 Basic Functions</a></td><td> </td><td align="left" valign="top"> About basic lua functions and standard lua libraries.
31075
<tr><td align="left" valign="top"><a href="#liblua">12.2 liblua</a></td><td> </td><td align="left" valign="top"> General methods for tables.
31077
<tr><td align="left" valign="top"><a href="#libmath">12.3 libmath</a></td><td> </td><td align="left" valign="top"> Mathematical algorithms, like random permutations.
31079
<tr><td align="left" valign="top"><a href="#libmap">12.4 libmap</a></td><td> </td><td align="left" valign="top"> Methods for API 2-maps.
31081
<tr><td align="left" valign="top"><a href="#libimport">12.5 libimport</a></td><td> </td><td align="left" valign="top"> Methods for importing external level files.
31083
<tr><td align="left" valign="top"><a href="#libsoko">12.6 libsoko</a></td><td> </td><td align="left" valign="top"> A library to interpret Sokoban level files.
31088
<a name="Basic-Functions"></a>
31089
<table cellpadding="1" cellspacing="1" border="0">
31090
<tr><td valign="middle" align="left">[<a href="#Libraries" title="Previous section in reading order"> < </a>]</td>
31091
<td valign="middle" align="left">[<a href="#liblua" title="Next section in reading order"> > </a>]</td>
31092
<td valign="middle" align="left"> </td>
31093
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
31094
<td valign="middle" align="left">[<a href="#Libraries" title="Up section"> Up </a>]</td>
31095
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
31096
<td valign="middle" align="left"> </td>
31097
<td valign="middle" align="left"> </td>
31098
<td valign="middle" align="left"> </td>
31099
<td valign="middle" align="left"> </td>
31100
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
31101
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
31102
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
31103
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
31105
<a name="Basic-Functions-1"></a>
31106
<h2 class="section">12.1 Basic Functions</h2>
31108
<p>Enigma supports most Lua 5.1 and above statements, i.e. you can freely use
31109
tables and control structures in your level, as you would expect. However, some
31110
Lua functions have been deactivated for security reasons or to ensure
31111
upwards compatibility. These are ‘<samp>dofile</samp>’, ‘<samp>module</samp>’, ‘<samp>require</samp>’
31112
and most or all functions of the standard libraries ‘<samp>package</samp>’, ‘<samp>io</samp>’
31113
and ‘<samp>os</samp>’. You should use the <a href="#g_t_003ccompatibility_003e"><compatibility></a>-tag to include external
31114
libraries instead of ‘<samp>require</samp>’, ‘<samp>dofile</samp>’ or ‘<samp>package</samp>’, and
31115
‘<samp>print</samp>’ for output to stdout instead of ‘<samp>io</samp>’. The ‘<samp>print</samp>’
31116
function is pretty useful for developing and debugging complex levels, but
31117
should not appear in the level’s final version anymore.
31119
<p>Of Lua’s built-in mathematical functions you may use any of the following:
31120
‘<samp>math.abs</samp>’, ‘<samp>math.acos</samp>’, ‘<samp>math.asin</samp>’, ‘<samp>math.atan</samp>’,
31121
‘<samp>math.atan2</samp>’, ‘<samp>math.ceil</samp>’, ‘<samp>math.cos</samp>’, ‘<samp>math.cosh</samp>’,
31122
‘<samp>math.deg</samp>’, ‘<samp>math.exp</samp>’, ‘<samp>math.floor</samp>’, ‘<samp>math.fmod</samp>’,
31123
‘<samp>math.frexp</samp>’, ‘<samp>math.huge</samp>’, ‘<samp>math.ldexp</samp>’, ‘<samp>math.log</samp>’,
31124
‘<samp>math.log10</samp>’, ‘<samp>math.max</samp>’, ‘<samp>math.min</samp>’, ‘<samp>math.modf</samp>’,
31125
‘<samp>math.pi</samp>’, ‘<samp>math.pow</samp>’, ‘<samp>math.rad</samp>’, ‘<samp>math.random</samp>’,
31126
‘<samp>math.sin</samp>’, ‘<samp>math.sinh</samp>’, ‘<samp>math.sqrt</samp>’, ‘<samp>math.tan</samp>’,
31127
‘<samp>math.tanh</samp>’.
31129
<p>All trigonometric functions use radians, you can use ‘<samp>math.deg</samp>’ and
31130
‘<samp>math.rad</samp>’ to convert between radians and degrees. For the differences
31131
between ‘<samp>math.mod</samp>’, ‘<samp>%</samp>’, and ‘<samp>math.fmod</samp>’ see <a href="#lib_002elua_002emod">lib.lua.mod</a>.
31133
<p>While you have access to nearly all mathematical functions Lua defines, Enigma
31134
uses an own random generator, which you access via ‘<samp>math.random</samp>’ with the
31135
same syntax as Lua’s random generator. To ensure stability in future versions
31136
of Enigma, ‘<samp>math.randomseed</samp>’ is disabled.
31138
<p>Please read the online manual of
31139
<a href="http://www.lua.org/manual/5.1/">Lua 5.1</a> for more detailed information.
31143
<a name="liblua"></a>
31144
<table cellpadding="1" cellspacing="1" border="0">
31145
<tr><td valign="middle" align="left">[<a href="#Basic-Functions" title="Previous section in reading order"> < </a>]</td>
31146
<td valign="middle" align="left">[<a href="#lib_002elua_002ecombine_005ftables" title="Next section in reading order"> > </a>]</td>
31147
<td valign="middle" align="left"> </td>
31148
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
31149
<td valign="middle" align="left">[<a href="#Libraries" title="Up section"> Up </a>]</td>
31150
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
31151
<td valign="middle" align="left"> </td>
31152
<td valign="middle" align="left"> </td>
31153
<td valign="middle" align="left"> </td>
31154
<td valign="middle" align="left"> </td>
31155
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
31156
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
31157
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
31158
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
31160
<a name="liblua-1"></a>
31161
<h2 class="section">12.2 liblua</h2>
31163
<p>This library of basic extensions to the Lua language is described as of release
31166
<p>You can load it by adding an ‘<samp>dependency</samp>’ element to the
31167
<a href="#g_t_003ccompatibility_003e"><compatibility></a> XML Metadata element as follows:
31169
<table><tr><td> </td><td><pre class="example"> <<i>el</i>:<b>dependency</b> <i>el</i>:<b>path</b>="<var>lib/liblua</var>" <i>el</i>:<b>id</b>="<var>lib/liblua</var>" <i>el</i>:<b>release</b>="<var>1</var>" <i>el</i>:<b>preload</b>="<var>true</var>"/>
31170
</pre></td></tr></table>
31172
<table class="menu" border="0" cellspacing="0">
31173
<tr><td align="left" valign="top"><a href="#lib_002elua_002ecombine_005ftables">12.2.1 lib.lua.combine_tables</a></td><td> </td><td align="left" valign="top"> Collect entries of anonymous Lua-tables into a common table.
31175
<tr><td align="left" valign="top"><a href="#lib_002elua_002edeep_005fcopy">12.2.2 lib.lua.deep_copy</a></td><td> </td><td align="left" valign="top"> Complete copies of Lua-tables.
31177
<tr><td align="left" valign="top"><a href="#lib_002elua_002emod">12.2.3 lib.lua.mod</a></td><td> </td><td align="left" valign="top"> A modulo operation.
31179
<tr><td align="left" valign="top"><a href="#lib_002elua_002eprint_005ftable">12.2.4 lib.lua.print_table</a></td><td> </td><td align="left" valign="top"> Print tables for debug reasons.
31181
<tr><td align="left" valign="top"><a href="#lib_002elua_002eshuffle">12.2.5 lib.lua.shuffle</a></td><td> </td><td align="left" valign="top"> Shuffle arbitrary anonymous Lua-tables.
31183
<tr><td align="left" valign="top"><a href="#lib_002elua_002eto_005fstring">12.2.6 lib.lua.to_string</a></td><td> </td><td align="left" valign="top"> Takes anything as argument and tries to return a sensible description.
31189
<a name="lib_002elua_002ecombine_005ftables"></a>
31190
<table cellpadding="1" cellspacing="1" border="0">
31191
<tr><td valign="middle" align="left">[<a href="#liblua" title="Previous section in reading order"> < </a>]</td>
31192
<td valign="middle" align="left">[<a href="#lib_002elua_002edeep_005fcopy" title="Next section in reading order"> > </a>]</td>
31193
<td valign="middle" align="left"> </td>
31194
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
31195
<td valign="middle" align="left">[<a href="#liblua" title="Up section"> Up </a>]</td>
31196
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
31197
<td valign="middle" align="left"> </td>
31198
<td valign="middle" align="left"> </td>
31199
<td valign="middle" align="left"> </td>
31200
<td valign="middle" align="left"> </td>
31201
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
31202
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
31203
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
31204
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
31206
<a name="lib_002elua_002ecombine_005ftables-1"></a>
31207
<h3 class="subsection">12.2.1 lib.lua.combine_tables</h3>
31208
<a name="index-lib_002elua_002ecombine_005ftables"></a>
31210
<p>‘<samp>combine_tables</samp>’ combines all entries of a set or table of tables into one
31211
common table (i.e., it joins the subtables). As some of the subtables can have
31212
equally named entries, the first subtable has highest priority, the second
31213
subtable second priority etc.
31215
<dl compact="compact">
31216
<dt> <b>Syntax:</b></dt>
31217
<dd><p><b>lib.lua.combine_tables</b>(<i>overtable</i>)
31219
<p><b>lib.lua.combine_tables</b>(<i>table1</i>, <i>table2</i>, ...)
31221
<dl compact="compact">
31222
<dt> <i>overtable</i></dt>
31223
<dd><p>A table of tables: ‘<samp>overtable = {table1, table2, ...}</samp>’
31226
<dt> <i>table1</i>, <i>table2</i>, ...</dt>
31227
<dd><p>Lua tables to be joined.
31232
<dt> <b>Syntax Samples:</b></dt>
31233
<dd><table><tr><td> </td><td><pre class="example">all_contacts = lib.lua.combine_tables(telephone_numbers, email_addresses)
31234
</pre></td></tr></table>
31237
<dt> <b>Details:</b></dt>
31238
<dd><p>Just as groups can be joined by ‘<samp>grp1 + grp2</samp>’, it can sometimes be
31239
necessary to join anonymous tables, as well.
31240
In most situations, object grouping should be used instead, but when one works
31241
with more abstract data (like names of objects instead of objects, or tables
31242
holding design information), ‘<samp>combine_tables</samp>’ can be useful.
31245
<dt> <b>Full Example:</b></dt>
31250
<a name="lib_002elua_002edeep_005fcopy"></a>
31251
<table cellpadding="1" cellspacing="1" border="0">
31252
<tr><td valign="middle" align="left">[<a href="#lib_002elua_002ecombine_005ftables" title="Previous section in reading order"> < </a>]</td>
31253
<td valign="middle" align="left">[<a href="#lib_002elua_002emod" title="Next section in reading order"> > </a>]</td>
31254
<td valign="middle" align="left"> </td>
31255
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
31256
<td valign="middle" align="left">[<a href="#liblua" title="Up section"> Up </a>]</td>
31257
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
31258
<td valign="middle" align="left"> </td>
31259
<td valign="middle" align="left"> </td>
31260
<td valign="middle" align="left"> </td>
31261
<td valign="middle" align="left"> </td>
31262
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
31263
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
31264
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
31265
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
31267
<a name="lib_002elua_002edeep_005fcopy-1"></a>
31268
<h3 class="subsection">12.2.2 lib.lua.deep_copy</h3>
31269
<a name="index-lib_002elua_002edeep_005fcopy"></a>
31271
<p>‘<samp>deep_copy</samp>’ returns a copy of its argument, where table entries are
31272
not copied as memory references (like Lua typically does), but complete
31273
(thereby called "deep copy").
31275
<dl compact="compact">
31276
<dt> <b>Syntax:</b></dt>
31277
<dd><p><b>lib.lua.deep_copy</b>(<i>source</i>)
31279
<dl compact="compact">
31280
<dt> <i>source</i></dt>
31281
<dd><p>The object to be copied.
31286
<dt> <b>Syntax Samples:</b></dt>
31287
<dd><table><tr><td> </td><td><pre class="example">a = {5}
31289
c = lib.lua.deep_copy(a)
31291
</pre></td></tr></table>
31293
<p>After these four commands, ‘<samp>a[1]</samp>’ and ‘<samp>b[1]</samp>’ will both be ‘<samp>4</samp>’,
31294
but ‘<samp>c[1]</samp>’ will still be ‘<samp>5</samp>’.
31297
<dt> <b>Details:</b></dt>
31298
<dd><p>Metatables are transferred, but not deep-copied.
31299
Userdata (like tiles and positions) is not guaranteed to be deep-copied.
31302
<dt> <b>Full Example:</b></dt>
31307
<a name="lib_002elua_002emod"></a>
31308
<table cellpadding="1" cellspacing="1" border="0">
31309
<tr><td valign="middle" align="left">[<a href="#lib_002elua_002edeep_005fcopy" title="Previous section in reading order"> < </a>]</td>
31310
<td valign="middle" align="left">[<a href="#lib_002elua_002eprint_005ftable" title="Next section in reading order"> > </a>]</td>
31311
<td valign="middle" align="left"> </td>
31312
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
31313
<td valign="middle" align="left">[<a href="#liblua" title="Up section"> Up </a>]</td>
31314
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
31315
<td valign="middle" align="left"> </td>
31316
<td valign="middle" align="left"> </td>
31317
<td valign="middle" align="left"> </td>
31318
<td valign="middle" align="left"> </td>
31319
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
31320
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
31321
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
31322
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
31324
<a name="lib_002elua_002emod-1"></a>
31325
<h3 class="subsection">12.2.3 lib.lua.mod</h3>
31326
<a name="index-lib_002elua_002emod"></a>
31328
<p>A wrapper for the modulo operation.
31330
<dl compact="compact">
31331
<dt> <b>Syntax:</b></dt>
31332
<dd><p><b>lib.lua.mod</b>(<i>value</i>, <i>modul</i>)
31334
<dl compact="compact">
31335
<dt> <i>value</i>, <i>modul</i></dt>
31336
<dd><p>Numbers. ‘<samp>modul</samp>’ must be positive (non-zero).
31341
<dt> <b>Syntax Samples:</b></dt>
31342
<dd><table><tr><td> </td><td><pre class="example">lib.lua.mod(7*7, 17)
31343
lib.lua.mod(5.3, 1/3)
31344
lib.lua.mod(no["marble"].x, 1)
31345
</pre></td></tr></table>
31348
<dt> <b>Details:</b></dt>
31349
<dd><p>Lua 5.0 used ‘<samp>math.mod</samp>’ as modulo operation, this function is not
31350
available in Lua 5.1 anymore, and hence not available in Enigma. Lua 5.1
31351
provides ‘<samp>%</samp>’ and ‘<samp>math.fmod</samp>’. Whereas all three operations agree on
31352
positive numbers and zero as ‘<samp>value</samp>’, there are differences on negative
31354
</p><table><tr><td> </td><td><pre class="example">Lua 5.0: math.mod(-1, 4) == -1
31355
Lua 5.1: math.fmod(-1, 4) == -1
31356
Lua 5.1: (-1)%4 == 3
31357
lib.lua: lib.lua.mod(-1, 4) == 3
31358
</pre></td></tr></table>
31359
<p>While the Lua-own modulo functions yield results even for negative
31360
‘<samp>modul</samp>’ (with varying signs of the outcome), ‘<samp>lib.lua.mod</samp>’ will raise
31361
an error if ‘<samp>modul <= 0</samp>’, and the result ‘<samp>r</samp>’ is otherwise guaranteed
31362
to be <code>0 <= r < modul</code>.
31365
<dt> <b>Full Example:</b></dt>
31370
<a name="lib_002elua_002eprint_005ftable"></a>
31371
<table cellpadding="1" cellspacing="1" border="0">
31372
<tr><td valign="middle" align="left">[<a href="#lib_002elua_002emod" title="Previous section in reading order"> < </a>]</td>
31373
<td valign="middle" align="left">[<a href="#lib_002elua_002eshuffle" title="Next section in reading order"> > </a>]</td>
31374
<td valign="middle" align="left"> </td>
31375
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
31376
<td valign="middle" align="left">[<a href="#liblua" title="Up section"> Up </a>]</td>
31377
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
31378
<td valign="middle" align="left"> </td>
31379
<td valign="middle" align="left"> </td>
31380
<td valign="middle" align="left"> </td>
31381
<td valign="middle" align="left"> </td>
31382
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
31383
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
31384
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
31385
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
31387
<a name="lib_002elua_002eprint_005ftable-1"></a>
31388
<h3 class="subsection">12.2.4 lib.lua.print_table</h3>
31389
<a name="index-lib_002elua_002eprint_005ftable"></a>
31391
<p>‘<samp>print_table</samp>’ is a debug command, which uses the API’s ‘<samp>print</samp>’
31392
command to recursively print its argument to the standard output.
31394
<dl compact="compact">
31395
<dt> <b>Syntax:</b></dt>
31396
<dd><p><b>lib.lua.print_table</b>(<i>table</i>, <i>prefix</i>, <i>depth</i>)
31398
<dl compact="compact">
31399
<dt> <i>table</i></dt>
31400
<dd><p>The table to be printed.
31403
<dt> <i>prefix</i></dt>
31404
<dd><p>A string which will be printed before the table as a
31405
separator. Can be ‘<samp>nil</samp>’.
31408
<dt> <i>depth</i></dt>
31409
<dd><p>‘<samp>nil</samp>’ in normal use, ‘<samp>-1</samp>’ if you want to suppress the recursion.
31414
<dt> <b>Syntax Samples:</b></dt>
31415
<dd><table><tr><td> </td><td><pre class="example">a = {1, [5]=2, "Hello", other_table = {x = 4, y = 5, z = "World"}}
31416
lib.lua.print_table(a, nil, -1)
31417
lib.lua.print_table(a, "--> ")
31418
</pre></td></tr></table>
31421
<dt> <b>Details:</b></dt>
31422
<dd><p>‘<samp>print_table</samp>’ is recursive, i.e. a table with table
31423
as entries will call ‘<samp>print_table</samp>’ again. To avoid
31424
infinite loops, ‘<samp>depth</samp>’ is used internally to count
31425
the depth level of the recursion. The recursion currently
31426
stops on depth 5. Set ‘<samp>depth</samp>’ to ‘<samp>-1</samp>’ to stop
31427
recursion entirely.
31429
<p>Use ‘<samp>print_table</samp>’ only for debugging and testing, it
31430
is not meant as an element of gameplay.
31432
<dt> <b>Full Example:</b></dt>
31437
<a name="lib_002elua_002eshuffle"></a>
31438
<table cellpadding="1" cellspacing="1" border="0">
31439
<tr><td valign="middle" align="left">[<a href="#lib_002elua_002eprint_005ftable" title="Previous section in reading order"> < </a>]</td>
31440
<td valign="middle" align="left">[<a href="#lib_002elua_002eto_005fstring" title="Next section in reading order"> > </a>]</td>
31441
<td valign="middle" align="left"> </td>
31442
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
31443
<td valign="middle" align="left">[<a href="#liblua" title="Up section"> Up </a>]</td>
31444
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
31445
<td valign="middle" align="left"> </td>
31446
<td valign="middle" align="left"> </td>
31447
<td valign="middle" align="left"> </td>
31448
<td valign="middle" align="left"> </td>
31449
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
31450
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
31451
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
31452
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
31454
<a name="lib_002elua_002eshuffle-1"></a>
31455
<h3 class="subsection">12.2.5 lib.lua.shuffle</h3>
31456
<a name="index-lib_002elua_002eshuffle"></a>
31458
<p>‘<samp>shuffle</samp>’ randomly resorts its argument, a numerical table.
31460
<dl compact="compact">
31461
<dt> <b>Syntax:</b></dt>
31462
<dd><p><i>result</i> = <b>lib.lua.shuffle</b>(<i>source</i>)
31464
<dl compact="compact">
31465
<dt> <i>source</i></dt>
31466
<dd><p>The table to be shuffled (only the numerical entries will be shuffled).
31471
<dt> <b>Syntax Samples:</b></dt>
31472
<dd><table><tr><td> </td><td><pre class="example">orientations = lib.lua.shuffle({NORTH, SOUTH, EAST, WEST})
31473
a = {1, 2, 3, "r", {"x", "y", "z"}, 4}
31474
b = lib.lua.shuffle(a)
31475
</pre></td></tr></table>
31477
<p>A typical result for ‘<samp>b</samp>’ would be
31478
</p><table><tr><td> </td><td><pre class="example">b = {"r", 4, 2, {"x", "y", "z"}, 1, 3}
31479
</pre></td></tr></table>
31482
<dt> <b>Details:</b></dt>
31483
<dd><p>The result is a permutation of the numerical entries of the source table,
31484
starting with entry 1 and ending with entry ‘<samp>table.getn(<i>source</i>)</samp>’. All
31485
other entries will simply be copied into ‘<samp>result</samp>’. All copies are shallow
31486
copies, i.e. table-valued and userdata-valued entries (like objects) are not
31487
copied, just references (pointers) to them. Use <a href="#lib_002elua_002edeep_005fcopy">lib.lua.deep_copy</a> to
31488
create a deep copy of the shuffled table, if needed. ‘<samp>result</samp>’ will use the
31489
same metatable as ‘<samp>source</samp>’, and metamethods will be used during the copy
31490
and shuffling process.
31492
<p>Currently, ‘<samp>lib.lua.shuffle</samp>’ can shuffle only tables. To shuffle groups,
31493
use the group method of the same name:
31494
</p><table><tr><td> </td><td><pre class="example">mygroup:shuffle()
31495
</pre></td></tr></table>
31497
<p>Shuffling a <a href="#libmap">libmap</a>-map results in a map with shuffled rows, i.e. the
31498
x-coordinates of all tile keys are kept constant. Use <a href="#Rotating-and-Mirroring-Maps">Rotating and Mirroring Maps</a> to shuffle the columns.
31501
<dt> <b>Full Example:</b></dt>
31506
<a name="lib_002elua_002eto_005fstring"></a>
31507
<table cellpadding="1" cellspacing="1" border="0">
31508
<tr><td valign="middle" align="left">[<a href="#lib_002elua_002eshuffle" title="Previous section in reading order"> < </a>]</td>
31509
<td valign="middle" align="left">[<a href="#libmath" title="Next section in reading order"> > </a>]</td>
31510
<td valign="middle" align="left"> </td>
31511
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
31512
<td valign="middle" align="left">[<a href="#liblua" title="Up section"> Up </a>]</td>
31513
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
31514
<td valign="middle" align="left"> </td>
31515
<td valign="middle" align="left"> </td>
31516
<td valign="middle" align="left"> </td>
31517
<td valign="middle" align="left"> </td>
31518
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
31519
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
31520
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
31521
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
31523
<a name="lib_002elua_002eto_005fstring-1"></a>
31524
<h3 class="subsection">12.2.6 lib.lua.to_string</h3>
31525
<a name="index-lib_002elua_002eto_005fstring"></a>
31527
<p>‘<samp>to_string</samp>’ is a debug function. It may take anything as argument, and
31528
tries to return a sensible string describing the type and, if possible, the
31529
content of the argument.
31531
<dl compact="compact">
31532
<dt> <b>Syntax:</b></dt>
31533
<dd><p><b>lib.lua.to_string</b>(<i>arg</i>)
31535
<dl compact="compact">
31536
<dt> <i>arg</i></dt>
31537
<dd><p>The argument to be described.
31542
<dt> <b>Syntax Samples:</b></dt>
31543
<dd><table><tr><td> </td><td><pre class="example">print(lib.lua.to_string(strange_variable))
31544
</pre></td></tr></table>
31547
<dt> <b>Details:</b></dt>
31548
<dd><p>‘<samp>to_string</samp>’ is meant for debugging Lua code. Sometimes it happens that a
31549
variable is not what the author expected to be, and selecting the correct
31550
output method becomes try-and-error. ‘<samp>to_string</samp>’ is a fast shortcut to
31551
this. It returns the content of strings, numbers, booleans, tables, positions,
31552
and groups. It distinguishes ordinary tables from <a href="#libmap">libmap</a>-maps. For
31553
objects, it returns their name and position, for position lists, it returns the
31554
total number of positions. It further recognizes nil, tile and tiles.
31556
<p>Use ‘<samp>to_string</samp>’ only for debugging and testing, it
31557
is not meant as an element of gameplay.
31560
<dt> <b>Full Example:</b></dt>
31564
<a name="libmath"></a>
31565
<table cellpadding="1" cellspacing="1" border="0">
31566
<tr><td valign="middle" align="left">[<a href="#lib_002elua_002eto_005fstring" title="Previous section in reading order"> < </a>]</td>
31567
<td valign="middle" align="left">[<a href="#lib_002emath_002ecombinations" title="Next section in reading order"> > </a>]</td>
31568
<td valign="middle" align="left"> </td>
31569
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
31570
<td valign="middle" align="left">[<a href="#Libraries" title="Up section"> Up </a>]</td>
31571
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
31572
<td valign="middle" align="left"> </td>
31573
<td valign="middle" align="left"> </td>
31574
<td valign="middle" align="left"> </td>
31575
<td valign="middle" align="left"> </td>
31576
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
31577
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
31578
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
31579
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
31581
<a name="libmath-1"></a>
31582
<h2 class="section">12.3 libmath</h2>
31584
<p>This library of basic mathematical extensions is described as of release 1.
31586
<p>You can load it by adding an ‘<samp>dependency</samp>’ element to the
31587
<a href="#g_t_003ccompatibility_003e"><compatibility></a> XML Metadata element as follows:
31589
<table><tr><td> </td><td><pre class="example"> <<i>el</i>:<b>dependency</b> <i>el</i>:<b>path</b>="<var>lib/libmath</var>" <i>el</i>:<b>id</b>="<var>lib/libmath</var>" <i>el</i>:<b>release</b>="<var>1</var>" <i>el</i>:<b>preload</b>="<var>true</var>"/>
31590
</pre></td></tr></table>
31592
<p>It preloads automatically the library <a href="#liblua">liblua</a>.
31594
<table class="menu" border="0" cellspacing="0">
31595
<tr><td align="left" valign="top"><a href="#lib_002emath_002ecombinations">12.3.1 lib.math.combinations</a></td><td> </td><td align="left" valign="top"> Calculates all possible combinations of a set.
31597
<tr><td align="left" valign="top"><a href="#lib_002emath_002ecubic_005fpolynomial">12.3.2 lib.math.cubic_polynomial</a></td><td> </td><td align="left" valign="top"> Calculates the result of a cubic polynomial.
31599
<tr><td align="left" valign="top"><a href="#lib_002emath_002ecyclic_005fpermutation">12.3.3 lib.math.cyclic_permutation</a></td><td> </td><td align="left" valign="top"> Random cyclic permutation.
31601
<tr><td align="left" valign="top"><a href="#lib_002emath_002edigits">12.3.4 lib.math.digits</a></td><td> </td><td align="left" valign="top"> Decomposes a number into digits for an arbitrary base.
31603
<tr><td align="left" valign="top"><a href="#lib_002emath_002emanhattan_005fdistance">12.3.5 lib.math.manhattan_distance</a></td><td> </td><td align="left" valign="top"> Calculates the Manhattan distance of positions.
31605
<tr><td align="left" valign="top"><a href="#lib_002emath_002emark_005fcomponents">12.3.6 lib.math.mark_components</a></td><td> </td><td align="left" valign="top"> Calculate connected components of a group of floors.
31607
<tr><td align="left" valign="top"><a href="#lib_002emath_002epermutation">12.3.7 lib.math.permutation</a></td><td> </td><td align="left" valign="top"> Random permutation.
31609
<tr><td align="left" valign="top"><a href="#lib_002emath_002erandom_005fvector">12.3.8 lib.math.random_vector</a></td><td> </td><td align="left" valign="top"> A table with random entries.
31611
<tr><td align="left" valign="top"><a href="#lib_002emath_002esteps">12.3.9 lib.math.steps</a></td><td> </td><td align="left" valign="top"> A function to classify a number in intervals.
31617
<a name="lib_002emath_002ecombinations"></a>
31618
<table cellpadding="1" cellspacing="1" border="0">
31619
<tr><td valign="middle" align="left">[<a href="#libmath" title="Previous section in reading order"> < </a>]</td>
31620
<td valign="middle" align="left">[<a href="#lib_002emath_002ecubic_005fpolynomial" title="Next section in reading order"> > </a>]</td>
31621
<td valign="middle" align="left"> </td>
31622
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
31623
<td valign="middle" align="left">[<a href="#libmath" title="Up section"> Up </a>]</td>
31624
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
31625
<td valign="middle" align="left"> </td>
31626
<td valign="middle" align="left"> </td>
31627
<td valign="middle" align="left"> </td>
31628
<td valign="middle" align="left"> </td>
31629
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
31630
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
31631
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
31632
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
31634
<a name="lib_002emath_002ecombinations-1"></a>
31635
<h3 class="subsection">12.3.1 lib.math.combinations</h3>
31636
<a name="index-lib_002emath_002ecombinations"></a>
31638
<p>‘<samp>lib.math.combinations</samp>’ returns a table of all combinations of
31639
‘<samp>depth</samp>’ entries, each of which is chosen from ‘<samp>digits</samp>’.
31641
<dl compact="compact">
31642
<dt> <b>Syntax:</b></dt>
31643
<dd><p><b>lib.math.combinations</b>(<i>depth</i>, <i>digits</i>)
31645
<dl compact="compact">
31646
<dt> <i>depth</i></dt>
31647
<dd><p>A positive integer.
31650
<dt> <i>digits</i></dt>
31651
<dd><p>A positive integer or a table with numerical entries.
31656
<dt> <b>Syntax Samples:</b></dt>
31657
<dd><table><tr><td> </td><td><pre class="example">lib.math.combinations(2, 2)
31658
== { {1, 1}, {1, 2}, {2, 1}, {2, 2} }
31659
lib.math.combinations(3, {7, 8, "a"})
31660
== { {7,7,7}, {7,7,8}, {7,7,"a"},
31661
{7,8,7}, {7,8,8}, {7,8,"a"},
31662
{7,"a",7}, {7,"a",8}, {7,"a","a"},
31664
</pre></td></tr></table>
31667
<dt> <b>Details:</b></dt>
31668
<dd><p>Mathematically, it builds the leafs of an ‘<samp>#digits</samp>’-ary tree
31669
of depth ‘<samp>depth</samp>’.
31672
<dt> <b>Full Example:</b></dt>
31677
<a name="lib_002emath_002ecubic_005fpolynomial"></a>
31678
<table cellpadding="1" cellspacing="1" border="0">
31679
<tr><td valign="middle" align="left">[<a href="#lib_002emath_002ecombinations" title="Previous section in reading order"> < </a>]</td>
31680
<td valign="middle" align="left">[<a href="#lib_002emath_002ecyclic_005fpermutation" title="Next section in reading order"> > </a>]</td>
31681
<td valign="middle" align="left"> </td>
31682
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
31683
<td valign="middle" align="left">[<a href="#libmath" title="Up section"> Up </a>]</td>
31684
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
31685
<td valign="middle" align="left"> </td>
31686
<td valign="middle" align="left"> </td>
31687
<td valign="middle" align="left"> </td>
31688
<td valign="middle" align="left"> </td>
31689
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
31690
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
31691
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
31692
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
31694
<a name="lib_002emath_002ecubic_005fpolynomial-1"></a>
31695
<h3 class="subsection">12.3.2 lib.math.cubic_polynomial</h3>
31696
<a name="index-lib_002emath_002ecubic_005fpolynomial"></a>
31698
<p>‘<samp>cubic_polynomial</samp>’ returns the result of the following polynomial with
31699
coefficients in ‘<samp>a</samp>’:
31700
</p><table><tr><td> </td><td><pre class="example">a[10]*y*y*y + a[9]*x*y*y + a[8]*x*x*y + a[7]*x*x*x
31701
+ a[6]*y*y + a[5]*x*y + a[4]*x*x + a[3]*y + a[2]*x + a[1]
31702
</pre></td></tr></table>
31704
<dl compact="compact">
31705
<dt> <b>Syntax:</b></dt>
31706
<dd><p><b>lib.math.cubic_polynomial</b>(<i>a</i>, <i>x</i>, <i>y</i>)
31708
<dl compact="compact">
31710
<dd><p>A table with numerical entries ‘<samp>a[1]</samp>’ to ‘<samp>a[10]</samp>’. The entries may be
31711
‘<samp>nil</samp>’ (i.e. missing), then they are interpreted as zero.
31714
<dt> <i>x</i>, <i>y</i></dt>
31721
<dt> <b>Syntax Samples:</b></dt>
31722
<dd><table><tr><td> </td><td><pre class="example">lib.math.cubic_polynomial({1, a, b}, x, y) == a*x + b*y + 1
31723
</pre></td></tr></table>
31726
<dt> <b>Details:</b></dt>
31727
<dd><p>You can use ‘<samp>lib.math.random_vector(10, ...)</samp>’ and a modulo operation to
31728
easily form a random pattern of a floor, or choose the coefficients to your own
31729
liking. Entries in ‘<samp>a</samp>’ which are not numbers are considered zero.
31732
<dt> <b>Full Example:</b></dt>
31733
<dd><p>This is an excerpt from "Weirdly Wired" and demonstrates the use of
31734
‘<samp>cubic_polynomial</samp>’ inside a custom resolver to create random, but
31735
patternlike floors:
31736
</p><table><tr><td> </td><td><pre class="example">[...]
31737
floors = {ti[" "], ti["a"], ti["b"], ti["c"]}
31738
polynom = lib.math.random_vector(10, 4)
31740
function myresolver(key, x, y)
31741
if key == " " then
31742
return floors[lib.math.cubic_polynomial(a, x, y) % (#floors) + 1]
31750
w, h = wo(myresolver, " ", {
31752
</pre></td></tr></table>
31753
<p>"Weirdly Wired" is explained in detail in section <a href="#Weirdly-Wired">Weirdly Wired</a>.
31759
<a name="lib_002emath_002ecyclic_005fpermutation"></a>
31760
<table cellpadding="1" cellspacing="1" border="0">
31761
<tr><td valign="middle" align="left">[<a href="#lib_002emath_002ecubic_005fpolynomial" title="Previous section in reading order"> < </a>]</td>
31762
<td valign="middle" align="left">[<a href="#lib_002emath_002edigits" title="Next section in reading order"> > </a>]</td>
31763
<td valign="middle" align="left"> </td>
31764
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
31765
<td valign="middle" align="left">[<a href="#libmath" title="Up section"> Up </a>]</td>
31766
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
31767
<td valign="middle" align="left"> </td>
31768
<td valign="middle" align="left"> </td>
31769
<td valign="middle" align="left"> </td>
31770
<td valign="middle" align="left"> </td>
31771
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
31772
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
31773
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
31774
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
31776
<a name="lib_002emath_002ecyclic_005fpermutation-1"></a>
31777
<h3 class="subsection">12.3.3 lib.math.cyclic_permutation</h3>
31778
<a name="index-lib_002emath_002ecyclic_005fpermutation"></a>
31780
<p>‘<samp>cyclic_permutation</samp>’ returns a random permutation (i.e. a random shuffling)
31781
of the numbers 1 to ‘<samp>n</samp>’, which is cyclic: There exists a closed path from
31782
any number to any other number (see details below).
31784
<dl compact="compact">
31785
<dt> <b>Syntax:</b></dt>
31786
<dd><p><b>lib.math.cyclic_permutation</b>(<i>n</i>)
31788
<dl compact="compact">
31790
<dd><p>A positive integer.
31795
<dt> <b>Syntax Samples:</b></dt>
31796
<dd><table><tr><td> </td><td><pre class="example">lib.math.cyclic_permutation(#no["marbles#*"])
31797
</pre></td></tr></table>
31800
<dt> <b>Details:</b></dt>
31801
<dd><p>A cyclic permutation is a special kind of permutation, which has only one
31802
cycle. The easiest way is to give an example for a cyclic permutation:
31803
</p><table><tr><td> </td><td><pre class="example">8, 1, 2, 9, 3, 7, 4, 6, 10, 5
31804
</pre></td></tr></table>
31805
<p>We may write this as:
31806
</p><table><tr><td> </td><td><pre class="example">1 -> 8
31810
</pre></td></tr></table>
31811
<p>We can now put all of these together into a sequence:
31812
</p><table><tr><td> </td><td><pre class="example">1 -> 8 -> 6 -> 7 -> 4 -> 9 -> 10 -> 5 -> 3 -> 2 -> 1
31813
</pre></td></tr></table>
31814
<p>This is, the sequence creates a single cycle through all 10 numbers.
31815
This is not always possible with a general permutation.
31817
<p>If you need a fixpoint-free permutation, you might choose to use a cyclic
31818
permutation instead, although not every fixpoint-free permutation is cyclic.
31821
<dt> <b>Full Example:</b></dt>
31822
<dd><p>If you want to connect an arbitrary number of meditation marbles with
31823
rubberbands in a cyclic manner, but otherwise randomly, you can use
31824
‘<samp>lib.math.cyclic_permutation</samp>’:
31825
</p><table><tr><td> </td><td><pre class="example">marbles = no["marbles#*"]
31826
p = lib.math.cyclic_permutation(#marbles)
31828
for j = 1, #marbles do
31829
wo:add({"ot_rubberband", anchor1 = marbles[j], anchor2 = marbles[p[j]]})
31831
</pre></td></tr></table>
31832
<p>If you want to connect them in a linear way, you can either remove a step in
31834
</p><table><tr><td> </td><td><pre class="example">[...]
31835
for j = 1, #marbles - 1 do
31837
</pre></td></tr></table>
31838
<p>or use ‘<samp>lib.math.permutation</samp>’ in the following way:
31839
</p><table><tr><td> </td><td><pre class="example">marbles = no["marbles#*"]
31840
p = lib.math.permutation(#marbles)
31842
for j = 1, #marbles - 1 do
31843
wo:add({"ot_rubberband", anchor1 = marbles[p[j]], anchor2 = marbles[p[j+1]]})
31845
</pre></td></tr></table>
31851
<a name="lib_002emath_002edigits"></a>
31852
<table cellpadding="1" cellspacing="1" border="0">
31853
<tr><td valign="middle" align="left">[<a href="#lib_002emath_002ecyclic_005fpermutation" title="Previous section in reading order"> < </a>]</td>
31854
<td valign="middle" align="left">[<a href="#lib_002emath_002emanhattan_005fdistance" title="Next section in reading order"> > </a>]</td>
31855
<td valign="middle" align="left"> </td>
31856
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
31857
<td valign="middle" align="left">[<a href="#libmath" title="Up section"> Up </a>]</td>
31858
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
31859
<td valign="middle" align="left"> </td>
31860
<td valign="middle" align="left"> </td>
31861
<td valign="middle" align="left"> </td>
31862
<td valign="middle" align="left"> </td>
31863
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
31864
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
31865
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
31866
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
31868
<a name="lib_002emath_002edigits-1"></a>
31869
<h3 class="subsection">12.3.4 lib.math.digits</h3>
31870
<a name="index-lib_002emath_002edigits"></a>
31872
<p>‘<samp>lib.math.digits</samp>’ returns a table whose elements are the digits of
31873
‘<samp>number</samp>’ in base ‘<samp>base</samp>’. ‘<samp>base</samp>’ can be a positive integer (e.g.
31874
3 to get ternary) as well as a table (then the table entries with numerical
31875
keys will be used as digits).
31877
<dl compact="compact">
31878
<dt> <b>Syntax:</b></dt>
31879
<dd><p><b>lib.math.digits</b>(<i>number</i>, <i>base</i> [, <i>zero_is_empty</i>])
31881
<dl compact="compact">
31882
<dt> <i>number</i></dt>
31883
<dd><p>A non-negative integer.
31886
<dt> <i>base</i></dt>
31887
<dd><p>A positive integer other than 1, or a table with numerical keys.
31890
<dt> <i>zero_is_empty</i></dt>
31891
<dd><p>If <code>number</code> is zero, a table containing the zero-th digit is returned by
31892
default. If <code>zero_is_empty</code> is <code>true</code>, an empty table is returned
31898
<dt> <b>Syntax Samples:</b></dt>
31899
<dd><table><tr><td> </td><td><pre class="example">lib.math.digits(13, 2) == {1, 0, 1, 1}
31900
lib.math.digits(15, 16) == {15}
31901
lib.math.digits(17, 3) == {2, 2, 1}
31902
lib.math.digits(17, {2, "b", 5}) == {5, 5, "b"}
31903
</pre></td></tr></table>
31905
<p>The following function can be used to get a table with hexadecimal entries:
31906
</p><table><tr><td> </td><td><pre class="example">lib.math.digits(x, {0,1,2,3,4,5,6,7,8,9,"A","B","C","D","E","F"})
31907
</pre></td></tr></table>
31910
<dt> <b>Details:</b></dt>
31911
<dt> <b>Full Example:</b></dt>
31916
<a name="lib_002emath_002emanhattan_005fdistance"></a>
31917
<table cellpadding="1" cellspacing="1" border="0">
31918
<tr><td valign="middle" align="left">[<a href="#lib_002emath_002edigits" title="Previous section in reading order"> < </a>]</td>
31919
<td valign="middle" align="left">[<a href="#lib_002emath_002emark_005fcomponents" title="Next section in reading order"> > </a>]</td>
31920
<td valign="middle" align="left"> </td>
31921
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
31922
<td valign="middle" align="left">[<a href="#libmath" title="Up section"> Up </a>]</td>
31923
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
31924
<td valign="middle" align="left"> </td>
31925
<td valign="middle" align="left"> </td>
31926
<td valign="middle" align="left"> </td>
31927
<td valign="middle" align="left"> </td>
31928
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
31929
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
31930
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
31931
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
31933
<a name="lib_002emath_002emanhattan_005fdistance-1"></a>
31934
<h3 class="subsection">12.3.5 lib.math.manhattan_distance</h3>
31935
<a name="index-lib_002emath_002emanhattan_005fdistance"></a>
31937
<p>‘<samp>manhattan_distance</samp>’ calculates the Manhattan distance between two
31938
positions ‘<samp>pos1</samp>’ and ‘<samp>pos2</samp>’, which is
31939
</p><table><tr><td> </td><td><pre class="example">|pos1.x - pos2.x| + |pos1.y - pos2.y|.
31940
</pre></td></tr></table>
31942
<dl compact="compact">
31943
<dt> <b>Syntax:</b></dt>
31944
<dd><p><b>lib.math.manhattan_distance</b>(<i>pos1</i>, <i>pos2</i>)
31946
<p><b>lib.math.manhattan_distance</b>(<i>x1</i>, <i>y1</i>, <i>x2</i>, <i>y2</i>)
31948
<dl compact="compact">
31949
<dt> <i>pos1</i>, <i>pos2</i></dt>
31950
<dd><p>Positions (e.g. object references or tables ‘<samp>{posx, posy}</samp>’.
31953
<dt> <i>x1</i>, <i>y1</i>, <i>x2</i>, <i>y2</i></dt>
31954
<dd><p>Coordinates of the positions ‘<samp>pos1</samp>’ and ‘<samp>pos2</samp>’, respectively.
31959
<dt> <b>Syntax Samples:</b></dt>
31960
<dd><table><tr><td> </td><td><pre class="example">lib.math.manhattan_distance(4, 5, 3, 3)
31961
lib.math.manhattan_distance({4, 5}, {3, 3})
31962
lib.math.manhattan_distance(no["marble"], no["othermarble"])
31963
</pre></td></tr></table>
31966
<dt> <b>Details:</b></dt>
31967
<dd><p>The Manhattan distance counts the minimal number of pushes necessary to push a
31968
wood stone from one position to another. Its unit balls are squares with the
31969
diagonals parallel to the x- and y-axis (rhombi).
31972
<dt> <b>Full Example:</b></dt>
31977
<a name="lib_002emath_002emark_005fcomponents"></a>
31978
<table cellpadding="1" cellspacing="1" border="0">
31979
<tr><td valign="middle" align="left">[<a href="#lib_002emath_002emanhattan_005fdistance" title="Previous section in reading order"> < </a>]</td>
31980
<td valign="middle" align="left">[<a href="#lib_002emath_002epermutation" title="Next section in reading order"> > </a>]</td>
31981
<td valign="middle" align="left"> </td>
31982
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
31983
<td valign="middle" align="left">[<a href="#libmath" title="Up section"> Up </a>]</td>
31984
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
31985
<td valign="middle" align="left"> </td>
31986
<td valign="middle" align="left"> </td>
31987
<td valign="middle" align="left"> </td>
31988
<td valign="middle" align="left"> </td>
31989
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
31990
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
31991
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
31992
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
31994
<a name="lib_002emath_002emark_005fcomponents-1"></a>
31995
<h3 class="subsection">12.3.6 lib.math.mark_components</h3>
31996
<a name="index-lib_002emath_002emark_005fcomponents"></a>
31998
<p>‘<samp>mark_components</samp>’ calculates the connected components of a group of
31999
floors. Two floors are directly connected if their difference is within a given
32000
polist (or <code>NEIGHBORS_4</code>, by default). A table is returned holding a
32001
list of groups, each group is a complete connected component.
32002
In turn, an attribute is attached to each floor of the group which holds the
32003
number of its component. The name of this attribute can be chosen freely.
32005
<dl compact="compact">
32006
<dt> <b>Syntax:</b></dt>
32007
<dd><p><b>lib.math.mark_components</b>(<i>group</i>, <i>attribute_name</i> [, <i>neighborhood</i> [,
32008
<i>exclusive_attribute</i>]])
32010
<dl compact="compact">
32011
<dt> <i>group</i></dt>
32012
<dd><p>A group of floors.
32015
<dt> <i>attribute_name</i></dt>
32016
<dd><p>A non-empty string. Typically, this is the title of a user attribute, so it
32017
should start with an underscore ‘<samp>_</samp>’, unless you want to feat the
32018
information directly to a non-user attribute which takes numerical values.
32021
<dt> <i>neighborhood</i></dt>
32022
<dd><p>A symmetric polist (see details). Defaults to <code>NEIGHBORS_4</code>, which results
32023
in a calculation of path-connected components.
32026
<dt> <i>exclusive_attribute</i></dt>
32027
<dd><p>A boolean (<code>false</code> by default) which can be set to <code>true</code>, if there is
32028
no other floor which uses an attribute named <i>attribute_name</i>.
32033
<dt> <b>Syntax Samples:</b></dt>
32034
<dd><table><tr><td> </td><td><pre class="example">lib.math.mark_components(all_floors, "_component")
32035
local number = #lib.math.mark_components(all_floors, "_component", NEIGHBORS_CHESS .. NEIGHBORS_4)
32036
local lines = lib.math.mark_components(all_floors, "_linenumber", po(-1, 0) .. po(1, 0), true)
32037
</pre></td></tr></table>
32040
<dt> <b>Details:</b></dt>
32041
<dd><p>‘<samp>mark_components</samp>’ returns a Lua-table of groups, the table has natural numbers
32042
as indizes counting up starting from <code>1</code>, s.t. you can access the total
32043
number of components via ‘<samp>#</samp>’. Each entry of the table is a subgroup of
32044
<code>group</code>, a complete connected component. The sequence of the components is
32045
determined by the sequence of the floors in <code>group</code>.
32047
<p>You have to choose an attribute, as it is used during the calculation.
32048
Note that all prior information saved in this attribute is lost.
32049
Also note that choosing a read-only attribute results in an error.
32051
<p>The chosen neighborhood has to be a symmetric polist, i.e. if it contains the
32052
position <code>po(x, y)</code> it also has to contain the position <code>po(-x, -y)</code>
32053
at some point. Mathematically speaking, we analyze the connected components of
32054
an undirected graph, not of a directed graph.
32056
<p>If you know that there is no other floor which uses the attribute
32057
<code>attribute_name</code>, you may set ‘<samp>exclusive_attribute</samp>’ to ‘<samp>true</samp>’.
32058
This will result in a much faster algorithm.
32061
<dt> <b>Full Example:</b></dt>
32066
<a name="lib_002emath_002epermutation"></a>
32067
<table cellpadding="1" cellspacing="1" border="0">
32068
<tr><td valign="middle" align="left">[<a href="#lib_002emath_002emark_005fcomponents" title="Previous section in reading order"> < </a>]</td>
32069
<td valign="middle" align="left">[<a href="#lib_002emath_002erandom_005fvector" title="Next section in reading order"> > </a>]</td>
32070
<td valign="middle" align="left"> </td>
32071
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
32072
<td valign="middle" align="left">[<a href="#libmath" title="Up section"> Up </a>]</td>
32073
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
32074
<td valign="middle" align="left"> </td>
32075
<td valign="middle" align="left"> </td>
32076
<td valign="middle" align="left"> </td>
32077
<td valign="middle" align="left"> </td>
32078
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
32079
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
32080
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
32081
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
32083
<a name="lib_002emath_002epermutation-1"></a>
32084
<h3 class="subsection">12.3.7 lib.math.permutation</h3>
32085
<a name="index-lib_002emath_002epermutation"></a>
32087
<p>‘<samp>permutation</samp>’ returns a random permutation (i.e. a random shuffling) of the
32088
numbers 1 to ‘<samp>n</samp>’.
32090
<dl compact="compact">
32091
<dt> <b>Syntax:</b></dt>
32092
<dd><p><b>lib.math.permutation</b>(<i>n</i>)
32094
<dl compact="compact">
32096
<dd><p>A positive integer.
32101
<dt> <b>Syntax Samples:</b></dt>
32102
<dd><table><tr><td> </td><td><pre class="example">lib.math.permutation(#no["doors#*"])
32103
</pre></td></tr></table>
32106
<dt> <b>Details:</b></dt>
32107
<dd><p>Permutations give a simple way to randomize a level, e.g. by changing the
32108
assignment of action/target-pairs ("Which trigger to which door?").
32111
<dt> <b>Full Example:</b></dt>
32116
<a name="lib_002emath_002erandom_005fvector"></a>
32117
<table cellpadding="1" cellspacing="1" border="0">
32118
<tr><td valign="middle" align="left">[<a href="#lib_002emath_002epermutation" title="Previous section in reading order"> < </a>]</td>
32119
<td valign="middle" align="left">[<a href="#lib_002emath_002esteps" title="Next section in reading order"> > </a>]</td>
32120
<td valign="middle" align="left"> </td>
32121
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
32122
<td valign="middle" align="left">[<a href="#libmath" title="Up section"> Up </a>]</td>
32123
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
32124
<td valign="middle" align="left"> </td>
32125
<td valign="middle" align="left"> </td>
32126
<td valign="middle" align="left"> </td>
32127
<td valign="middle" align="left"> </td>
32128
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
32129
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
32130
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
32131
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
32133
<a name="lib_002emath_002erandom_005fvector-1"></a>
32134
<h3 class="subsection">12.3.8 lib.math.random_vector</h3>
32135
<a name="index-lib_002emath_002erandom_005fvector"></a>
32137
<p>‘<samp>random_vector</samp>’ returns a table of ‘<samp>n</samp>’ random entries.
32139
<dl compact="compact">
32140
<dt> <b>Syntax:</b></dt>
32141
<dd><p><b>lib.math.random_vector</b>(<i>n</i>, <i>...</i>)
32143
<dl compact="compact">
32145
<dd><p>A non-negative integer.
32148
<dt> <i>...</i></dt>
32149
<dd><p>Further arguments, which are the same as for ‘<samp>math.random</samp>’: Either no
32150
further arguments, then the random numbers will be float values in
32151
‘<samp>[0,1)</samp>’, or with one additional number ‘<samp>p</samp>’, then the random numbers
32152
will be integers between 1 and ‘<samp>p</samp>’ (both included), or two additional
32153
numbers ‘<samp>p, q</samp>’, then the random numbers will be integers between ‘<samp>p</samp>’
32154
and ‘<samp>q</samp>’ (both included).
32159
<dt> <b>Syntax Samples:</b></dt>
32160
<dd><table><tr><td> </td><td><pre class="example">lib.math.random_vector(4, 3)
32161
</pre></td></tr></table>
32162
<p>will return a table of 4 random numbers out of {1,2,3}, and
32163
</p><table><tr><td> </td><td><pre class="example">lib.math.random_vector(22)
32164
</pre></td></tr></table>
32165
<p>returns a table of 22 float values between 0.0 and 1.0 (excluding 1.0).
32168
<dt> <b>Details:</b></dt>
32169
<dd><p>‘<samp>random_vector</samp>’ can be used in conjunction with ‘<samp>cubic_polynomial</samp>’ to
32170
create random patterns, see <a href="#lib_002emath_002ecubic_005fpolynomial">lib.math.cubic_polynomial</a> and
32171
<a href="#Weirdly-Wired">Weirdly Wired</a>.
32174
<dt> <b>Full Example:</b></dt>
32179
<a name="lib_002emath_002esteps"></a>
32180
<table cellpadding="1" cellspacing="1" border="0">
32181
<tr><td valign="middle" align="left">[<a href="#lib_002emath_002erandom_005fvector" title="Previous section in reading order"> < </a>]</td>
32182
<td valign="middle" align="left">[<a href="#libmap" title="Next section in reading order"> > </a>]</td>
32183
<td valign="middle" align="left"> </td>
32184
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
32185
<td valign="middle" align="left">[<a href="#libmath" title="Up section"> Up </a>]</td>
32186
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
32187
<td valign="middle" align="left"> </td>
32188
<td valign="middle" align="left"> </td>
32189
<td valign="middle" align="left"> </td>
32190
<td valign="middle" align="left"> </td>
32191
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
32192
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
32193
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
32194
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
32196
<a name="lib_002emath_002esteps-1"></a>
32197
<h3 class="subsection">12.3.9 lib.math.steps</h3>
32198
<a name="index-lib_002emath_002esteps"></a>
32200
<p>‘<samp>steps</samp>’ takes a number ‘<samp>d</samp>’ and a table of numbers as arguments and
32201
returns the index of the first number larger or equal ‘<samp>d</samp>’, minus one.
32202
I.e. it classifies ‘<samp>d</samp>’ into the intervals given by the table, starting
32203
with zero, when ‘<samp>d</samp>’ is smaller than the first number in the table, one,
32204
when ‘<samp>d</samp>’ is larger or equal to the first, but smaller than the second
32207
<dl compact="compact">
32208
<dt> <b>Syntax:</b></dt>
32209
<dd><p><b>lib.math.steps</b>(<i>discriminator</i>, <i>steps</i>)
32211
<dl compact="compact">
32212
<dt> <i>discriminator</i></dt>
32216
<dt> <i>steps</i></dt>
32217
<dd><p>A table of numbers.
32222
<dt> <b>Syntax Samples:</b></dt>
32223
<dd><table><tr><td> </td><td><pre class="example">number_pairs = lib.math.steps(total_places, {2, 6, 10, 30})
32224
</pre></td></tr></table>
32227
<dt> <b>Details:</b></dt>
32228
<dd><p>Negative and non-integer values are allowed. However, the numbers in the
32229
‘<samp>steps</samp>’-table should be monotonously increasing (not necessarily strictly
32230
monotonously), as otherwise the result might be counter-intuitive.
32233
<dt> <b>Full Example:</b></dt>
32234
<dd><table><tr><td> </td><td><pre class="example">lib.math.steps(x, {4, 8, 13})
32235
</pre></td></tr></table>
32237
</p><table><tr><td> </td><td><pre class="example"> 0 if x < 4
32238
1 if 4 <= x < 8
32239
2 if 8 <= x < 13
32241
</pre></td></tr></table>
32247
<a name="libmap"></a>
32248
<table cellpadding="1" cellspacing="1" border="0">
32249
<tr><td valign="middle" align="left">[<a href="#lib_002emath_002esteps" title="Previous section in reading order"> < </a>]</td>
32250
<td valign="middle" align="left">[<a href="#Creating-Maps" title="Next section in reading order"> > </a>]</td>
32251
<td valign="middle" align="left"> </td>
32252
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
32253
<td valign="middle" align="left">[<a href="#Libraries" title="Up section"> Up </a>]</td>
32254
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
32255
<td valign="middle" align="left"> </td>
32256
<td valign="middle" align="left"> </td>
32257
<td valign="middle" align="left"> </td>
32258
<td valign="middle" align="left"> </td>
32259
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
32260
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
32261
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
32262
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
32264
<a name="libmap-1"></a>
32265
<h2 class="section">12.4 libmap</h2>
32267
<p>The ‘<samp>libmap</samp>’ gives the author more possibilities to work with API 2-maps.
32268
Up to now, a map just is a table of strings, as described in
32269
<a href="#World-Creation">World Creation</a>. With ‘<samp>libmap</samp>’, you can utilize maps in a more
32272
<p>This library is described as of release 1.
32274
<p>You can load it by adding an ‘<samp>dependency</samp>’ element to the
32275
<a href="#g_t_003ccompatibility_003e"><compatibility></a> XML Metadata element as follows:
32277
<table><tr><td> </td><td><pre class="example"> <<i>el</i>:<b>dependency</b> <i>el</i>:<b>path</b>="<var>lib/libmap</var>" <i>el</i>:<b>id</b>="<var>lib/libmap</var>" <i>el</i>:<b>release</b>="<var>1</var>" <i>el</i>:<b>preload</b>="<var>true</var>"/>
32278
</pre></td></tr></table>
32280
<p>It preloads automatically the library <a href="#liblua">liblua</a>.
32282
<p>We first give six task-oriented sections, then describe each function in detail.
32284
<table class="menu" border="0" cellspacing="0">
32285
<tr><td align="left" valign="top"><a href="#Creating-Maps">12.4.1 Creating Maps</a></td><td> </td><td align="left" valign="top">
32287
<tr><td align="left" valign="top"><a href="#Drawing-Maps">12.4.2 Drawing Maps</a></td><td> </td><td align="left" valign="top">
32289
<tr><td align="left" valign="top"><a href="#Rotating-and-Mirroring-Maps">12.4.3 Rotating and Mirroring Maps</a></td><td> </td><td align="left" valign="top">
32291
<tr><td align="left" valign="top"><a href="#Requesting-and-Changing-Single-Map-Entries">12.4.4 Requesting and Changing Single Map Entries</a></td><td> </td><td align="left" valign="top">
32293
<tr><td align="left" valign="top"><a href="#Connecting-Two-Maps">12.4.5 Connecting Two Maps</a></td><td> </td><td align="left" valign="top">
32295
<tr><td align="left" valign="top"><a href="#Other-Map-Tasks">12.4.6 Other Map Tasks</a></td><td> </td><td align="left" valign="top">
32297
<tr><td align="left" valign="top"><a href="#newMap">12.4.7 newMap</a></td><td> </td><td align="left" valign="top">
32299
<tr><td align="left" valign="top"><a href="#Map-Entry-Request">12.4.8 Map Entry Request</a></td><td> </td><td align="left" valign="top"> Index Operator ‘<samp>[]</samp>’ read and write
32301
<tr><td align="left" valign="top"><a href="#Map-Transformation">12.4.9 Map Transformation</a></td><td> </td><td align="left" valign="top"> Operator ‘<samp>^</samp>’
32303
<tr><td align="left" valign="top"><a href="#Map-Horizontal-Concatenation">12.4.10 Map Horizontal Concatenation</a></td><td> </td><td align="left" valign="top"> Operator ‘<samp>..</samp>’
32305
<tr><td align="left" valign="top"><a href="#Map-Vertical-Concatenation">12.4.11 Map Vertical Concatenation</a></td><td> </td><td align="left" valign="top"> Operator ‘<samp>+</samp>’
32307
<tr><td align="left" valign="top"><a href="#Map-Fusing">12.4.12 Map Fusing</a></td><td> </td><td align="left" valign="top"> Operator ‘<samp>*</samp>’
32309
<tr><td align="left" valign="top"><a href="#Map-Default-Keys">12.4.13 Map Default Keys</a></td><td> </td><td align="left" valign="top">
32311
<tr><td align="left" valign="top"><a href="#Map-Width-and-Height">12.4.14 Map Width and Height</a></td><td> </td><td align="left" valign="top">
32313
<tr><td align="left" valign="top"><a href="#lib_002emap_002ecovers">12.4.15 lib.map.covers</a></td><td> </td><td align="left" valign="top">
32315
<tr><td align="left" valign="top"><a href="#lib_002emap_002edefuse">12.4.16 lib.map.defuse</a></td><td> </td><td align="left" valign="top">
32317
<tr><td align="left" valign="top"><a href="#lib_002emap_002eextend">12.4.17 lib.map.extend</a></td><td> </td><td align="left" valign="top">
32319
<tr><td align="left" valign="top"><a href="#lib_002emap_002ematch">12.4.18 lib.map.match</a></td><td> </td><td align="left" valign="top">
32321
<tr><td align="left" valign="top"><a href="#lib_002emap_002epaste">12.4.19 lib.map.paste</a></td><td> </td><td align="left" valign="top">
32323
<tr><td align="left" valign="top"><a href="#lib_002emap_002eprint">12.4.20 lib.map.print</a></td><td> </td><td align="left" valign="top">
32325
<tr><td align="left" valign="top"><a href="#lib_002emap_002ereplace">12.4.21 lib.map.replace</a></td><td> </td><td align="left" valign="top">
32327
<tr><td align="left" valign="top"><a href="#lib_002emap_002ereplace_005foutside">12.4.22 lib.map.replace_outside</a></td><td> </td><td align="left" valign="top">
32329
<tr><td align="left" valign="top"><a href="#lib_002emap_002esub">12.4.23 lib.map.sub</a></td><td> </td><td align="left" valign="top">
32331
<tr><td align="left" valign="top"><a href="#lib_002emap_002etrim">12.4.24 lib.map.trim</a></td><td> </td><td align="left" valign="top">
32333
<tr><td align="left" valign="top"><a href="#Map-Transformation-Index-and-MAP_005fALL">12.4.25 Map Transformation Index and MAP_ALL</a></td><td> </td><td align="left" valign="top">
32335
<tr><td align="left" valign="top"><a href="#Map-Transformation-Composition-and-Powers">12.4.26 Map Transformation Composition and Powers</a></td><td> </td><td align="left" valign="top"> Operators ‘<samp>*</samp>’ and ‘<samp>^</samp>’
32337
<tr><td align="left" valign="top"><a href="#Map-Transformation-Inverse">12.4.27 Map Transformation Inverse</a></td><td> </td><td align="left" valign="top"> Operator ‘<samp>-</samp>’
32339
<tr><td align="left" valign="top"><a href="#Random-Map-Transformations">12.4.28 Random Map Transformations</a></td><td> </td><td align="left" valign="top">
32345
<a name="Creating-Maps"></a>
32346
<table cellpadding="1" cellspacing="1" border="0">
32347
<tr><td valign="middle" align="left">[<a href="#libmap" title="Previous section in reading order"> < </a>]</td>
32348
<td valign="middle" align="left">[<a href="#Drawing-Maps" title="Next section in reading order"> > </a>]</td>
32349
<td valign="middle" align="left"> </td>
32350
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
32351
<td valign="middle" align="left">[<a href="#libmap" title="Up section"> Up </a>]</td>
32352
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
32353
<td valign="middle" align="left"> </td>
32354
<td valign="middle" align="left"> </td>
32355
<td valign="middle" align="left"> </td>
32356
<td valign="middle" align="left"> </td>
32357
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
32358
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
32359
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
32360
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
32362
<a name="Creating-Maps-1"></a>
32363
<h3 class="subsection">12.4.1 Creating Maps</h3>
32365
<p>We start by defining a table of strings representing the level we want to
32366
write in a two-dimensional array of tile keys:
32368
<table><tr><td> </td><td><pre class="example">mypremap = {"# # # # # # # ",
32369
"o t1 # t2o ",
32370
"# # # ",
32371
"# d2d1# # ",
32372
"# @1# @2# ",
32373
"# # # t1# ",
32374
"o d3 t3o ",
32375
"# # # # # # # "}
32376
</pre></td></tr></table>
32378
<p>To not get confused with names, in this section we’ll call such a table of
32379
strings a ’premap’. We create a map (in the sense of libmap) by applying
32380
‘<samp>wo:newMap</samp>’ to it, with a default key and the premap as arguments:
32381
</p><table><tr><td> </td><td><pre class="example">mymap = wo:newMap(" ", mypremap)
32382
</pre></td></tr></table>
32383
<p>The default key is saved in ‘<samp>mymap</samp>’ as well, it’s part of a map.
32386
</p><table><tr><td> </td><td><pre class="example">mymap = wo:newMap(key, height, width)
32387
</pre></td></tr></table>
32388
<p>to define map of size ‘<samp>height*width</samp>’, where every tile key is ‘<samp>key</samp>’,
32389
and the default key is set to ‘<samp>key</samp>’ as well. You might even omit
32390
‘<samp>height</samp>’ and ‘<samp>width</samp>’, then you create a map consisting of only one
32395
<a name="Drawing-Maps"></a>
32396
<table cellpadding="1" cellspacing="1" border="0">
32397
<tr><td valign="middle" align="left">[<a href="#Creating-Maps" title="Previous section in reading order"> < </a>]</td>
32398
<td valign="middle" align="left">[<a href="#Rotating-and-Mirroring-Maps" title="Next section in reading order"> > </a>]</td>
32399
<td valign="middle" align="left"> </td>
32400
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
32401
<td valign="middle" align="left">[<a href="#libmap" title="Up section"> Up </a>]</td>
32402
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
32403
<td valign="middle" align="left"> </td>
32404
<td valign="middle" align="left"> </td>
32405
<td valign="middle" align="left"> </td>
32406
<td valign="middle" align="left"> </td>
32407
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
32408
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
32409
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
32410
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
32412
<a name="Drawing-Maps-1"></a>
32413
<h3 class="subsection">12.4.2 Drawing Maps</h3>
32415
<p>Just as we could have used the premap with ‘<samp>wo</samp>’ or ‘<samp>wo:drawMap</samp>’ to draw
32416
it (see <a href="#drawMap">drawMap</a>), we can use the newly created map as well:
32417
</p><table><tr><td> </td><td><pre class="example">wo(resolver, mymap)
32418
wo:drawMap(resolver, anchor, mymap)
32419
wo:drawMap(resolver, anchor, ignore, mymap)
32420
</pre></td></tr></table>
32421
<p>When the ‘<samp>ignore</samp>’-attribute for ‘<samp>drawMap</samp>’ is omitted, the default key
32422
of ‘<samp>mymap</samp>’ is used instead.
32424
<p>Of course you can draw the map multiple times, even from within a resolver, see
32425
<a href="#drawMap">drawMap</a> for a full example.
32429
<a name="Rotating-and-Mirroring-Maps"></a>
32430
<table cellpadding="1" cellspacing="1" border="0">
32431
<tr><td valign="middle" align="left">[<a href="#Drawing-Maps" title="Previous section in reading order"> < </a>]</td>
32432
<td valign="middle" align="left">[<a href="#Requesting-and-Changing-Single-Map-Entries" title="Next section in reading order"> > </a>]</td>
32433
<td valign="middle" align="left"> </td>
32434
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
32435
<td valign="middle" align="left">[<a href="#libmap" title="Up section"> Up </a>]</td>
32436
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
32437
<td valign="middle" align="left"> </td>
32438
<td valign="middle" align="left"> </td>
32439
<td valign="middle" align="left"> </td>
32440
<td valign="middle" align="left"> </td>
32441
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
32442
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
32443
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
32444
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
32446
<a name="Rotating-and-Mirroring-Maps-1"></a>
32447
<h3 class="subsection">12.4.3 Rotating and Mirroring Maps</h3>
32449
<p>We can transform a single map simply by using one of the following commands:
32450
</p><table><tr><td> </td><td><pre class="example">newmap = lib.map.transform(mymap, maptransformation)
32451
newmap = mymap ^ maptransformation
32452
</pre></td></tr></table>
32453
<p>‘<samp>maptransformation</samp>’ can be any of the following constants:
32454
</p><dl compact="compact">
32455
<dt> ‘<samp>MAP_IDENT</samp>’</dt>
32456
<dd><p>No transformation.
32458
<dt> ‘<samp>MAP_ROT_CW</samp>’</dt>
32459
<dd><p>Rotate 90 degrees clockwise.
32461
<dt> ‘<samp>MAP_ROT_180</samp>’</dt>
32462
<dd><p>Rotate 180 degrees (i.e. a point reflection around the midpoint).
32464
<dt> ‘<samp>MAP_ROT_CCW</samp>’</dt>
32465
<dd><p>Rotate 90 degrees counter-clockwise.
32467
<dt> ‘<samp>MAP_FLIP_HORIZONTAL</samp>’</dt>
32468
<dd><p>Flip each horizontal line, i.e. mirror against a vertical mirror: left and right are swapped.
32470
<dt> ‘<samp>MAP_FLIP_VERTICAL</samp>’</dt>
32471
<dd><p>Flip each vertical line, i.e. mirror against a horizontal mirror: up and down are swapped.
32473
<dt> ‘<samp>MAP_FLIP_SLASH</samp>’</dt>
32474
<dd><p>Flip each <code>/</code>-diagonal, i.e. mirror against a <code>\</code>-mirror: upper-right and
32475
lower-left corners are swapped.
32477
<dt> ‘<samp>MAP_FLIP_BACKSLASH</samp>’</dt>
32478
<dd><p>Flip each <code>\</code>-diagonal, i.e. mirror against a <code>/</code>-mirror: upper-left
32479
and lower-right corners are swapped.
32483
<p>When you apply multiple transformations, remember that their sequence
32484
matters. If you use
32485
</p><table><tr><td> </td><td><pre class="example">newmap = mymap ^ maptransformation1 ^ maptransformation2 ^ maptransformation3
32486
</pre></td></tr></table>
32487
<p>then <code>maptransformation1</code> acts first on <code>mymap</code>, then comes
32488
<code>maptransformation2</code>, and <code>maptransformation3</code> is
32489
last. However, composing transformations is associative, so you can use
32490
</p><table><tr><td> </td><td><pre class="example">newmap = mymap ^ ((maptransformation1 ^ maptransformation2) ^ maptransformation3)
32491
</pre></td></tr></table>
32493
</p><table><tr><td> </td><td><pre class="example">newmap = (mymap ^ maptransformation1) ^ (maptransformation2 ^ maptransformation3)
32494
</pre></td></tr></table>
32495
<p>to the same effect. Keep in mind that composing transformations is by far faster than
32496
applying transformations to maps. So the first example is faster than the
32497
second. Due to Lua’s sequence of evaluating operators,
32498
</p><table><tr><td> </td><td><pre class="example">newmap = mymap ^ maptransformation1 ^ maptransformation2 ^ maptransformation3
32499
</pre></td></tr></table>
32501
</p><table><tr><td> </td><td><pre class="example">newmap = mymap ^ (maptransformation1 ^ (maptransformation2 ^ maptransformation3))
32502
</pre></td></tr></table>
32503
<p>and hence already is the fastest possible sequence.
32505
<p>For composing transformations you may use <code>^</code> as well as <code>*</code>. You
32506
can also use <code>maptransformation ^ n</code> to calculate the n-th power of
32507
<code>maptransformation</code> for any integer n. The inverse of a transformation is
32508
given by <code>-maptransformation</code>, so
32509
</p><table><tr><td> </td><td><pre class="example">MAP_ROT_CW * (-MAP_ROT_CW) == MAP_IDENT
32510
</pre></td></tr></table>
32514
<a name="Requesting-and-Changing-Single-Map-Entries"></a>
32515
<table cellpadding="1" cellspacing="1" border="0">
32516
<tr><td valign="middle" align="left">[<a href="#Rotating-and-Mirroring-Maps" title="Previous section in reading order"> < </a>]</td>
32517
<td valign="middle" align="left">[<a href="#Connecting-Two-Maps" title="Next section in reading order"> > </a>]</td>
32518
<td valign="middle" align="left"> </td>
32519
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
32520
<td valign="middle" align="left">[<a href="#libmap" title="Up section"> Up </a>]</td>
32521
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
32522
<td valign="middle" align="left"> </td>
32523
<td valign="middle" align="left"> </td>
32524
<td valign="middle" align="left"> </td>
32525
<td valign="middle" align="left"> </td>
32526
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
32527
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
32528
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
32529
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
32531
<a name="Requesting-and-Changing-Single-Map-Entries-1"></a>
32532
<h3 class="subsection">12.4.4 Requesting and Changing Single Map Entries</h3>
32534
<p>Let’s take a look at our example again:
32535
</p><table><tr><td> </td><td><pre class="example">mymap = wo:newMap(" ", {"# # # # # # # ",
32536
"o t1 # t2o ",
32537
"# # # ",
32538
"# d2d1# # ",
32539
"# @1# @2# ",
32540
"# # # t1# ",
32541
"o d3 t3o ",
32542
"# # # # # # # "})
32543
</pre></td></tr></table>
32544
<p>It’s easy to check, what kind of tile key is at position <code>{1,1}</code> (note
32545
that the upper left corner is at position <code>{0,0}</code>):
32546
</p><table><tr><td> </td><td><pre class="example">mymap[{1, 1}] == "t1"
32547
</pre></td></tr></table>
32548
<p>It’s similarly easy to change it. Let’s say, we want to create a passage
32549
one tile right beside the second marble ‘<samp>@2</samp>’, which is named
32550
‘<samp>marble2</samp>’:
32551
</p><table><tr><td> </td><td><pre class="example">mymap[no["marble2"] + {1,0}] = " "
32552
</pre></td></tr></table>
32553
<p>Note that the reference to ‘<samp>marble2</samp>’ only works after the marble has been
32556
<p>Requesting and changing map entries can be used with position lists, object and
32557
group references as well.
32559
<p>You can replace any occurrence of a tile key ‘<samp>tile1</samp>’ by ‘<samp>tile2</samp>’ simply
32561
</p><table><tr><td> </td><td><pre class="example">mymap:replace(tile1, tile2)
32562
</pre></td></tr></table>
32563
<p>You can omit ‘<samp>tile2</samp>’, then any occurrence of ‘<samp>tile1</samp>’ will be replaced
32564
by the default key.
32566
<p>You can also search for positions in a map which fulfill given conditions by
32567
using ‘<samp>match</samp>’, the return value is a position list. The syntax is simple:
32568
</p><table><tr><td> </td><td><pre class="example">mymap:match()
32569
mymap:match(tilekey)
32570
mymap:match({pos1, key1a, key1b, ...}, {pos2, key2a, key2b, ...}, ...)
32571
mymap:match({{pos1, key1a, key1b, ...}, {pos2, key2a, key2b, ...}, ...})
32572
</pre></td></tr></table>
32573
<p>The first call will return all positions of the map. The second call will
32574
return all positions with the desired <code>tilekey</code>. The third and fourth call
32575
will return all positions <code>x</code> such that <code>x + pos1</code> is one of the keys
32576
<code>key1a</code> or <code>key1b</code> or ..., and such that <code>x + pos2</code> is one of
32577
the keys <code>key2a</code>, <code>2b</code>, ..., and so on. A tile outside of the map is
32578
considered to be a default key.
32580
<p>The resulting position list can then be used to replace the matching tile keys:
32581
</p><table><tr><td> </td><td><pre class="example">mymap[mymap:match(oldkey)] = newkey
32582
</pre></td></tr></table>
32583
<p>is equivalent to ‘<samp>mymap:replace(oldkey, newkey)</samp>’ (only slower), and
32584
</p><table><tr><td> </td><td><pre class="example">mymap[mymap:match({po(0,0), " "}, {NEIGHBORS_4, ".", ":"})] = "."
32585
</pre></td></tr></table>
32586
<p>will find all occurrences of ‘<samp> </samp>’, which are completely surrounded by
32587
‘<samp>.</samp>’, or ‘<samp>:</samp>’, or mixtures of these, and replace them by ‘<samp>.</samp>’. As
32588
all replacements are done after matching, and hence simultaneously, the newly
32589
introduced ‘<samp>.</samp>’ will not participate in the matching.
32593
<a name="Connecting-Two-Maps"></a>
32594
<table cellpadding="1" cellspacing="1" border="0">
32595
<tr><td valign="middle" align="left">[<a href="#Requesting-and-Changing-Single-Map-Entries" title="Previous section in reading order"> < </a>]</td>
32596
<td valign="middle" align="left">[<a href="#Other-Map-Tasks" title="Next section in reading order"> > </a>]</td>
32597
<td valign="middle" align="left"> </td>
32598
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
32599
<td valign="middle" align="left">[<a href="#libmap" title="Up section"> Up </a>]</td>
32600
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
32601
<td valign="middle" align="left"> </td>
32602
<td valign="middle" align="left"> </td>
32603
<td valign="middle" align="left"> </td>
32604
<td valign="middle" align="left"> </td>
32605
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
32606
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
32607
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
32608
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
32610
<a name="Connecting-Two-Maps-1"></a>
32611
<h3 class="subsection">12.4.5 Connecting Two Maps</h3>
32613
<p>Given two maps ‘<samp>map1</samp>’ and ‘<samp>map2</samp>’, we can glue them together
32614
horizontally by ‘<samp>map1 .. map2</samp>’ as well as vertically with ‘<samp>map1 +
32615
map2</samp>’. Missing entries will be filled with the default key of the respective
32616
map, the default key of the result will be the one of ‘<samp>map1</samp>’. A simple
32618
</p><table><tr><td> </td><td><pre class="example">map1 = wo:newMap(" ", {"####",
32622
map2 = wo:newMap(".", {"#######",
32623
"#w.#..#",
32624
"#..D..#",
32625
"#..#.w#",
32626
"#######"})
32627
map1 .. map2 == wo:newMap(" ", {"###########",
32628
"o ##w.#..#",
32629
"# w##..D..#",
32630
"#####..#.w#",
32631
" #######"})
32632
map2 .. map1 == wo:newMap(".", {"###########",
32633
"#w.#..#o #",
32634
"#..D..## w#",
32635
"#..#.w#####",
32636
"####### "})
32637
map1 + map2 == wo:newMap(" ", {"#### ",
32641
"#######",
32642
"#w.#..#",
32643
"#..D..#",
32644
"#..#.w#",
32645
"#######"})
32646
</pre></td></tr></table>
32648
<p>It’s also possible to paste a map into another map:
32649
</p><table><tr><td> </td><td><pre class="example">map1:paste(map2, pos)
32650
</pre></td></tr></table>
32651
<p>will paste ‘<samp>map2</samp>’ into ‘<samp>map1</samp>’ at position ‘<samp>pos</samp>’ (relative to
32652
‘<samp>map1</samp>’: <code>{0,0}</code> is the upper left edge). If necessary, ‘<samp>map1</samp>’
32653
will be extended such that the whole of ‘<samp>map2</samp>’ fits into it. You can use
32654
‘<samp>map1.sub</samp>’ to reduce its size again (see below) as well as to define
32655
‘<samp>map2</samp>’ as a section of another map. During the pasting, any occurrence of
32656
the default key of ‘<samp>map2</samp>’ will be ignored, i.e. not drawn onto
32657
‘<samp>map1</samp>’. You can change the default key with ‘<samp>map2.defaultkey = ...</samp>’
32658
prior to the paste command to circumvent this, or use
32659
‘<samp>map2:replace(tile)</samp>’ to replace more tile keys by the default key, such
32660
that they are not drawn as well. You can use an object group or position list
32661
for ‘<samp>pos</samp>’, in this case several copies of ‘<samp>map2</samp>’ will be pasted into
32662
‘<samp>map1</samp>’. In the first case, there is no guarantee about the sequence in
32663
which the maps will be pasted into ‘<samp>map1</samp>’. In the second case, a latter
32664
entry in the position list may overwrite the result of earlier entries.
32666
<p>However, there’s a fourth possibility: Two maps may represent two different
32667
parts of tile keys. Let’s give an example to fuse two tile key layers:
32668
</p><table><tr><td> </td><td><pre class="example">first_char = wo:newMap(".", {"#######",
32669
"#w.#..#",
32670
"#..D..#",
32671
"#..#.w#",
32672
"#######"})
32673
last_char = wo:newMap(".", {"C C",
32674
" 11 22 ",
32675
" 11322 ",
32676
" 11 22 ",
32678
first_char * last_char = wo:newMap(" .", {"#C# # # # # #C",
32679
"# w1.1# .2.2# ",
32680
"# .1.1D3.2.2# ",
32681
"# .1.1# .2w2# ",
32682
"#C# # # # # #C"})
32683
</pre></td></tr></table>
32684
<p>The default key of the fused map is the concatenation of the two original
32685
default keys. You can use a string instead of any of the two maps, in this case
32686
the whole tile key layer will consist of this string everywhere:
32687
</p><table><tr><td> </td><td><pre class="example">first_char = wo:newMap(".", {"#######",
32688
"#w.#..#",
32689
"#..D..#",
32690
"#..#.w#",
32691
"#######"})
32692
first_char * "u" = wo:newMap(" u", {"#u#u#u#u#u#u#u",
32693
"#uwu.u#u.u.u#u",
32694
"#u.u.uDu.u.u#u",
32695
"#u.u.u#u.uwu#u",
32696
"#u#u#u#u#u#u#u"})
32698
</pre></td></tr></table>
32699
<p>Fusing maps can be a mighty technique in combination with the
32700
<a href="#res_002ecomposer">res.composer</a>- and <a href="#res_002eautotile">res.autotile</a>-resolvers.
32702
<p>A map can also be defused: ‘<samp>map:defuse()</samp>’ will return a table of maps,
32703
where each map is of keylength one, holding the corresponding subkey character.
32707
<a name="Other-Map-Tasks"></a>
32708
<table cellpadding="1" cellspacing="1" border="0">
32709
<tr><td valign="middle" align="left">[<a href="#Connecting-Two-Maps" title="Previous section in reading order"> < </a>]</td>
32710
<td valign="middle" align="left">[<a href="#newMap" title="Next section in reading order"> > </a>]</td>
32711
<td valign="middle" align="left"> </td>
32712
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
32713
<td valign="middle" align="left">[<a href="#libmap" title="Up section"> Up </a>]</td>
32714
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
32715
<td valign="middle" align="left"> </td>
32716
<td valign="middle" align="left"> </td>
32717
<td valign="middle" align="left"> </td>
32718
<td valign="middle" align="left"> </td>
32719
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
32720
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
32721
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
32722
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
32724
<a name="Other-Map-Tasks-1"></a>
32725
<h3 class="subsection">12.4.6 Other Map Tasks</h3>
32727
<p>You can access the default key of a map by ‘<samp>mymap.defaultkey</samp>’, and change
32729
</p><table><tr><td> </td><td><pre class="example">mymap.defaultkey = ".3"
32730
mymap:set_default_key(".3")
32731
</pre></td></tr></table>
32732
<p>The new default key should have the same length as the old one. However, it is
32733
possible to choose a new key length as long as it fits to the map.
32735
<p>Width and height of a map can be accessed via ‘<samp>mymap.width</samp>’ and
32736
‘<samp>mymap.height</samp>’. However, these values can be changed only through the
32737
following commands ‘<samp>mymap:extend</samp>’ and ‘<samp>mymap:sub</samp>’.
32739
<p>It’s possible to extend a map to a given position, as long as both
32740
coordinates are non-negative:
32741
</p><table><tr><td> </td><td><pre class="example">mymap:extend({19, 12})
32742
</pre></td></tr></table>
32743
<p>will extend ‘<samp>mymap</samp>’ up to position ‘<samp>{19,12}</samp>’. Missing entries will
32744
be filled with the default key. If the map already covers this position, no
32745
change will be done.
32747
<p>If you want to check whether a position ‘<samp>pos</samp>’ lies inside a map, you can
32748
use ‘<samp>mymap:covers(pos)</samp>’, which returns a boolean value. Note that a map
32749
always starts in ‘<samp>{0,0}</samp>’.
32751
<p>‘<samp>lib.map.sub</samp>’ allows you to copy a rectangular area of a map and create a
32752
"submap" this way. ‘<samp>lib.map.sub</samp>’ uses the same syntax as
32753
‘<samp>wo:drawRect</samp>’, i.e. either
32754
</p><table><tr><td> </td><td><pre class="example">submap = mymap:sub(pos1, pos2)
32755
</pre></td></tr></table>
32756
<p>with ‘<samp>pos1</samp>’ being the top left-hand corner and ‘<samp>pos2</samp>’ the bottom
32757
right-hand corner, or alternatively
32758
</p><table><tr><td> </td><td><pre class="example">submap = mymap:sub(pos1, width, height)
32759
</pre></td></tr></table>
32760
<p>to define the rectangle by its top left-hand corner and the side lengths of its
32761
area. If the bottom right-hand corner overlaps the area of ‘<samp>mymap</samp>’, the
32762
resulting ‘<samp>submap</samp>’ will still be just the rectangular section of
32763
‘<samp>mymap</samp>’, i.e. width and height can be less than the arguments specified.
32764
Use ‘<samp>submap:extend(width, height)</samp>’ to ensure the full width and height.
32765
The default key of the submap of course is the default key of the original map.
32767
<p>‘<samp>lib.map.trim</samp>’ or ‘<samp>mymap:trim(tilekey)</samp>’ removes all lines and
32768
columns from the North, South, East, and West that consist of <code>tilekey</code>
32769
only; it’s like trimming a string from white spaces. You can omit
32770
‘<samp>tilekey</samp>’, then the default key is used instead.
32772
<p>‘<samp>mymap:replace_outside(tile1, tile2)</samp>’ is a kind of combination of
32773
‘<samp>replace</samp>’ and ‘<samp>trim</samp>’: All occurrences of <code>tile1</code>, which are
32774
connected to the border by a path of ‘<samp>tile1</samp>’, are replaced by
32775
<code>tile2</code> (or default key). Example:
32776
</p><table><tr><td> </td><td><pre class="example">map1 = wo:newMap(" ", {" ##########",
32777
"### ##",
32778
"F# D ## # #",
32780
"######## "})
32781
map2 = wo:newMap(" ", map1)
32782
map1:replace_outside(" ", ".")
32783
map2:replace_outside(" ", "#")
32784
map2:replace_outside("#", ".")
32785
</pre></td></tr></table>
32787
</p><table><tr><td> </td><td><pre class="example">map1 = {".##########",
32788
"### ##",
32789
"F# D ## #.#",
32791
"########..."})
32792
map2 = {"...........",
32793
"... ..",
32794
"F. D ## ...",
32796
"..........."})
32797
</pre></td></tr></table>
32798
<p>You can combine ‘<samp>replace_outside</samp>’ with ‘<samp>match</samp>’ to remove irrelevant
32800
</p><table><tr><td> </td><td><pre class="example">map1.defaultkey = "-"
32801
map1:replace_outside(" ")
32802
map1[map1:match({{po(0,0), "#"}, {NEIGHBORS_4, "-", "#", "F"}})] = "-"
32804
map1.defaultkey = " "
32805
</pre></td></tr></table>
32807
</p><table><tr><td> </td><td><pre class="example">map1 = {"---######-",
32809
"F# D ## #-",
32811
"-#######--"})
32812
</pre></td></tr></table>
32814
<p>Finally, you can use ‘<samp>mymap:print()</samp>’ to print ‘<samp>mymap</samp>’ to standard
32815
output. Similar to <a href="#lib_002elua_002eprint_005ftable">lib.lua.print_table</a>, this is useful for debugging a
32816
level by taking a look at its maps, but should not appear in the final level.
32817
‘<samp>mymap:print()</samp>’ allows several optional arguments:
32818
</p><table><tr><td> </td><td><pre class="example">mymap:print(withXYCounts, left_separator, right_separator)
32819
</pre></td></tr></table>
32820
<p>If ‘<samp>withXYCounts</samp>’ is ‘<samp>true</samp>’, the map is printed with coordinates on
32821
the top and on the left. ‘<samp>left_separator</samp>’ and ‘<samp>right_separator</samp>’ can
32822
be strings to be put between the left coordinate axis and the map, and behind
32823
the map (to analyse space characters).
32827
<a name="newMap"></a>
32828
<table cellpadding="1" cellspacing="1" border="0">
32829
<tr><td valign="middle" align="left">[<a href="#Other-Map-Tasks" title="Previous section in reading order"> < </a>]</td>
32830
<td valign="middle" align="left">[<a href="#Map-Entry-Request" title="Next section in reading order"> > </a>]</td>
32831
<td valign="middle" align="left"> </td>
32832
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
32833
<td valign="middle" align="left">[<a href="#libmap" title="Up section"> Up </a>]</td>
32834
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
32835
<td valign="middle" align="left"> </td>
32836
<td valign="middle" align="left"> </td>
32837
<td valign="middle" align="left"> </td>
32838
<td valign="middle" align="left"> </td>
32839
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
32840
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
32841
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
32842
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
32844
<a name="newMap-1"></a>
32845
<h3 class="subsection">12.4.7 newMap</h3>
32846
<a name="index-lib_002emap_002enewMap"></a>
32848
<p>‘<samp>wo:newMap</samp>’ takes a default key, and a premap or width and height as
32849
arguments, and returns a libmap-map.
32851
<dl compact="compact">
32852
<dt> <b>Syntax:</b></dt>
32853
<dd><p><i>mymap</i> = <b>wo:newMap</b>(<i>defaultkey</i>, <i>premap</i>)
32855
<p><i>mymap</i> = <b>wo:newMap</b>(<i>defaultkey</i>, <i>width</i>, <i>height</i>)
32857
<p><i>mymap</i> = <b>wo:newMap</b>(<i>defaultkey</i>)
32859
<dl compact="compact">
32860
<dt> <i>defaultkey</i></dt>
32861
<dd><p>A non-empty string, which becomes the default key of the new map.
32864
<dt> <i>premap</i></dt>
32865
<dd><p>A table of strings. It may have lines of varying length, but each line length
32866
must be divisible by the length of the default key.
32869
<dt> <i>width</i>, <i>height</i></dt>
32870
<dd><p>Positive integers. If width and height are given instead of a premap, a
32871
rectangular map consisting of the default key only is returned.
32875
<p>If neither a premap, nor width and height are given, a 1x1-map with the default
32879
<dt> <b>Syntax Samples:</b></dt>
32880
<dd><p>See <a href="#Creating-Maps">Creating Maps</a>.
32883
<dt> <b>Details:</b></dt>
32884
<dd><p>The syntax with neither premap nor width and height is useful in conjunction
32885
with <a href="#Map-Fusing">Map Fusing</a>.
32887
<p>A libmap-map is always rectangular. But you may use an ignore-key when you draw
32888
the map with <a href="#drawMap">drawMap</a> to create arbitrarily shaped areas.
32890
<p>If the premap is not rectangular, missing positions are set to the default key.
32891
However, each line length must be divisible by the default key’s length, otherwise
32892
an error is thrown.
32894
<p>You may feed arbitrary tables to <code>wo:newMap</code>, but only their positive
32895
integer entries are used, all other entries are ignored. You might even skip
32896
lines, like in this example:
32897
</p><table><tr><td> </td><td><pre class="example">wo:newMap(" ", {[25] = "g"})
32898
</pre></td></tr></table>
32899
<p>This will return a map of width 1 and height 25 filled with spaces, except for
32900
the last line, which will be <code>"g"</code>.
32902
<p>Each libmap-map is a table and can be used as a premap as well. Its default
32903
key is ignored when a libmap-map is considered as a premap. In particular,
32904
you may use <code>wo:newMap</code> to copy a libmap-map with:
32905
</p><table><tr><td> </td><td><pre class="example">newcopy = wo:newMap(mymap.defaultkey, mymap)
32906
</pre></td></tr></table>
32912
<a name="Map-Entry-Request"></a>
32913
<table cellpadding="1" cellspacing="1" border="0">
32914
<tr><td valign="middle" align="left">[<a href="#newMap" title="Previous section in reading order"> < </a>]</td>
32915
<td valign="middle" align="left">[<a href="#Map-Transformation" title="Next section in reading order"> > </a>]</td>
32916
<td valign="middle" align="left"> </td>
32917
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
32918
<td valign="middle" align="left">[<a href="#libmap" title="Up section"> Up </a>]</td>
32919
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
32920
<td valign="middle" align="left"> </td>
32921
<td valign="middle" align="left"> </td>
32922
<td valign="middle" align="left"> </td>
32923
<td valign="middle" align="left"> </td>
32924
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
32925
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
32926
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
32927
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
32929
<a name="Map-Entry-Request-1"></a>
32930
<h3 class="subsection">12.4.8 Map Entry Request</h3>
32931
<a name="index-lib_002emap_002eget"></a>
32932
<a name="index-lib_002emap_002eset"></a>
32934
<p>You may request and set single entries within a libmap-map, using the
32935
index-operator ‘<samp>[]</samp>’.
32937
<dl compact="compact">
32938
<dt> <b>Syntax:</b></dt>
32939
<dd><p><i>entry</i> = <i>mymap</i><b>[</b><i>posarg</i><b>]</b>
32941
<p><i>entry</i> = <b>lib.map.get</b>(<i>mymap</i>, <i>posarg</i>)
32943
<p><i>mymap</i><b>[</b><i>posarg</i><b>]</b> = <b>newentry</b>
32945
<p><b>lib.map.set</b>(<i>mymap</i>, <i>posarg</i>, <i>newentry</i>)
32947
<dl compact="compact">
32948
<dt> <i>entry</i>, <i>newentry</i></dt>
32949
<dd><p>Non-empty strings of the same length as the default key of <code>mymap</code>.
32952
<dt> <i>mymap</i></dt>
32953
<dd><p>A libmap-map.
32956
<dt> <i>posarg</i></dt>
32957
<dd><p>A position, object, group, position list, string, or table (interpretable as
32963
<dt> <b>Syntax Samples:</b></dt>
32964
<dd><p>See <a href="#Requesting-and-Changing-Single-Map-Entries">Requesting and Changing Single Map Entries</a>.
32967
<dt> <b>Details:</b></dt>
32968
<dd><p>A read-access with a group or position list will return a table of all key
32969
entries at the positions in the group or position list, in their corresponding
32970
sequence. Empty groups and position lists will return empty tables.
32972
<p>Correspondingly, a write-access with a group or position list changes the key
32973
at each position in the group or position list to the given string.
32975
<p>A read-access with a string invokes a <a href="#Positions-Repository-Request">Positions Repository Request</a> to
32976
retrieve a named position, unless the string equals one of <code>"type"</code>,
32977
<code>"width"</code>, <code>"height"</code>, <code>"defaultkey"</code>, or <code>"keylength"</code>,
32978
which return the corresponding properties of the map instead.
32980
<p>A write-access with a string similarly is interpreted as access to a named
32981
position, unless the string equals <code>"defaultkey"</code>, see
32982
<a href="#Map-Default-Keys">Map Default Keys</a>. A write-access to a non-existing position throws an
32985
<p>You may request any position outside of the scope of the map, even with
32986
negative coordinates. If you do so, the default key is returned. This accounts
32987
for non-existing positions as well (for example positions of items in the
32988
inventory, or the position of a string which doesn’t describe a named position).
32990
<p>If you try to set an entry to a position with a negative coordinate an error
32991
is returned. However, if you use non-negative coordinates outside of the scope
32992
of the map, the map is subsequently extended to the new position, setting
32993
the default key as entry where necessary.
32995
<p>Floating-point coordinates are always rounded to a grid position
32996
(see <a href="#Position-Grid-Rounding">Position Grid Rounding</a>).
33002
<a name="Map-Transformation"></a>
33003
<table cellpadding="1" cellspacing="1" border="0">
33004
<tr><td valign="middle" align="left">[<a href="#Map-Entry-Request" title="Previous section in reading order"> < </a>]</td>
33005
<td valign="middle" align="left">[<a href="#Map-Horizontal-Concatenation" title="Next section in reading order"> > </a>]</td>
33006
<td valign="middle" align="left"> </td>
33007
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
33008
<td valign="middle" align="left">[<a href="#libmap" title="Up section"> Up </a>]</td>
33009
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
33010
<td valign="middle" align="left"> </td>
33011
<td valign="middle" align="left"> </td>
33012
<td valign="middle" align="left"> </td>
33013
<td valign="middle" align="left"> </td>
33014
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
33015
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
33016
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
33017
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
33019
<a name="Map-Transformation-1"></a>
33020
<h3 class="subsection">12.4.9 Map Transformation</h3>
33021
<a name="index-lib_002emap_002etransform"></a>
33023
<p>You may transform any libmap-map according to the eight map transformation
33024
constants given in <a href="#Rotating-and-Mirroring-Maps">Rotating and Mirroring Maps</a>.
33026
<dl compact="compact">
33027
<dt> <b>Syntax:</b></dt>
33028
<dd><p><i>newmap</i> = <i>mymap</i><b>^</b><i>maptransformation</i>
33030
<p><i>newmap</i> = <b>lib.map.transform</b>(<i>mymap</i>, <i>maptransformation</i>)
33032
<dl compact="compact">
33033
<dt> <i>mymap</i>, <i>newmap</i></dt>
33034
<dd><p>libmap-maps.
33037
<dt> <i>maptransformation</i></dt>
33038
<dd><p>One of the following eight constants: <code>MAP_IDENT</code>, <code>MAP_ROT_CW</code>,
33039
<code>MAP_ROT_180</code>, <code>MAP_ROT_CCW</code>, <code>MAP_FLIP_HORIZONTAL</code>,
33040
<code>MAP_FLIP_VERTICAL</code>, <code>MAP_FLIP_SLASH</code>, <code>MAP_FLIP_BACKSLASH</code>.
33045
<dt> <b>Syntax Samples:</b></dt>
33046
<dd><p>See <a href="#Rotating-and-Mirroring-Maps">Rotating and Mirroring Maps</a>.
33049
<dt> <b>Details:</b></dt>
33050
<dd><p>As map transformations can be composed with ‘<samp>^</samp>’, it is possible to combine
33051
several transformations without brackets; it’s only important to always have the
33052
map on the left side of the ‘<samp>^</samp>’-sign:
33053
</p><table><tr><td> </td><td><pre class="example">newmap = mymap ^ MAP_ROT_CW ^ MAP_FLIP_HORIZONTAL
33054
</pre></td></tr></table>
33055
<p>However, each such combination can equally well be expressed with a single constant.
33057
<p>After a transformation, height and width of a map might have swapped.
33063
<a name="Map-Horizontal-Concatenation"></a>
33064
<table cellpadding="1" cellspacing="1" border="0">
33065
<tr><td valign="middle" align="left">[<a href="#Map-Transformation" title="Previous section in reading order"> < </a>]</td>
33066
<td valign="middle" align="left">[<a href="#Map-Vertical-Concatenation" title="Next section in reading order"> > </a>]</td>
33067
<td valign="middle" align="left"> </td>
33068
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
33069
<td valign="middle" align="left">[<a href="#libmap" title="Up section"> Up </a>]</td>
33070
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
33071
<td valign="middle" align="left"> </td>
33072
<td valign="middle" align="left"> </td>
33073
<td valign="middle" align="left"> </td>
33074
<td valign="middle" align="left"> </td>
33075
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
33076
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
33077
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
33078
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
33080
<a name="Map-Horizontal-Concatenation-1"></a>
33081
<h3 class="subsection">12.4.10 Map Horizontal Concatenation</h3>
33082
<a name="index-lib_002emap_002econcat_005fhorizontally"></a>
33084
<p>You may glue libmap-maps one after another in horizontal direction using
33085
‘<samp>..</samp>’. Note the similarity to the meaning of ‘<samp>..</samp>’ in the context of
33086
strings to remember its meaning in contrast to ‘<samp>+</samp>’ (see
33087
<a href="#Map-Vertical-Concatenation">Map Vertical Concatenation</a>).
33089
<dl compact="compact">
33090
<dt> <b>Syntax:</b></dt>
33091
<dd><p><i>newmap</i> = <i>mymap1</i> <b>..</b> <i>mymap2</i>
33093
<p><i>newmap</i> = <b>lib.map.concat_horizontally</b>(<i>mymap1</i>, <i>mymap2</i>)
33095
<dl compact="compact">
33096
<dt> <i>mymap1</i>, <i>mymap2</i>, <i>newmap</i></dt>
33097
<dd><p>libmap-maps.
33102
<dt> <b>Syntax Samples:</b></dt>
33103
<dd><p>See <a href="#Connecting-Two-Maps">Connecting Two Maps</a>.
33106
<dt> <b>Details:</b></dt>
33107
<dd><p>The upper-left corner of the second map is set beneath the upper-right corner
33108
of the first, i.e. the bottom lines of the maps are aligned. If you want to
33109
align them in another way, you may first vertically concat a map of suitable
33110
height to the second (or first) map, like in this example:
33111
</p><table><tr><td> </td><td><pre class="example">newmap = mymap1 .. (wo:newMap(" ", 1, 13) + mymap2)
33112
</pre></td></tr></table>
33114
<p>The default key of the new map is the default key of the first map. Any missing
33115
position to gain a rectangular map is subsequently set to this default key.
33121
<a name="Map-Vertical-Concatenation"></a>
33122
<table cellpadding="1" cellspacing="1" border="0">
33123
<tr><td valign="middle" align="left">[<a href="#Map-Horizontal-Concatenation" title="Previous section in reading order"> < </a>]</td>
33124
<td valign="middle" align="left">[<a href="#Map-Fusing" title="Next section in reading order"> > </a>]</td>
33125
<td valign="middle" align="left"> </td>
33126
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
33127
<td valign="middle" align="left">[<a href="#libmap" title="Up section"> Up </a>]</td>
33128
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
33129
<td valign="middle" align="left"> </td>
33130
<td valign="middle" align="left"> </td>
33131
<td valign="middle" align="left"> </td>
33132
<td valign="middle" align="left"> </td>
33133
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
33134
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
33135
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
33136
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
33138
<a name="Map-Vertical-Concatenation-1"></a>
33139
<h3 class="subsection">12.4.11 Map Vertical Concatenation</h3>
33140
<a name="index-lib_002emap_002econcat_005fvertically"></a>
33142
<p>You may glue libmap-maps on top of each other in vertical direction using
33143
‘<samp>+</samp>’. Compare with the meaning of ‘<samp>..</samp>’ (see
33144
<a href="#Map-Horizontal-Concatenation">Map Horizontal Concatenation</a>).
33146
<dl compact="compact">
33147
<dt> <b>Syntax:</b></dt>
33148
<dd><p><i>newmap</i> = <i>mymap1</i> <b>+</b> <i>mymap2</i>
33150
<p><i>newmap</i> = <b>lib.map.concat_vertically</b>(<i>mymap1</i>, <i>mymap2</i>)
33152
<dl compact="compact">
33153
<dt> <i>mymap1</i>, <i>mymap2</i>, <i>newmap</i></dt>
33154
<dd><p>libmap-maps.
33159
<dt> <b>Syntax Samples:</b></dt>
33160
<dd><p>See <a href="#Connecting-Two-Maps">Connecting Two Maps</a>.
33163
<dt> <b>Details:</b></dt>
33164
<dd><p>The upper-left corner of the second map is set below the lower-left corner
33165
of the first, i.e. the left borders of the maps are aligned. If you want to
33166
align them in another way, you may first horizontally concat a map of suitable
33167
width to the second (or first) map, like in this example:
33168
</p><table><tr><td> </td><td><pre class="example">newmap = mymap1 + (wo:newMap(" ", 13, 1) .. mymap2)
33169
</pre></td></tr></table>
33171
<p>The default key of the new map is the default key of the first map. Any missing
33172
position to gain a rectangular map is subsequently set to this default key.
33178
<a name="Map-Fusing"></a>
33179
<table cellpadding="1" cellspacing="1" border="0">
33180
<tr><td valign="middle" align="left">[<a href="#Map-Vertical-Concatenation" title="Previous section in reading order"> < </a>]</td>
33181
<td valign="middle" align="left">[<a href="#Map-Default-Keys" title="Next section in reading order"> > </a>]</td>
33182
<td valign="middle" align="left"> </td>
33183
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
33184
<td valign="middle" align="left">[<a href="#libmap" title="Up section"> Up </a>]</td>
33185
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
33186
<td valign="middle" align="left"> </td>
33187
<td valign="middle" align="left"> </td>
33188
<td valign="middle" align="left"> </td>
33189
<td valign="middle" align="left"> </td>
33190
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
33191
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
33192
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
33193
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
33195
<a name="Map-Fusing-1"></a>
33196
<h3 class="subsection">12.4.12 Map Fusing</h3>
33197
<a name="index-lib_002emap_002efuse"></a>
33199
<p>You may fuse libmap-maps in the way described in <a href="#Connecting-Two-Maps">Connecting Two Maps</a>, by
33200
interpreting the two keys of the two maps at a position as parts of a combined
33201
(fused) key at this position.
33203
<dl compact="compact">
33204
<dt> <b>Syntax:</b></dt>
33205
<dd><p><i>newmap</i> = <i>mymap1</i> <b>*</b> <i>mymap2</i>
33207
<p><i>newmap</i> = <b>lib.map.fuse</b>(<i>mymap1</i>, <i>mymap2</i>)
33209
<dl compact="compact">
33210
<dt> <i>mymap1</i>, <i>mymap2</i>, <i>newmap</i></dt>
33211
<dd><p>libmap-maps.
33216
<dt> <b>Syntax Samples:</b></dt>
33217
<dd><p>See <a href="#Connecting-Two-Maps">Connecting Two Maps</a>.
33220
<dt> <b>Details:</b></dt>
33221
<dd><p>Missing keys in one map are replaced by the default key of this map.
33223
<p>The default key of the result is the concatenation of the default key of the
33224
first map with the default key of the second map (as expected).
33226
<p>The inverse of the fusing operation is given by <a href="#lib_002emap_002edefuse">lib.map.defuse</a>.
33228
<p>One of the maps is allowed to be a string, which is then interpreted as a
33229
1x1-map with the given string as default key. The result of the fusing process
33230
then is that each tile key is concatenated with the given string.
33236
<a name="Map-Default-Keys"></a>
33237
<table cellpadding="1" cellspacing="1" border="0">
33238
<tr><td valign="middle" align="left">[<a href="#Map-Fusing" title="Previous section in reading order"> < </a>]</td>
33239
<td valign="middle" align="left">[<a href="#Map-Width-and-Height" title="Next section in reading order"> > </a>]</td>
33240
<td valign="middle" align="left"> </td>
33241
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
33242
<td valign="middle" align="left">[<a href="#libmap" title="Up section"> Up </a>]</td>
33243
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
33244
<td valign="middle" align="left"> </td>
33245
<td valign="middle" align="left"> </td>
33246
<td valign="middle" align="left"> </td>
33247
<td valign="middle" align="left"> </td>
33248
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
33249
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
33250
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
33251
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
33253
<a name="Map-Default-Keys-1"></a>
33254
<h3 class="subsection">12.4.13 Map Default Keys</h3>
33255
<a name="index-lib_002emap_002eset_005fdefault_005fkey"></a>
33257
<p>A libmap-map always includes a default key, which is used in various places
33258
throughout the library. It is the placeholder whenever a key out of scope of
33259
the map is requested, or when <a href="#drawMap">drawMap</a> or <code>wo</code> (see
33260
<a href="#World-Creation">World Creation</a>) are invoked without a default or ignore key. Hence, it is
33261
sometimes necessary to retrieve or change the default key of a map.
33263
<dl compact="compact">
33264
<dt> <b>Syntax:</b></dt>
33265
<dd><p><i>defaultkey</i> = <i>mymap</i><b>.defaultkey</b>
33267
<p><i>defaultkey</i> = <i>mymap</i><b>["defaultkey"]</b>
33269
<p><i>keylength</i> = <i>mymap</i><b>.keylength</b>
33271
<p><i>keylength</i> = <i>mymap</i><b>["keylength"]</b>
33273
<p><i>mymap</i><b>.defaultkey</b> = <i>newkey</i>
33275
<p><i>mymap</i><b>["defaultkey"]</b> = <i>newkey</i>
33277
<p><i>mymap</i>:<b>set_default_key</b>(<i>newkey</i>)
33279
<p><b>lib.map.set_default_key</b>(<i>mymap</i>, <i>newkey</i>)
33281
<dl compact="compact">
33282
<dt> <i>defaultkey</i>, <i>newkey</i></dt>
33283
<dd><p>A non-empty string.
33286
<dt> <i>mymap</i></dt>
33287
<dd><p>A libmap-map.
33290
<dt> <i>keylength</i></dt>
33291
<dd><p>A positive integer, which equals the length of the default key.
33296
<dt> <b>Syntax Samples:</b></dt>
33297
<dd><p>See <a href="#Other-Map-Tasks">Other Map Tasks</a>.
33300
<dt> <b>Details:</b></dt>
33301
<dd><p>It typically makes sense to change the default key of a map, when two or more
33302
keys can be equally well thought of as being "default". Such an example occurs
33303
during the import of Sokoban levels: While the canonical default key would be
33304
the key of the inner free tiles, it is temporarily set to the key of the outer
33305
area to allow a simple matching and trimming. It is then set back again:
33306
</p><table><tr><td> </td><td><pre class="example">local map = lib.import.level_to_map(level, "\n", " ")
33307
map:replace("_")
33308
map:replace("-")
33309
map:replace_outside(" ", "-")
33310
-- Remove redundant walls by outside:
33311
-- A wall is redundant, if it is surrounded by "-" or "#".
33312
-- In this case, it can be replaced by "-".
33313
map.defaultkey = "-"
33314
map[map:match({{po(0,0), "#"}, {NEIGHBORS_8, "-", "#"}})] = "-"
33316
map.defaultkey = " "
33317
</pre></td></tr></table>
33318
<p>See <a href="#lib_002emap_002ematch">lib.map.match</a> and <a href="#lib_002emap_002etrim">lib.map.trim</a> for details on their use of
33321
<p>The keylength of a map can be read, but not written. To change the keylength,
33322
a new default key has to be assigned. On the other hand, it is possible to
33323
change the default key to a key of different length; however, this rarely makes
33324
sense, as each line will be reinterpreted, and the width of the map changes.
33325
Still, the width has to fit to the new keylength, otherwise an error is
33328
<p>If you want to change the keylength without reinterpreting each line, you
33329
should instead fuse or defuse the map (see <a href="#Map-Fusing">Map Fusing</a>,
33330
<a href="#lib_002emap_002edefuse">lib.map.defuse</a>). <a href="#newMap">newMap</a> allows this quite easily:
33331
</p><table><tr><td> </td><td><pre class="example">extendedmap = mymap * wo:newMap(" ")
33332
restrictedmap = (mymap:defuse())[1] * (mymap:defuse())[3]
33333
</pre></td></tr></table>
33339
<a name="Map-Width-and-Height"></a>
33340
<table cellpadding="1" cellspacing="1" border="0">
33341
<tr><td valign="middle" align="left">[<a href="#Map-Default-Keys" title="Previous section in reading order"> < </a>]</td>
33342
<td valign="middle" align="left">[<a href="#lib_002emap_002ecovers" title="Next section in reading order"> > </a>]</td>
33343
<td valign="middle" align="left"> </td>
33344
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
33345
<td valign="middle" align="left">[<a href="#libmap" title="Up section"> Up </a>]</td>
33346
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
33347
<td valign="middle" align="left"> </td>
33348
<td valign="middle" align="left"> </td>
33349
<td valign="middle" align="left"> </td>
33350
<td valign="middle" align="left"> </td>
33351
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
33352
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
33353
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
33354
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
33356
<a name="Map-Width-and-Height-1"></a>
33357
<h3 class="subsection">12.4.14 Map Width and Height</h3>
33359
<p>A libmap-map always includes its width and height. These determine for example
33360
the exact position of the second map during a concatenation (see
33361
<a href="#Connecting-Two-Maps">Connecting Two Maps</a>).
33363
<dl compact="compact">
33364
<dt> <b>Syntax:</b></dt>
33365
<dd><p><i>width</i> = <i>mymap</i><b>.width</b>
33367
<p><i>width</i> = <i>mymap</i><b>["width"]</b>
33369
<p><i>height</i> = <i>mymap</i><b>.height</b>
33371
<p><i>height</i> = <i>mymap</i><b>["height"]</b>
33373
<dl compact="compact">
33374
<dt> <i>width</i>, <i>height</i></dt>
33375
<dd><p>Positive integers.
33378
<dt> <i>mymap</i></dt>
33379
<dd><p>A libmap-map.
33384
<dt> <b>Details:</b></dt>
33385
<dd><p>See also <a href="#Other-Map-Tasks">Other Map Tasks</a>.
33387
<p>It is not possible (and rarely necessary) to directly change width and height
33388
of a map. Instead, you might use <a href="#lib_002emap_002eextend">lib.map.extend</a> to extend a map to a
33389
given position, <a href="#lib_002emap_002esub">lib.map.sub</a> to retrieve a rectangular part of a map, or
33390
<a href="#lib_002emap_002etrim">lib.map.trim</a> to remove unused lines and columns from the map.
33392
<p>Note that width and height are not invariant. They change with many operations,
33393
like transformations, concatenations or setting a key outside the former scope
33396
<p>Also note that the upper-left corner of a map has coordinates <code>{0, 0}</code>,
33397
so the lower-right corner is <code>{width - 1, height - 1}</code>.
33403
<a name="lib_002emap_002ecovers"></a>
33404
<table cellpadding="1" cellspacing="1" border="0">
33405
<tr><td valign="middle" align="left">[<a href="#Map-Width-and-Height" title="Previous section in reading order"> < </a>]</td>
33406
<td valign="middle" align="left">[<a href="#lib_002emap_002edefuse" title="Next section in reading order"> > </a>]</td>
33407
<td valign="middle" align="left"> </td>
33408
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
33409
<td valign="middle" align="left">[<a href="#libmap" title="Up section"> Up </a>]</td>
33410
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
33411
<td valign="middle" align="left"> </td>
33412
<td valign="middle" align="left"> </td>
33413
<td valign="middle" align="left"> </td>
33414
<td valign="middle" align="left"> </td>
33415
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
33416
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
33417
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
33418
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
33420
<a name="lib_002emap_002ecovers-1"></a>
33421
<h3 class="subsection">12.4.15 lib.map.covers</h3>
33422
<a name="index-lib_002emap_002ecovers"></a>
33424
<p><code>covers</code> checks whether a position is within the scope of a map.
33426
<dl compact="compact">
33427
<dt> <b>Syntax:</b></dt>
33428
<dd><p><i>result</i> = <i>mymap</i>:<b>covers</b>(<i>position</i>)
33430
<p><i>result</i> = <b>lib.map.covers</b>(<i>mymap</i>, <i>position</i>)
33432
<dl compact="compact">
33433
<dt> <i>result</i></dt>
33434
<dd><p>A boolean value: <code>true</code>, if <i>position</i> is within the rectangle of grids
33435
spanned by <code>(0,0)</code> and <code>(mymap.width - 1, mymap.height - 1)</code>,
33436
otherwise <code>false</code>.
33439
<dt> <i>mymap</i></dt>
33440
<dd><p>A libmap-map.
33443
<dt> <i>position</i></dt>
33444
<dd><p>A positional value (position or table with two entries).
33449
<dt> <b>Syntax Samples:</b></dt>
33450
<dd><table><tr><td> </td><td><pre class="example">if map1:covers(po(no["mycoin"]) - po(no["anchor1"])) then
33451
wo(no["mycoin"]) = ti["-"]
33453
</pre></td></tr></table>
33456
<dt> <b>Details:</b></dt>
33457
<dd><p>Floating-point positions are handled as expected, i.e. the position of a marble
33458
which is on a grid corresponding to the map lets <code>cover</code> return
33461
<p>Remember to subtract the anchor of an already drawn map to get the correct
33462
information when you use positions of the level world.
33468
<a name="lib_002emap_002edefuse"></a>
33469
<table cellpadding="1" cellspacing="1" border="0">
33470
<tr><td valign="middle" align="left">[<a href="#lib_002emap_002ecovers" title="Previous section in reading order"> < </a>]</td>
33471
<td valign="middle" align="left">[<a href="#lib_002emap_002eextend" title="Next section in reading order"> > </a>]</td>
33472
<td valign="middle" align="left"> </td>
33473
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
33474
<td valign="middle" align="left">[<a href="#libmap" title="Up section"> Up </a>]</td>
33475
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
33476
<td valign="middle" align="left"> </td>
33477
<td valign="middle" align="left"> </td>
33478
<td valign="middle" align="left"> </td>
33479
<td valign="middle" align="left"> </td>
33480
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
33481
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
33482
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
33483
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
33485
<a name="lib_002emap_002edefuse-1"></a>
33486
<h3 class="subsection">12.4.16 lib.map.defuse</h3>
33487
<a name="index-lib_002emap_002edefuse"></a>
33489
<p><code>defuse</code> returns a table of maps of keylength one, which correspond to the
33490
first, second, n-th character of each key at each position, respectively.
33492
<dl compact="compact">
33493
<dt> <b>Syntax:</b></dt>
33494
<dd><p><i>result</i> = <i>mymap</i>:<b>defuse</b>()
33496
<p><i>result</i> = <b>lib.map.defuse</b>(<i>mymap</i>)
33498
<dl compact="compact">
33499
<dt> <i>result</i></dt>
33500
<dd><p>A non-empty table with maps as entries at integer positions. There are as many
33501
maps as the keylength of <code>mymap</code>.
33504
<dt> <i>mymap</i></dt>
33505
<dd><p>A libmap-map.
33510
<dt> <b>Full Example:</b></dt>
33511
<dd><p>Given the following map,
33512
</p><table><tr><td> </td><td><pre class="example">mymap = wo:newMap(" .", {"#C# # # # # #C",
33513
"# w1.1# .2.2# ",
33514
"# .1.1D3.2.2# ",
33515
"# .1.1# .2w2# ",
33516
"#C# # # # # #C"})
33517
</pre></td></tr></table>
33518
<p><code>mymap:defuse()</code> will return a table
33519
</p><table><tr><td> </td><td><pre class="example">result = {map1, map2}
33520
</pre></td></tr></table>
33521
<p>containing the following two maps:
33522
</p><table><tr><td> </td><td><pre class="example">map1 = wo:newMap(".", {"#######",
33523
"#w.#..#",
33524
"#..D..#",
33525
"#..#.w#",
33526
"#######"})
33527
map2 = wo:newMap(".", {"C C",
33528
" 11 22 ",
33529
" 11322 ",
33530
" 11 22 ",
33532
</pre></td></tr></table>
33535
<dt> <b>Details:</b></dt>
33536
<dd><p>The default keys of the defused maps are the single characters of the default
33537
key, in corresponding sequence.
33539
<p>The inverse of defusing is <a href="#Map-Fusing">Map Fusing</a>.
33545
<a name="lib_002emap_002eextend"></a>
33546
<table cellpadding="1" cellspacing="1" border="0">
33547
<tr><td valign="middle" align="left">[<a href="#lib_002emap_002edefuse" title="Previous section in reading order"> < </a>]</td>
33548
<td valign="middle" align="left">[<a href="#lib_002emap_002ematch" title="Next section in reading order"> > </a>]</td>
33549
<td valign="middle" align="left"> </td>
33550
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
33551
<td valign="middle" align="left">[<a href="#libmap" title="Up section"> Up </a>]</td>
33552
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
33553
<td valign="middle" align="left"> </td>
33554
<td valign="middle" align="left"> </td>
33555
<td valign="middle" align="left"> </td>
33556
<td valign="middle" align="left"> </td>
33557
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
33558
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
33559
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
33560
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
33562
<a name="lib_002emap_002eextend-1"></a>
33563
<h3 class="subsection">12.4.17 lib.map.extend</h3>
33564
<a name="index-lib_002emap_002eextend"></a>
33566
<p><code>extend</code> changes a map in-place such that it covers a given position. If
33567
the position already is within the scope of the map, nothing happens.
33569
<dl compact="compact">
33570
<dt> <b>Syntax:</b></dt>
33571
<dd><p><i>mymap</i>:<b>extend</b>(<i>position</i>)
33573
<p><b>lib.map.extend</b>(<i>mymap</i>, <i>position</i>)
33575
<dl compact="compact">
33576
<dt> <i>mymap</i></dt>
33577
<dd><p>A libmap-map.
33580
<dt> <i>position</i></dt>
33581
<dd><p>A positional value (position, table with two entries, valid object, or string).
33586
<dt> <b>Syntax Samples:</b></dt>
33587
<dd><table><tr><td> </td><td><pre class="example">mymap:extend(po(no["mycoin1"]) - po(no["anchor1"]))
33588
mymap:extend("secondanchor")
33589
</pre></td></tr></table>
33592
<dt> <b>Details:</b></dt>
33593
<dd><p>Negative coordinates are silently ignored. However, if the other coordinate
33594
makes sense, the map might still get extended.
33596
<p>Floating-point coordinates are rounded to a grid position
33597
(see <a href="#Position-Grid-Rounding">Position Grid Rounding</a>).
33603
<a name="lib_002emap_002ematch"></a>
33604
<table cellpadding="1" cellspacing="1" border="0">
33605
<tr><td valign="middle" align="left">[<a href="#lib_002emap_002eextend" title="Previous section in reading order"> < </a>]</td>
33606
<td valign="middle" align="left">[<a href="#lib_002emap_002epaste" title="Next section in reading order"> > </a>]</td>
33607
<td valign="middle" align="left"> </td>
33608
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
33609
<td valign="middle" align="left">[<a href="#libmap" title="Up section"> Up </a>]</td>
33610
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
33611
<td valign="middle" align="left"> </td>
33612
<td valign="middle" align="left"> </td>
33613
<td valign="middle" align="left"> </td>
33614
<td valign="middle" align="left"> </td>
33615
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
33616
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
33617
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
33618
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
33620
<a name="lib_002emap_002ematch-1"></a>
33621
<h3 class="subsection">12.4.18 lib.map.match</h3>
33622
<a name="index-lib_002emap_002ematch"></a>
33624
<p>You may use <code>match</code> to search for patterns or keys within a map.
33625
<code>match</code> then returns a position list of grid positions.
33627
<dl compact="compact">
33628
<dt> <b>Syntax:</b></dt>
33629
<dd><p><i>result</i> = <i>mymap</i>:<b>match</b>()
33631
<p><i>result</i> = <i>mymap</i>:<b>match</b>(<i>tilekey</i>)
33633
<p><i>result</i> = <i>mymap</i>:<b>match</b>(<i>conditionlist</i>)
33635
<p><i>result</i> = <i>mymap</i>:<b>match</b>({conditionlist})
33637
<p><i>result</i> = <b>lib.map.match</b>(<i>mymap</i>, <i>conditionlist</i>)
33639
<dl compact="compact">
33640
<dt> <i>result</i></dt>
33641
<dd><p>The position list of all matched positions.
33644
<dt> <i>mymap</i></dt>
33645
<dd><p>A libmap-map.
33648
<dt> <i>conditionlist</i> = condition, condition, ...</dt>
33649
<dd><p>A list of conditions. A position is matched if and only if all conditions of the
33650
<i>conditionlist</i> are matched.
33653
<dt> <i>condition</i> = {<i>positionlist</i>, <i>tilekey</i>, <i>tilekey</i>, ...}</dt>
33654
<dd><p>A position <code>pos</code> is matched by this condition if and only if for each position
33655
<code>relativepos</code> in <code>positionlist</code> the tilekey
33656
<code>mymap[pos + relativepos]</code> equals one of the tilekeys in the list. If
33657
<code>pos + relativepos</code> is outside the scope of <i>mymap</i>, its tilekey is the
33661
<dt> <i>tilekey</i></dt>
33662
<dd><p>Non-empty string of the same length as the default key of <code>mymap</code>
33666
<dt> <i>positionlist</i></dt>
33667
<dd><p>A single relative position or a position list of relative positions.
33672
<dt> <b>Full Example:</b></dt>
33673
<dd><p>Given the following map,
33674
</p><table><tr><td> </td><td><pre class="example">mymap = wo:newMap(" ", {"#####",
33678
"#####"})
33679
</pre></td></tr></table>
33680
<p><code>mymap:match("#")</code> will return a position list of all walls <code>"#"</code>, it
33681
is identical to <code>mymap:match({po(0, 0), "#"})</code> and
33682
<code>mymap:match({{po(0, 0), "#"}})</code>.
33684
<p>We may search for all positions <code>pos</code> which are between two walls with:
33685
</p><table><tr><td> </td><td><pre class="example">result = mymap:match({po(-1, 0), "#"}, {po(1, 0), "#"})
33686
</pre></td></tr></table>
33687
<p>The two positions <code>po(-1, 0)</code> and <code>po(1, 0)</code> are relative to the
33688
returned position. This returns a position list including positions like the
33689
wall at <code>{1,0}</code> (which indeed is between two walls at <code>po(1, 0) +
33690
po(-1, 0)</code> and <code>po(1, 0) + po(1, 0)</code>), but also <code>{1,1}</code>. If we want
33691
to exclude walls at our position, we have to give all other keys instead:
33692
</p><table><tr><td> </td><td><pre class="example">result = mymap:match({po(-1, 0), "#"}, {po(1, 0), "#"}, {po(0, 0), "w", " ", "D"})
33693
</pre></td></tr></table>
33695
<p>Finally, <code>mymap:match()</code> will return all positions of the map, i.e. a
33696
position list with all positions between <code>{0,0}</code> and
33697
<code>{mymap.width - 1, mymap.height - 1}</code>.
33699
<p>See also <a href="#Requesting-and-Changing-Single-Map-Entries">Requesting and Changing Single Map Entries</a>.
33702
<dt> <b>Details:</b></dt>
33703
<dd><p>You can, but need not pack the condition list <code>match</code> into a single table.
33704
This possibility exists to easily work with automatically generated condition
33705
lists, but should be avoided in other cases due to readability.
33707
<p>The result of <code>match</code> is sorted primarily vertical, and secondarily
33708
horizontal, i.e. a typical result would be:
33709
</p><table><tr><td> </td><td><pre class="example">po(1, 1) .. po(1, 3) .. po(1, 4) .. po(2, 2) .. po(2, 3) .. po(5, 1)
33710
</pre></td></tr></table>
33712
<p>If you feed the position list back into a replacing command, like in
33713
</p><table><tr><td> </td><td><pre class="example">mymap = wo:newMap(" ", {"####",
33716
mymap[mymap:match({NEIGHBORS_8, "#"})] = "#"
33717
</pre></td></tr></table>
33718
<p>remember that the newly added changes could not be respected by the
33719
<code>match</code>; so in the above example, the match returns an empty position list
33720
and no tilekey is subsequently replaced.
33722
<p>Floating-point coordinates are rounded to a grid position
33723
(see <a href="#Position-Grid-Rounding">Position Grid Rounding</a>).
33729
<a name="lib_002emap_002epaste"></a>
33730
<table cellpadding="1" cellspacing="1" border="0">
33731
<tr><td valign="middle" align="left">[<a href="#lib_002emap_002ematch" title="Previous section in reading order"> < </a>]</td>
33732
<td valign="middle" align="left">[<a href="#lib_002emap_002eprint" title="Next section in reading order"> > </a>]</td>
33733
<td valign="middle" align="left"> </td>
33734
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
33735
<td valign="middle" align="left">[<a href="#libmap" title="Up section"> Up </a>]</td>
33736
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
33737
<td valign="middle" align="left"> </td>
33738
<td valign="middle" align="left"> </td>
33739
<td valign="middle" align="left"> </td>
33740
<td valign="middle" align="left"> </td>
33741
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
33742
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
33743
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
33744
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
33746
<a name="lib_002emap_002epaste-1"></a>
33747
<h3 class="subsection">12.4.19 lib.map.paste</h3>
33748
<a name="index-lib_002emap_002epaste"></a>
33750
<p><code>paste</code> copies a map into another map at a given position. This command
33751
works in-place, i.e. the receiving map is changed, instead of returning a new map.
33753
<dl compact="compact">
33754
<dt> <b>Syntax:</b></dt>
33755
<dd><p><i>map1</i>:<b>paste</b>(<i>map2</i>, <i>position</i>)
33757
<p><b>lib.map.paste</b>(<i>map1</i>, <i>map2</i>, <i>position</i>)
33759
<dl compact="compact">
33760
<dt> <i>map1</i></dt>
33761
<dd><p>The libmap-map to receive the copy.
33764
<dt> <i>map2</i></dt>
33765
<dd><p>The libmap-map which is to be copied into <code>map1</code>.
33768
<dt> <i>position</i></dt>
33769
<dd><p>A positional value (position, table with two entries, valid object, position
33770
list, group, or string). The upper-left position <code>{0, 0}</code> of <code>map2</code>
33771
is inserted at this position (or these positions) into <code>map1</code>.
33776
<dt> <b>Full Example:</b></dt>
33777
<dd><table><tr><td> </td><td><pre class="example">map1 = wo:newMap(" ", {"#######",
33778
"#w # #",
33780
"# # w#",
33781
"#######"})
33782
map2 = wo:newMap(".", {"F.E",
33784
</pre></td></tr></table>
33785
<p>In this situation, <code>map1:paste(map2, po(1, 1) .. po(5, 3))</code> will change
33787
</p><table><tr><td> </td><td><pre class="example">{"####### ",
33788
"#F E # ",
33789
"#E E # ",
33790
"# # F#E",
33791
"#####E#E"}
33792
</pre></td></tr></table>
33795
<dt> <b>Details:</b></dt>
33796
<dd><p>The receiving map will be extended with its default key as necessary.
33798
<p>Each tilekey of the copied map which equals its default key will be ignored
33799
during the pasting process.
33801
<p>Floating-point coordinates are rounded to a grid position
33802
(see <a href="#Position-Grid-Rounding">Position Grid Rounding</a>).
33804
<p>If a part of a map is to be copied to a position with negative coordinates, an
33805
error is thrown. However, if this part is to be ignored anyway (because it is
33806
the default key), then the negative coordinate is silently ignored.
33807
If for example we have
33808
</p><table><tr><td> </td><td><pre class="example">map1 = wo:newMap(" ", {"#######",
33809
"#w # #",
33811
"# # w#",
33812
"#######"})
33813
map2 = wo:newMap(".", {".FE",
33815
</pre></td></tr></table>
33816
<p>then <code>map1:paste(map2, po(-1, 0))</code> will change
33818
</p><table><tr><td> </td><td><pre class="example">{"FE#####",
33819
"EE # #",
33822
"#######"}
33823
</pre></td></tr></table>
33824
<p>while <code>map1:paste(map2, po(0, -1))</code> throws an error.
33826
<p>A map can be pasted multiple times into another map by providing a position
33827
list or object group. The sequence of pastings is then given by the sequence of
33828
the list or group, so the pasting at the second entry might overwrite the
33829
changes done by the first entry.
33835
<a name="lib_002emap_002eprint"></a>
33836
<table cellpadding="1" cellspacing="1" border="0">
33837
<tr><td valign="middle" align="left">[<a href="#lib_002emap_002epaste" title="Previous section in reading order"> < </a>]</td>
33838
<td valign="middle" align="left">[<a href="#lib_002emap_002ereplace" title="Next section in reading order"> > </a>]</td>
33839
<td valign="middle" align="left"> </td>
33840
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
33841
<td valign="middle" align="left">[<a href="#libmap" title="Up section"> Up </a>]</td>
33842
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
33843
<td valign="middle" align="left"> </td>
33844
<td valign="middle" align="left"> </td>
33845
<td valign="middle" align="left"> </td>
33846
<td valign="middle" align="left"> </td>
33847
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
33848
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
33849
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
33850
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
33852
<a name="lib_002emap_002eprint-1"></a>
33853
<h3 class="subsection">12.4.20 lib.map.print</h3>
33854
<a name="index-lib_002emap_002eprint"></a>
33856
<p><code>print</code> prints a map to standard output. You may use this command for
33857
debugging purposes, or to support development or translation of a level, but it
33858
should not be used in the released form of a level.
33860
<dl compact="compact">
33861
<dt> <b>Syntax:</b></dt>
33862
<dd><p><i>mymap</i>:<b>print</b>([<i>withXYCounts</i> [, <i>left_separator</i> [, <i>right_separator</i>]]])
33864
<p><b>lib.map.print</b>(<i>mymap</i> [, <i>withXYCounts</i> [, <i>left_separator</i> [, <i>right_separator</i>]]])
33866
<dl compact="compact">
33867
<dt> <i>mymap</i></dt>
33868
<dd><p>A libmap-map.
33871
<dt> <i>withXYCounts</i></dt>
33872
<dd><p>A boolean value, <code>false</code> by default.
33875
<dt> <i>left_separator</i>, <i>right_separator</i></dt>
33876
<dd><p>Strings to be printed on the left and on the right side of the map, empty
33877
strings by default.
33882
<dt> <b>Full Example:</b></dt>
33883
<dd><table><tr><td> </td><td><pre class="example">mymap = wo:newMap(" ", {"#######",
33884
"#w # #",
33886
"# # w#",
33887
"#######"})
33888
</pre></td></tr></table>
33889
<p>Then <code>mymap:print(true, " -> ", "|")</code> prints the following to standard output:
33890
</p><table><tr><td> </td><td><pre class="example"> -> 0123456|
33896
</pre></td></tr></table>
33899
<dt> <b>Details:</b></dt>
33900
<dd><p>If you use maps wider than ten times its keylength, the x-count will show
33901
only the last digits of the x coordinate.
33903
<p>If you want to insert lines between the columns, you can fuse the map
33904
with your desired character, like in <code>(mymap * "|"):print(...)</code>.
33906
<p>You can actually use <code>print</code> to generate a map for a level file if you
33907
provide appropriate separators:
33908
</p><table><tr><td> </td><td><pre class="example">mymap:print(false, " \"", "\",")
33909
</pre></td></tr></table>
33915
<a name="lib_002emap_002ereplace"></a>
33916
<table cellpadding="1" cellspacing="1" border="0">
33917
<tr><td valign="middle" align="left">[<a href="#lib_002emap_002eprint" title="Previous section in reading order"> < </a>]</td>
33918
<td valign="middle" align="left">[<a href="#lib_002emap_002ereplace_005foutside" title="Next section in reading order"> > </a>]</td>
33919
<td valign="middle" align="left"> </td>
33920
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
33921
<td valign="middle" align="left">[<a href="#libmap" title="Up section"> Up </a>]</td>
33922
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
33923
<td valign="middle" align="left"> </td>
33924
<td valign="middle" align="left"> </td>
33925
<td valign="middle" align="left"> </td>
33926
<td valign="middle" align="left"> </td>
33927
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
33928
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
33929
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
33930
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
33932
<a name="lib_002emap_002ereplace-1"></a>
33933
<h3 class="subsection">12.4.21 lib.map.replace</h3>
33934
<a name="index-lib_002emap_002ereplace"></a>
33936
<p><code>replace</code> replaces all occurrences of a single tile key in a map in-place
33937
with another tile key.
33939
<dl compact="compact">
33940
<dt> <b>Syntax:</b></dt>
33941
<dd><p><i>mymap</i>:<b>replace</b>(<i>oldkey</i> [, <i>newkey</i>])
33943
<p><b>lib.map.replace</b>(<i>mymap</i>, <i>oldkey</i> [, <i>newkey</i>])
33945
<dl compact="compact">
33946
<dt> <i>mymap</i></dt>
33947
<dd><p>A libmap-map.
33950
<dt> <i>oldkey</i></dt>
33951
<dd><p>A non-empty string of the same length as <code>mymap</code>’s default key.
33954
<dt> <i>newkey</i></dt>
33955
<dd><p>A non-empty string of the same length as <code>mymap</code>’s default key, which is the
33956
replacement for <code>oldkey</code>. The default replacement key is the default key itself.
33961
<dt> <b>Syntax Samples:</b></dt>
33962
<dd><table><tr><td> </td><td><pre class="example">mymap:replace("#", "-")
33963
</pre></td></tr></table>
33964
<p>will change <code>mymap</code> in such a way that each <code>"#"</code> is replaced by
33965
<code>"-"</code>. If <code>"-"</code> is omitted, each <code>"#"</code> is replaced by the
33966
default key instead.
33969
<dt> <b>Details:</b></dt>
33970
<dd><p>‘<samp>mymap:replace(tile1, tile2)</samp>’ is equivalent to
33971
</p><table><tr><td> </td><td><pre class="example">mymap[mymap:match(tile1)] = tile2 or mymap.defaultkey
33972
</pre></td></tr></table>
33973
<p>but faster, because no position list is constructed in between (see
33974
<a href="#lib_002emap_002ematch">lib.map.match</a>).
33976
<p>See also <a href="#lib_002emap_002ereplace_005foutside">lib.map.replace_outside</a> and
33977
<a href="#Requesting-and-Changing-Single-Map-Entries">Requesting and Changing Single Map Entries</a>.
33983
<a name="lib_002emap_002ereplace_005foutside"></a>
33984
<table cellpadding="1" cellspacing="1" border="0">
33985
<tr><td valign="middle" align="left">[<a href="#lib_002emap_002ereplace" title="Previous section in reading order"> < </a>]</td>
33986
<td valign="middle" align="left">[<a href="#lib_002emap_002esub" title="Next section in reading order"> > </a>]</td>
33987
<td valign="middle" align="left"> </td>
33988
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
33989
<td valign="middle" align="left">[<a href="#libmap" title="Up section"> Up </a>]</td>
33990
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
33991
<td valign="middle" align="left"> </td>
33992
<td valign="middle" align="left"> </td>
33993
<td valign="middle" align="left"> </td>
33994
<td valign="middle" align="left"> </td>
33995
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
33996
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
33997
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
33998
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
34000
<a name="lib_002emap_002ereplace_005foutside-1"></a>
34001
<h3 class="subsection">12.4.22 lib.map.replace_outside</h3>
34002
<a name="index-lib_002emap_002ereplace_005foutside"></a>
34004
<p><code>replace_outside</code> is a very specialized command, which is used to replace
34005
all occurrences of a tile key which are connected to the border of the map by a
34006
path of this tile key with another tile key. The replacement is done in-place,
34007
i.e. no new map is created or returned.
34009
<dl compact="compact">
34010
<dt> <b>Syntax:</b></dt>
34011
<dd><p><i>mymap</i>:<b>replace_outside</b>(<i>oldkey</i> [, <i>newkey</i>])
34013
<p><b>lib.map.replace_outside</b>(<i>mymap</i>, <i>oldkey</i> [, <i>newkey</i>])
34015
<dl compact="compact">
34016
<dt> <i>mymap</i></dt>
34017
<dd><p>A libmap-map.
34020
<dt> <i>oldkey</i></dt>
34021
<dd><p>A non-empty string of the same length as <code>mymap</code>’s default key.
34024
<dt> <i>newkey</i></dt>
34025
<dd><p>A non-empty string of the same length as <code>mymap</code>’s default key, which is the
34026
replacement for <code>oldkey</code>. The default replacement key is the default key itself.
34031
<dt> <b>Syntax Samples:</b></dt>
34032
<dd><p>See <a href="#Other-Map-Tasks">Other Map Tasks</a>.
34035
<dt> <b>Details:</b></dt>
34036
<dd><p><code>replace_outside</code> shows similarities with <a href="#lib_002emap_002ereplace">lib.map.replace</a> and
34037
<a href="#lib_002emap_002etrim">lib.map.trim</a>. It is the only universal way to handle the area near
34038
the border of a map, and can be combined with <a href="#lib_002emap_002ematch">lib.map.match</a> and
34039
<a href="#lib_002emap_002etrim">lib.map.trim</a> to show its full potential.
34041
<p>Because of its recursive nature, old and new tile key must be different; in
34042
contrast to the situation of <a href="#lib_002emap_002ereplace">lib.map.replace</a> identical tile keys are not
34043
silently ignored, but throw an error message.
34049
<a name="lib_002emap_002esub"></a>
34050
<table cellpadding="1" cellspacing="1" border="0">
34051
<tr><td valign="middle" align="left">[<a href="#lib_002emap_002ereplace_005foutside" title="Previous section in reading order"> < </a>]</td>
34052
<td valign="middle" align="left">[<a href="#lib_002emap_002etrim" title="Next section in reading order"> > </a>]</td>
34053
<td valign="middle" align="left"> </td>
34054
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
34055
<td valign="middle" align="left">[<a href="#libmap" title="Up section"> Up </a>]</td>
34056
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
34057
<td valign="middle" align="left"> </td>
34058
<td valign="middle" align="left"> </td>
34059
<td valign="middle" align="left"> </td>
34060
<td valign="middle" align="left"> </td>
34061
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
34062
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
34063
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
34064
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
34066
<a name="lib_002emap_002esub-1"></a>
34067
<h3 class="subsection">12.4.23 lib.map.sub</h3>
34068
<a name="index-lib_002emap_002esub"></a>
34070
<p><code>sub</code> returns a copy of a rectangular section of a map as a new map.
34072
<dl compact="compact">
34073
<dt> <b>Syntax:</b></dt>
34074
<dd><p><i>submap</i> = <i>mymap</i>:<b>sub</b>(<i>upperleft</i>, <i>lowerright</i>)
34076
<p><i>submap</i> = <i>mymap</i>:<b>sub</b>(<i>upperleft</i>, <i>width</i>, <i>height</i>)
34078
<p><i>submap</i> = <b>lib.map.sub</b>(<i>mymap</i>, <i>upperleft</i>, <i>lowerright</i>)
34080
<p><i>submap</i> = <b>lib.map.sub</b>(<i>mymap</i>, <i>upperleft</i>, <i>width</i>, <i>height</i>)
34082
<dl compact="compact">
34083
<dt> <i>submap</i></dt>
34084
<dd><p>A libmap-map, the rectangular section of <code>mymap</code>.
34087
<dt> <i>mymap</i></dt>
34088
<dd><p>A libmap-map.
34091
<dt> <i>upperleft</i>, <i>lowerright</i></dt>
34092
<dd><p>Positional values (position, valid object, table with two entries, or name of a
34096
<dt> <i>width</i>, <i>height</i></dt>
34097
<dd><p>Positive integers.
34102
<dt> <b>Syntax Samples:</b></dt>
34103
<dd><p>See <a href="#Other-Map-Tasks">Other Map Tasks</a>.
34106
<dt> <b>Details:</b></dt>
34107
<dd><p>If the bottom right-hand corner overlaps the area of <code>mymap</code>, the resulting
34108
<code>submap</code> will still be just the rectangular section of <code>mymap</code>, i.e.
34109
width and height can be less than the arguments specified. Use
34110
<code>submap:extend(width, height)</code> to ensure the full width and height.
34112
<p>Floating point positions are rounded to grid positions, and the lower-right
34113
corner may not have coordinates less than those of the upper-left corner,
34114
otherwise an error is thrown.
34116
<p>The default key of the submap is the default key of the original map.
34118
<p>The upper-left corner of the submap of course is <code>{0,0}</code>, i.e. the
34119
coordinates are shifted accordingly.
34125
<a name="lib_002emap_002etrim"></a>
34126
<table cellpadding="1" cellspacing="1" border="0">
34127
<tr><td valign="middle" align="left">[<a href="#lib_002emap_002esub" title="Previous section in reading order"> < </a>]</td>
34128
<td valign="middle" align="left">[<a href="#Map-Transformation-Index-and-MAP_005fALL" title="Next section in reading order"> > </a>]</td>
34129
<td valign="middle" align="left"> </td>
34130
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
34131
<td valign="middle" align="left">[<a href="#libmap" title="Up section"> Up </a>]</td>
34132
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
34133
<td valign="middle" align="left"> </td>
34134
<td valign="middle" align="left"> </td>
34135
<td valign="middle" align="left"> </td>
34136
<td valign="middle" align="left"> </td>
34137
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
34138
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
34139
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
34140
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
34142
<a name="lib_002emap_002etrim-1"></a>
34143
<h3 class="subsection">12.4.24 lib.map.trim</h3>
34144
<a name="index-lib_002emap_002etrim"></a>
34146
<p><code>trim</code> returns the smallest rectangular section of a map as new map such
34147
that its border consists of a given tile key only, i.e. it trims the original
34148
map from the North, East, South, and West.
34150
<dl compact="compact">
34151
<dt> <b>Syntax:</b></dt>
34152
<dd><p><i>trimmedmap</i> = <i>mymap</i>:<b>trim</b>([<i>tilekey</i>])
34154
<p><i>trimmedmap</i> = <b>lib.map.trim</b>(<i>mymap</i> [, <i>tilekey</i>])
34156
<dl compact="compact">
34157
<dt> <i>trimmedmap</i></dt>
34158
<dd><p>A libmap-map, the trimmed copy of <code>mymap</code>.
34161
<dt> <i>mymap</i></dt>
34162
<dd><p>A libmap-map.
34165
<dt> <i>tilekey</i></dt>
34166
<dd><p>A non-empty string of the same length as the default key. If omitted, the
34167
default key is used instead.
34172
<dt> <b>Full Example:</b></dt>
34173
<dd><p>With the following map:
34174
</p><table><tr><td> </td><td><pre class="example">mymap = wo:newMap(" ", {"#######",
34175
"#w # #",
34177
"# # w#",
34178
"#######"})
34179
</pre></td></tr></table>
34180
<p>Trimming with ‘<samp>mymap:trim()</samp>’ will return just a copy of the original map,
34181
but ‘<samp>mymap:trim("#")</samp>’ returns a map as follows:
34182
</p><table><tr><td> </td><td><pre class="example">{"w # ",
34185
</pre></td></tr></table>
34188
<dt> <b>Details:</b></dt>
34189
<dd><p>The default key of the trimmed map is the default key of the original map.
34191
<p>If the original map consists of the trimmed key only, then <code>trim</code> returns
34192
a 1x1-map with the trimmed key as only entry, and the default key of the
34199
<a name="Map-Transformation-Index-and-MAP_005fALL"></a>
34200
<table cellpadding="1" cellspacing="1" border="0">
34201
<tr><td valign="middle" align="left">[<a href="#lib_002emap_002etrim" title="Previous section in reading order"> < </a>]</td>
34202
<td valign="middle" align="left">[<a href="#Map-Transformation-Composition-and-Powers" title="Next section in reading order"> > </a>]</td>
34203
<td valign="middle" align="left"> </td>
34204
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
34205
<td valign="middle" align="left">[<a href="#libmap" title="Up section"> Up </a>]</td>
34206
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
34207
<td valign="middle" align="left"> </td>
34208
<td valign="middle" align="left"> </td>
34209
<td valign="middle" align="left"> </td>
34210
<td valign="middle" align="left"> </td>
34211
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
34212
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
34213
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
34214
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
34216
<a name="Map-Transformation-Index-and-MAP_005fALL-1"></a>
34217
<h3 class="subsection">12.4.25 Map Transformation Index and MAP_ALL</h3>
34219
<p>All eight transformation constants (see <a href="#map-read-directions">map read directions</a>,
34220
<a href="#Rotating-and-Mirroring-Maps">Rotating and Mirroring Maps</a>, <a href="#Map-Transformation">Map Transformation</a>) are additionally
34221
packed into the table <code>MAP_ALL</code>, so a simple call to
34222
<code>ipairs(MAP_ALL)</code> can iterate over all of them. <code>MAP_ALL</code> is provided
34223
without need to load libmap.
34225
<p>Each transformation offers the field <code>"index"</code>, which returns the number at
34226
which the transformation appears in <code>MAP_ALL</code>. libmap is not needed to use
34227
<code>"index"</code> either.
34229
<dl compact="compact">
34230
<dt> <b>Syntax:</b></dt>
34231
<dd><p><b>MAP_ALL</b> = {<b>MAP_IDENT</b>, <b>MAP_ROT_CW</b>, <b>MAP_ROT_180</b>, <b>MAP_ROT_CCW</b>, <b>MAP_FLIP_BACKSLASH</b>,
34232
<b>MAP_FLIP_HORIZONTAL</b>, <b>MAP_FLIP_SLASH</b>, <b>MAP_FLIP_VERTICAL</b>}
34234
<p><b>transformation_index</b> = <i>maptransformation</i>.<b>index</b>
34236
<dl compact="compact">
34237
<dt> <i>transformation_index</i></dt>
34238
<dd><p>An integer between 1 and 8.
34241
<dt> <i>maptransformation</i></dt>
34242
<dd><p>A map transformation.
34247
<dt> <b>Syntax Samples:</b></dt>
34248
<dd><table><tr><td> </td><td><pre class="example">MAP_ALL[MAP_ROT_CW.index] == MAP_ROT_CW
34249
</pre></td></tr></table>
34252
<dt> <b>Details:</b></dt>
34253
<dd><p>You may not safe map transformations as attributes of objects, for example the
34254
following will throw an error:
34255
</p><table><tr><td> </td><td><pre class="example">no["stone_a"]["_mytrafo"] = MAP_ROT_CCW
34256
</pre></td></tr></table>
34257
<p>Instead, you have to use <code>index</code> and retrieve the correct transformation
34258
from <code>MAP_ALL</code>:
34259
</p><table><tr><td> </td><td><pre class="example">no["stone_a"]["_mytrafo"] = MAP_ROT_CCW.index
34261
oldtrafo = MAP_ALL[no["stone_a"]["_mytrafo"]]
34262
</pre></td></tr></table>
34268
<a name="Map-Transformation-Composition-and-Powers"></a>
34269
<table cellpadding="1" cellspacing="1" border="0">
34270
<tr><td valign="middle" align="left">[<a href="#Map-Transformation-Index-and-MAP_005fALL" title="Previous section in reading order"> < </a>]</td>
34271
<td valign="middle" align="left">[<a href="#Map-Transformation-Inverse" title="Next section in reading order"> > </a>]</td>
34272
<td valign="middle" align="left"> </td>
34273
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
34274
<td valign="middle" align="left">[<a href="#libmap" title="Up section"> Up </a>]</td>
34275
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
34276
<td valign="middle" align="left"> </td>
34277
<td valign="middle" align="left"> </td>
34278
<td valign="middle" align="left"> </td>
34279
<td valign="middle" align="left"> </td>
34280
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
34281
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
34282
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
34283
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
34285
<a name="Map-Transformation-Composition-and-Powers-1"></a>
34286
<h3 class="subsection">12.4.26 Map Transformation Composition and Powers</h3>
34287
<a name="index-lib_002emap_002etransformation_005fcompose"></a>
34288
<a name="index-lib_002emap_002etransformation_005fpower"></a>
34290
<p>The transformation constants (see <a href="#map-read-directions">map read directions</a>,
34291
<a href="#Rotating-and-Mirroring-Maps">Rotating and Mirroring Maps</a>, <a href="#Map-Transformation">Map Transformation</a>) can be composed
34292
according to their true operation on a map, as soon as libmap is loaded. The
34293
composition is returned by the operations ‘<samp>*</samp>’ and ‘<samp>^</samp>’.
34295
<dl compact="compact">
34296
<dt> <b>Syntax:</b></dt>
34297
<dd><p><i>composition</i> = <i>maptransformation1</i> <b>*</b> <i>maptransformation2</i>
34299
<p><i>composition</i> = <i>maptransformation1</i> <b>^</b> <i>maptransformation2</i>
34301
<p><i>composition</i> = <b>lib.map.transformation_compose</b>(<i>maptransformation1</i>, <i>maptransformation2</i>)
34303
<p><i>composition</i> = <b>lib.map.transformation_power</b>(<i>maptransformation1</i>, <i>maptransformation2</i>)
34305
<p><i>power</i> = <i>maptransformation</i> <b>^</b> <i>exponent</i>
34307
<p><i>power</i> = <b>lib.map.transformation_power</b>(<i>maptransformation</i>, <i>exponent</i>)
34309
<dl compact="compact">
34310
<dt> <i>composition</i></dt>
34311
<dd><p>The result of composing two map transformations.
34314
<dt> <i>maptransformation1</i>, <i>maptransformation2</i>, <i>maptransformation</i></dt>
34315
<dd><p>Map transformations.
34318
<dt> <i>power</i></dt>
34319
<dd><p>The <code>exponent</code>-th power of <code>maptransformation</code> (again a map
34323
<dt> <i>exponent</i></dt>
34329
<dt> <b>Syntax Samples:</b></dt>
34330
<dd><table><tr><td> </td><td><pre class="example">new_transformation = (MAP_ROT_CW * MAP_FLIP_HORIZONTAL) ^ 2
34331
another_transformation = (new_transformation ^ MAP_ROT_180) ^ (-1)
34332
</pre></td></tr></table>
34335
<dt> <b>Details:</b></dt>
34336
<dd><p>The eight possible map transformations are the elements of a mathematical
34337
group, the dihedral group of order 8. Composition of any two map
34338
transformations therefore yields another one of the eight map transformations.
34339
An <i>n</i>-th power of a map transformation is the composition of <i>n</i> such
34340
transformations. In the case of the dihedral group, any 4-th power returns the
34341
original element. This fact is applied during calculating a power, so it
34342
doesn’t make a difference to the performance when you use large numbers as
34345
<p>Composing with <code>MAP_IDENT</code> doesn’t change the value; it’s like adding zero
34346
to a number, or multiplying with one.
34348
<p>Keeping to group theoretic notions, the operation ‘<samp>^</samp>’ between map
34349
transformations should denote conjugation instead of composition. Instead of
34350
this, it is chosen to be synonymous to ‘<samp>*</samp>’ to allow for associativity of
34352
</p><table><tr><td> </td><td><pre class="example">new_map = old_map ^ MAP_ROT_CCW ^ MAP_FLIP_VERTICAL
34353
</pre></td></tr></table>
34354
<p>(Remember that Lua evaluates ‘<samp>^</samp>’ from the right.)
34356
<p>The inverse can be calculated with a power to <code>-1</code>, but also by ‘<samp>-</samp>’,
34357
see <a href="#Map-Transformation-Inverse">Map Transformation Inverse</a>.
34363
<a name="Map-Transformation-Inverse"></a>
34364
<table cellpadding="1" cellspacing="1" border="0">
34365
<tr><td valign="middle" align="left">[<a href="#Map-Transformation-Composition-and-Powers" title="Previous section in reading order"> < </a>]</td>
34366
<td valign="middle" align="left">[<a href="#Random-Map-Transformations" title="Next section in reading order"> > </a>]</td>
34367
<td valign="middle" align="left"> </td>
34368
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
34369
<td valign="middle" align="left">[<a href="#libmap" title="Up section"> Up </a>]</td>
34370
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
34371
<td valign="middle" align="left"> </td>
34372
<td valign="middle" align="left"> </td>
34373
<td valign="middle" align="left"> </td>
34374
<td valign="middle" align="left"> </td>
34375
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
34376
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
34377
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
34378
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
34380
<a name="Map-Transformation-Inverse-1"></a>
34381
<h3 class="subsection">12.4.27 Map Transformation Inverse</h3>
34383
<p>The transformation constants (see <a href="#map-read-directions">map read directions</a>,
34384
<a href="#Rotating-and-Mirroring-Maps">Rotating and Mirroring Maps</a>, <a href="#Map-Transformation">Map Transformation</a>) have proper
34385
inverses, i.e. map transformations that reverse their action. These inverse
34386
transformations are returned by ‘<samp>-</samp>’.
34388
<dl compact="compact">
34389
<dt> <b>Syntax:</b></dt>
34390
<dd><p><i>inverse</i> = <b>-</b><i>maptransformation</i>
34392
<p><i>inverse</i> = <b>lib.map.transformation_inverse</b>(<i>maptransformation</i>)
34394
<dl compact="compact">
34395
<dt> <i>inverse</i></dt>
34396
<dd><p>The inverse map transformation of <code>maptransformation</code>.
34399
<dt> <i>maptransformation</i></dt>
34400
<dd><p>A map transformation.
34405
<dt> <b>Syntax Samples:</b></dt>
34406
<dd><table><tr><td> </td><td><pre class="example">reverse_transformation = -MAP_ROT_CW
34407
</pre></td></tr></table>
34408
<p>In this case, <code>reverse_transformation</code> equals <code>MAP_ROT_CCW</code>, because
34409
their composition <code>MAP_ROT_CW * MAP_ROT_CCW</code> equals the trivial
34410
transformation (or identity) <code>MAP_IDENT</code>.
34413
<dt> <b>Details:</b></dt>
34414
<dd><p>The eight possible map transformations are the elements of a mathematical
34415
group, the dihedral group of order 8. The inverse of any map transformation
34416
therefore yields another one of the eight map transformations. Composition of
34417
any map transformation with its inverse results in <code>MAP_IDENT</code>. However,
34418
within the dihedral group of order 8, only two elements have inverses that are
34419
not their own inverses: the two rotations by 90 degrees.
34421
<p>Keeping to group theoretic notions, the inverse is denoted by ‘<samp>^ (-1)</samp>’,
34422
which works just as well(see <a href="#Map-Transformation-Composition-and-Powers">Map Transformation Composition and Powers</a>).
34428
<a name="Random-Map-Transformations"></a>
34429
<table cellpadding="1" cellspacing="1" border="0">
34430
<tr><td valign="middle" align="left">[<a href="#Map-Transformation-Inverse" title="Previous section in reading order"> < </a>]</td>
34431
<td valign="middle" align="left">[<a href="#libimport" title="Next section in reading order"> > </a>]</td>
34432
<td valign="middle" align="left"> </td>
34433
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
34434
<td valign="middle" align="left">[<a href="#libmap" title="Up section"> Up </a>]</td>
34435
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
34436
<td valign="middle" align="left"> </td>
34437
<td valign="middle" align="left"> </td>
34438
<td valign="middle" align="left"> </td>
34439
<td valign="middle" align="left"> </td>
34440
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
34441
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
34442
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
34443
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
34445
<a name="Random-Map-Transformations-1"></a>
34446
<h3 class="subsection">12.4.28 Random Map Transformations</h3>
34447
<a name="index-lib_002emap_002erandom_005ftransformation"></a>
34449
<p>libmap provides the function <code>lib.map.random_transformation()</code> to pick one
34450
of the eight transformations by random.
34452
<dl compact="compact">
34453
<dt> <b>Syntax:</b></dt>
34454
<dd><p><i>randomtransformation</i> = <b>lib.map.random_transformation</b>()
34456
<dl compact="compact">
34457
<dt> <i>randomtransformation</i></dt>
34458
<dd><p>A map transformation, randomly chosen from <code>MAP_ALL</code>.
34463
<dt> <b>Syntax Samples:</b></dt>
34464
<dd><table><tr><td> </td><td><pre class="example">wo:drawMap(ti, po(5, 4), mymap, lib.map.random_transformation())
34465
</pre></td></tr></table>
34468
<dt> <b>Details:</b></dt>
34469
<dd><p>When you use random map transformations, remember that four out of the eight map
34470
transformations switch height and width of the map they are applied to.
34476
<a name="libimport"></a>
34477
<table cellpadding="1" cellspacing="1" border="0">
34478
<tr><td valign="middle" align="left">[<a href="#Random-Map-Transformations" title="Previous section in reading order"> < </a>]</td>
34479
<td valign="middle" align="left">[<a href="#lib_002eimport_002eunpack_005fmultilevel" title="Next section in reading order"> > </a>]</td>
34480
<td valign="middle" align="left"> </td>
34481
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
34482
<td valign="middle" align="left">[<a href="#Libraries" title="Up section"> Up </a>]</td>
34483
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
34484
<td valign="middle" align="left"> </td>
34485
<td valign="middle" align="left"> </td>
34486
<td valign="middle" align="left"> </td>
34487
<td valign="middle" align="left"> </td>
34488
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
34489
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
34490
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
34491
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
34493
<a name="libimport-1"></a>
34494
<h2 class="section">12.5 libimport</h2>
34495
<a name="index-lib_002eimport"></a>
34497
<p>libimport is dedicated to parse level files of other games or formats and
34498
typically returns <a href="#libmap">libmap</a>-maps. In this context, the word "level" refers to
34499
a string, representing a level of the other game. A "monolevel" is a string
34500
which holds a single level, but also additional information, like titles or
34501
author names. A "multilevel" is a string composed of one or more monolevels.
34502
A "map" is a map in the libmap-sense, i.e. an Enigma level.
34504
<p>Apart from the following functions, lib.import includes the minor routines
34505
‘<samp>lib.import.string_replace</samp>’, which is a wrapper for <code>string.gsub</code>,
34506
and ‘<samp>lib.import.string_remove_multiples</samp>’, which removes multiple
34507
occurrences of a string in another string.
34509
<p>This library is described as of release 1.
34511
<p>You can load it by adding an ‘<samp>dependency</samp>’ element to the
34512
<a href="#g_t_003ccompatibility_003e"><compatibility></a> XML Metadata element as follows:
34514
<table><tr><td> </td><td><pre class="example"> <<i>el</i>:<b>dependency</b> <i>el</i>:<b>path</b>="<var>lib/libimport</var>" <i>el</i>:<b>id</b>="<var>lib/libimport</var>" <i>el</i>:<b>release</b>="<var>1</var>" <i>el</i>:<b>preload</b>="<var>true</var>"/>
34515
</pre></td></tr></table>
34517
<p>It preloads automatically the libraries <a href="#libmap">libmap</a> and <a href="#liblua">liblua</a>.
34520
<table class="menu" border="0" cellspacing="0">
34521
<tr><td align="left" valign="top"><a href="#lib_002eimport_002eunpack_005fmultilevel">12.5.1 lib.import.unpack_multilevel</a></td><td> </td><td align="left" valign="top"> Extract a level from a multilevel.
34523
<tr><td align="left" valign="top"><a href="#lib_002eimport_002euncompress_005frle">12.5.2 lib.import.uncompress_rle</a></td><td> </td><td align="left" valign="top"> Decode run-length encoding.
34525
<tr><td align="left" valign="top"><a href="#lib_002eimport_002elevel_005fto_005fmap">12.5.3 lib.import.level_to_map</a></td><td> </td><td align="left" valign="top"> Converts a level into a map.
34527
<tr><td align="left" valign="top"><a href="#lib_002eimport_002emap_005fsokoban">12.5.4 lib.import.map_sokoban</a></td><td> </td><td align="left" valign="top"> Converts a Sokoban level into a map.
34529
<tr><td align="left" valign="top"><a href="#lib_002eimport_002emap_005fwanderer">12.5.5 lib.import.map_wanderer</a></td><td> </td><td align="left" valign="top"> Converts a Wanderer level into a map.
34535
<a name="lib_002eimport_002eunpack_005fmultilevel"></a>
34536
<table cellpadding="1" cellspacing="1" border="0">
34537
<tr><td valign="middle" align="left">[<a href="#libimport" title="Previous section in reading order"> < </a>]</td>
34538
<td valign="middle" align="left">[<a href="#lib_002eimport_002euncompress_005frle" title="Next section in reading order"> > </a>]</td>
34539
<td valign="middle" align="left"> </td>
34540
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
34541
<td valign="middle" align="left">[<a href="#libimport" title="Up section"> Up </a>]</td>
34542
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
34543
<td valign="middle" align="left"> </td>
34544
<td valign="middle" align="left"> </td>
34545
<td valign="middle" align="left"> </td>
34546
<td valign="middle" align="left"> </td>
34547
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
34548
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
34549
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
34550
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
34552
<a name="lib_002eimport_002eunpack_005fmultilevel-1"></a>
34553
<h3 class="subsection">12.5.1 lib.import.unpack_multilevel</h3>
34554
<a name="index-lib_002eimport_002eunpack_005fmultilevel"></a>
34556
<p>‘<samp>unpack_multilevel</samp>’ extracts a level from a multilevel string. For this,
34557
it needs a regexp describing a single level line.
34559
<dl compact="compact">
34560
<dt> <b>Syntax:</b></dt>
34561
<dd><p><b>lib.import.unpack_multilevel</b>(<i>multilevel</i>, <i>sublevel_number</i>, <i>format</i>)
34563
<dl compact="compact">
34564
<dt> <i>multilevel</i></dt>
34565
<dd><p>A multilevel string.
34568
<dt> <i>sublevel_number</i></dt>
34569
<dd><p>The number of the level in <code>multilevel</code> to be extracted. First level is
34570
‘<samp>1</samp>’. If <code>nil</code>, ‘<samp>1</samp>’ is taken as default.
34573
<dt> <i>format</i></dt>
34574
<dd><p>A string referencing an entry in ‘<samp>lib.import.line_regexp</samp>’. Currently, only
34575
‘<samp>sokoban</samp>’ and ‘<samp>wanderer</samp>’ are supported. But you can add further
34576
entries to ‘<samp>lib.import.line_regexp</samp>’ if necessary.
34581
<dt> <b>Syntax Samples:</b></dt>
34582
<dd><table><tr><td> </td><td><pre class="example">level_four = lib.import.unpack_multilevel(large_string, 4, "sokoban")
34583
</pre></td></tr></table>
34586
<dt> <b>Details:</b></dt>
34587
<dd><p>A level extracted with <code>unpack_multilevel</code> has still to be converted into
34588
a format Enigma understands. A level is a string, and lines of the level are to
34589
be determined by line endings, which can be quite different. In contrast to
34590
this, an Enigma map is a table of strings, with each line in a separate entry
34591
of the table. Hence, at least the line endings have to be dealt with.
34597
<a name="lib_002eimport_002euncompress_005frle"></a>
34598
<table cellpadding="1" cellspacing="1" border="0">
34599
<tr><td valign="middle" align="left">[<a href="#lib_002eimport_002eunpack_005fmultilevel" title="Previous section in reading order"> < </a>]</td>
34600
<td valign="middle" align="left">[<a href="#lib_002eimport_002elevel_005fto_005fmap" title="Next section in reading order"> > </a>]</td>
34601
<td valign="middle" align="left"> </td>
34602
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
34603
<td valign="middle" align="left">[<a href="#libimport" title="Up section"> Up </a>]</td>
34604
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
34605
<td valign="middle" align="left"> </td>
34606
<td valign="middle" align="left"> </td>
34607
<td valign="middle" align="left"> </td>
34608
<td valign="middle" align="left"> </td>
34609
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
34610
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
34611
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
34612
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
34614
<a name="lib_002eimport_002euncompress_005frle-1"></a>
34615
<h3 class="subsection">12.5.2 lib.import.uncompress_rle</h3>
34616
<a name="index-lib_002eimport_002euncompress_005frle"></a>
34618
<p>‘<samp>uncompress_rle</samp>’ takes a string as argument and returns a decoded version
34619
without run-length encoding.
34621
<dl compact="compact">
34622
<dt> <b>Syntax:</b></dt>
34623
<dd><p><b>lib.import.uncompress_rle</b>(<i>level</i>, <i>attribs</i>)
34625
<dl compact="compact">
34626
<dt> <i>level</i></dt>
34627
<dd><p>A level string.
34630
<dt> <i>attribs</i></dt>
34631
<dd><p>A table containing further parameters. Currently, the only supported parameter
34632
is ‘<samp>error_on_multiple</samp>’.
34637
<dt> <b>Syntax Samples:</b></dt>
34638
<dd><table><tr><td> </td><td><pre class="example">uncompressed = lib.import.uncompress_rle(compressed, {error_on_multiple = "\n"})
34639
</pre></td></tr></table>
34642
<dt> <b>Details:</b></dt>
34643
<dd><p>Levels typically include long lines of repeating characters, like walls or
34644
spaces. To save space, these are sometimes counted and replaced by the total
34645
number and a single example of the character. This is called "run-length
34646
encoding", or RLE.
34647
</p><table><tr><td> </td><td><pre class="example">"############ A #####BB#" compresses to "12#2 A5#2B#"
34648
</pre></td></tr></table>
34649
<p>However, some characters don’t make sense to be repeated, like line endings.
34650
To return an error when trying to repeat a line ending during decompression,
34651
you can hand a string to the attribute ‘<samp>error_on_multiple</samp>’. Any character
34652
in this string is then forbidden to be repeated. Remember that the ‘<samp>new
34653
line</samp>’-character is represented by ‘<samp>\n</samp>’ in Lua.
34659
<a name="lib_002eimport_002elevel_005fto_005fmap"></a>
34660
<table cellpadding="1" cellspacing="1" border="0">
34661
<tr><td valign="middle" align="left">[<a href="#lib_002eimport_002euncompress_005frle" title="Previous section in reading order"> < </a>]</td>
34662
<td valign="middle" align="left">[<a href="#lib_002eimport_002emap_005fsokoban" title="Next section in reading order"> > </a>]</td>
34663
<td valign="middle" align="left"> </td>
34664
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
34665
<td valign="middle" align="left">[<a href="#libimport" title="Up section"> Up </a>]</td>
34666
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
34667
<td valign="middle" align="left"> </td>
34668
<td valign="middle" align="left"> </td>
34669
<td valign="middle" align="left"> </td>
34670
<td valign="middle" align="left"> </td>
34671
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
34672
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
34673
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
34674
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
34676
<a name="lib_002eimport_002elevel_005fto_005fmap-1"></a>
34677
<h3 class="subsection">12.5.3 lib.import.level_to_map</h3>
34678
<a name="index-lib_002eimport_002elevel_005fto_005fmap"></a>
34680
<p>‘<samp>level_to_map</samp>’ breaks a level string down into a table of strings, which
34681
is then converted into a <a href="#libmap">libmap</a>-map.
34683
<dl compact="compact">
34684
<dt> <b>Syntax:</b></dt>
34685
<dd><p><b>lib.import.level_to_map</b>(<i>level</i>, <i>line_ending</i>, <i>default_key</i>)
34687
<dl compact="compact">
34688
<dt> <i>level</i></dt>
34689
<dd><p>A level string.
34692
<dt> <i>line_ending</i></dt>
34693
<dd><p>A string describing a single line ending. Default: ‘<samp>\n</samp>’
34696
<dt> <i>default_key</i></dt>
34697
<dd><p>The default key of the returned map. Default: ‘<samp> </samp>’
34702
<dt> <b>Syntax Samples:</b></dt>
34703
<dd><table><tr><td> </td><td><pre class="example">mymap = lib.import.level_to_map(level, "|", " ")
34704
</pre></td></tr></table>
34707
<dt> <b>Details:</b></dt>
34708
<dd><p>Multiple line endings are interpreted as multiple lines (of which the last
34709
lines are filled with the default key).
34711
<p>Make sure that the last line of the level ends in a proper line ending, and only
34712
one line ending. Otherwise, the returned map will be too short or too long.
34718
<a name="lib_002eimport_002emap_005fsokoban"></a>
34719
<table cellpadding="1" cellspacing="1" border="0">
34720
<tr><td valign="middle" align="left">[<a href="#lib_002eimport_002elevel_005fto_005fmap" title="Previous section in reading order"> < </a>]</td>
34721
<td valign="middle" align="left">[<a href="#lib_002eimport_002emap_005fwanderer" title="Next section in reading order"> > </a>]</td>
34722
<td valign="middle" align="left"> </td>
34723
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
34724
<td valign="middle" align="left">[<a href="#libimport" title="Up section"> Up </a>]</td>
34725
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
34726
<td valign="middle" align="left"> </td>
34727
<td valign="middle" align="left"> </td>
34728
<td valign="middle" align="left"> </td>
34729
<td valign="middle" align="left"> </td>
34730
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
34731
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
34732
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
34733
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
34735
<a name="lib_002eimport_002emap_005fsokoban-1"></a>
34736
<h3 class="subsection">12.5.4 lib.import.map_sokoban</h3>
34737
<a name="index-lib_002eimport_002emap_005fsokoban"></a>
34739
<p>‘<samp>map_sokoban</samp>’ takes a Sokoban multilevel as argument, and returns a
34740
beautified <a href="#libmap">libmap</a>-map.
34742
<dl compact="compact">
34743
<dt> <b>Syntax:</b></dt>
34744
<dd><p><b>lib.import.map_sokoban</b>(<i>multilevel</i>, <i>sublevel_number</i>, <i>keylength_one</i>)
34746
<dl compact="compact">
34747
<dt> <i>multilevel</i></dt>
34748
<dd><p>A multilevel string.
34751
<dt> <i>sublevel_number</i></dt>
34752
<dd><p>The number of the level to be extracted. First level is ‘<samp>1</samp>’. Default:
34753
‘<samp>1</samp>’
34756
<dt> <i>keylength_one</i></dt>
34757
<dd><p>A boolean value. If <code>false</code>, the returned map has keylength two. Otherwise,
34758
it has keylength one. Default: ‘<samp>false</samp>’
34763
<dt> <b>Syntax Samples:</b></dt>
34764
<dd><table><tr><td> </td><td><pre class="example">map_four = lib.import.map_sokoban(multilevel, 4, true)
34765
</pre></td></tr></table>
34768
<dt> <b>Details:</b></dt>
34769
<dd><p>Sokoban level files can be very different - they can use run-length encoding and
34770
multilevel files. Sometimes, ‘<samp>|</samp>’ is used as line ending instead of or even
34771
together with ‘<samp>\n</samp>’. ‘<samp> </samp>’, ‘<samp>_</samp>’ and ‘<samp>-</samp>’ can all represent
34772
space. Sometimes, the outside is filled with ‘<samp> </samp>’, then again with ‘<samp>#</samp>’.
34773
Finally, line width can vary. We use a slightly generalized version, to include
34774
chessoban levels. Allowed characters are:
34775
</p><table><tr><td> </td><td><pre class="example"> - _ space space
34778
$ * box, box with goal
34779
n N st_chess, st_chess with goal
34780
@ + player, player with goal
34781
</pre></td></tr></table>
34782
<p>The returned map will use ‘<samp> </samp>’ for inside space, ‘<samp>-</samp>’ for
34783
outside space, default key is ‘<samp> </samp>’.
34785
<p>If you chose ‘<samp>keylength_one = true</samp>’, the returned map will use the
34786
characters as described above. Otherwise, the returned map will have keylength
34787
two, and the characters ‘<samp>*</samp>’, ‘<samp>N</samp>’, and ‘<samp>+</samp>’ are resolved into
34788
‘<samp>$.</samp>’, ‘<samp>n.</samp>’, and ‘<samp>@.</samp>’ respectively, while the other keys become
34789
‘<samp> </samp>’, ‘<samp>- </samp>’, ‘<samp># </samp>’, ‘<samp> .</samp>’, ‘<samp>$ </samp>’, ‘<samp>n </samp>’, and
34790
‘<samp>@ </samp>’. You can then use <a href="#res_002ecomposer">res.composer</a> to easily draw your map.
34792
<p>Remember that the returned map uses the inner space ‘<samp> </samp>’ or ‘<samp> </samp>’ as
34793
default key. Hence, if you want to paste the map into another one
34794
(<a href="#Connecting-Two-Maps">Connecting Two Maps</a>), you will have to switch the default key to
34795
‘<samp>-</samp>’ or ‘<samp>- </samp>’ in beforehand to yield a good result.
34800
<a name="lib_002eimport_002emap_005fwanderer"></a>
34801
<table cellpadding="1" cellspacing="1" border="0">
34802
<tr><td valign="middle" align="left">[<a href="#lib_002eimport_002emap_005fsokoban" title="Previous section in reading order"> < </a>]</td>
34803
<td valign="middle" align="left">[<a href="#libsoko" title="Next section in reading order"> > </a>]</td>
34804
<td valign="middle" align="left"> </td>
34805
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
34806
<td valign="middle" align="left">[<a href="#libimport" title="Up section"> Up </a>]</td>
34807
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
34808
<td valign="middle" align="left"> </td>
34809
<td valign="middle" align="left"> </td>
34810
<td valign="middle" align="left"> </td>
34811
<td valign="middle" align="left"> </td>
34812
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
34813
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
34814
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
34815
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
34817
<a name="lib_002eimport_002emap_005fwanderer-1"></a>
34818
<h3 class="subsection">12.5.5 lib.import.map_wanderer</h3>
34819
<a name="index-lib_002eimport_002emap_005fwanderer"></a>
34821
<p>‘<samp>map_wanderer</samp>’ takes a Wanderer monolevel as argument, and returns a
34822
<a href="#libmap">libmap</a>-map. Note that Enigma does not yet have the necessary game objects
34823
to simulate Wanderer.
34825
<dl compact="compact">
34826
<dt> <b>Syntax:</b></dt>
34827
<dd><p><b>lib.import.map_wanderer</b>(<i>monolevel</i>)
34829
<dl compact="compact">
34830
<dt> <i>monolevel</i></dt>
34831
<dd><p>A monolevel string.
34836
<dt> <b>Syntax Samples:</b></dt>
34837
<dd><table><tr><td> </td><td><pre class="example">mymap = lib.import.map_wanderer(monolevel)
34838
</pre></td></tr></table>
34841
<dt> <b>Details:</b></dt>
34842
<dd><p>Wanderer is a game originally created by Steven Shipway in 1988.
34843
Wanderer level files are uncompressed monolevels with fixed
34844
width. The level itself is followed by a short description
34845
(title/author/email) in a single line or a line of ‘<samp>#</samp>’. Last
34846
line optionally is a number. A Wanderer level knows the
34847
following characters (taken from Wanderer’s editor):
34848
</p><table><tr><td> </td><td><pre class="example"> : _ # earth, rock, indestructible rock
34849
* - space treasure, alternative space, space
34850
O < > ^ falling boulder, arrow from right, arrow from left, balloon
34851
! + B landmine, cage, bomb
34853
T A X @ teleport, arrival, exit, start
34854
M S C ~ big monster, baby monster, time capsule, thingy
34855
</pre></td></tr></table>
34856
<p>Due to its fixed width (40) and height (16), a Wanderer level is not always
34857
surrounded by walls; you might have to add them.
34859
<p>Note that Enigma does not yet support the game elements of Wanderer, hence this
34860
function currently is only of use to developers.
34865
<a name="libsoko"></a>
34866
<table cellpadding="1" cellspacing="1" border="0">
34867
<tr><td valign="middle" align="left">[<a href="#lib_002eimport_002emap_005fwanderer" title="Previous section in reading order"> < </a>]</td>
34868
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next section in reading order"> > </a>]</td>
34869
<td valign="middle" align="left"> </td>
34870
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
34871
<td valign="middle" align="left">[<a href="#Libraries" title="Up section"> Up </a>]</td>
34872
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Next chapter"> >> </a>]</td>
34873
<td valign="middle" align="left"> </td>
34874
<td valign="middle" align="left"> </td>
34875
<td valign="middle" align="left"> </td>
34876
<td valign="middle" align="left"> </td>
34877
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
34878
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
34879
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
34880
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
34882
<a name="libsoko-1"></a>
34883
<h2 class="section">12.6 libsoko</h2>
34884
<a name="index-lib_002esoko_002ecreate_005fsokoball"></a>
34886
<p>This library is described as of release 1.
34888
<p>You can load it by adding an ‘<samp>dependency</samp>’ element to the
34889
<a href="#g_t_003ccompatibility_003e"><compatibility></a> XML Metadata element as follows:
34891
<table><tr><td> </td><td><pre class="example"> <<i>el</i>:<b>dependency</b> <i>el</i>:<b>path</b>="<var>lib/libsoko</var>" <i>el</i>:<b>id</b>="<var>lib/libsoko</var>" <i>el</i>:<b>release</b>="<var>1</var>" <i>el</i>:<b>preload</b>="<var>true</var>"/>
34892
</pre></td></tr></table>
34894
<p>It preloads automatically the libraries <a href="#libimport">libimport</a>, <a href="#libmap">libmap</a>,
34895
<a href="#libmath">libmath</a>, and <a href="#liblua">liblua</a>.
34897
<p>The only function which is meant to be used in levels is
34898
‘<samp>lib.soko.create_sokoball</samp>’.
34900
<dl compact="compact">
34901
<dt> <b>Syntax:</b></dt>
34902
<dd><p><b>lib.soko.create_sokoball</b>(<i>multilevel</i>, <i>sublevel_number</i>, <i>args</i>)
34904
<dl compact="compact">
34905
<dt> <i>multilevel</i></dt>
34906
<dd><p>A multilevel string in the sense of <a href="#libimport">libimport</a>.
34909
<dt> <i>sublevel_number</i></dt>
34910
<dd><p>A number determining the number of the level in <code>multilevel</code>. Default is
34911
‘<samp>1</samp>’.
34914
<dt> <i>args</i></dt>
34915
<dd><p>A table holding optional information to construct the level,
34916
default is {}. The following keywords are currently supported,
34917
all other keywords will return an error:
34918
</p><dl compact="compact">
34919
<dt> <i>design</i></dt>
34920
<dd><p>A number or a design table, see below.
34923
<dt> <i>maxdesign</i></dt>
34924
<dd><p>A number, see below.
34931
<dt> <b>Syntax Samples:</b></dt>
34932
<dd><table><tr><td> </td><td><pre class="example">lib.soko.create_sokoball(many_levels, 13, {design = 48})
34933
lib.soko.create_sokoball(many_levels, 12, {maxdesign = MAXDESIGN[1.1]})
34934
</pre></td></tr></table>
34937
<dt> <b>Details:</b></dt>
34938
<dd><p>‘<samp>create_sokoball</samp>’ creates a sokoball-level from the string
34939
<code>multilevel</code>. This string can be a multilevel, in which case
34940
‘<samp>sublevel_number</samp>’ determines the number of the level, starting with 1
34943
<p>The design can be chosen by ‘<samp>design</samp>’. This is either a number, which refers
34944
to the list of predefined designs in <code>libsoko_designlist.xml</code>, or a table
34945
with the corresponding design entries. A missing entry will be interpreted as
34946
the entry from lib.soko_designlist.default. If the ‘<samp>design</samp>’ variable is
34947
omitted, a check-number is created from the level which uniquely* determines
34948
a design from the design list, with <code>maxdesign</code> as highest possible
34951
<p>*Uniquely means: The design might change when the design list is enlarged.
34953
<p>The number of available designs is 150 in Enigma 1.1, which equals the constant
34954
<code>MAXDESIGN[1.1]</code>. However, further versions of Enigma might support more
34955
designs. If a multilevel is loaded with a (numerically given) maxdesign number
34956
which is larger than the number of available designs, only those levels will be
34957
available for play whose calculated design number is supported, all others will
34958
show an error message. However, it is better to use the MAXDESIGN-constants.
34959
These will always raise an error, when the requested designs are not available.
34960
The MAXDESIGN-constants are read-only.
34962
<p>If both the design argument as well as the maxdesign-number are
34963
omitted, the original 150 designs will be used as fallback, no matter which
34964
version of Enigma is running.
34966
<p>To define own designs, please consult
34967
‘<samp>data/levels/lib/libsoko_designlist.xml</samp>’
34968
or use <a href="#libimport">libimport</a> in the first place.
34970
<p>Returns width and height of new Enigma level.
34977
<a name="Advanced-Features"></a>
34978
<table cellpadding="1" cellspacing="1" border="0">
34979
<tr><td valign="middle" align="left">[<a href="#libsoko" title="Previous section in reading order"> < </a>]</td>
34980
<td valign="middle" align="left">[<a href="#Resolvers" title="Next section in reading order"> > </a>]</td>
34981
<td valign="middle" align="left"> </td>
34982
<td valign="middle" align="left">[<a href="#Libraries" title="Beginning of this chapter or previous chapter"> << </a>]</td>
34983
<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up </a>]</td>
34984
<td valign="middle" align="left">[<a href="#Extension-Development" title="Next chapter"> >> </a>]</td>
34985
<td valign="middle" align="left"> </td>
34986
<td valign="middle" align="left"> </td>
34987
<td valign="middle" align="left"> </td>
34988
<td valign="middle" align="left"> </td>
34989
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
34990
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
34991
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
34992
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
34994
<a name="Advanced-Features-1"></a>
34995
<h1 class="chapter">13. Advanced Features</h1>
34997
<table class="menu" border="0" cellspacing="0">
34998
<tr><td align="left" valign="top"><a href="#Resolvers">13.1 Resolvers</a></td><td> </td><td align="left" valign="top"> Standard tools for interpretation of tile maps
35000
<tr><td align="left" valign="top"><a href="#General-Features">13.2 General Features</a></td><td> </td><td align="left" valign="top"> Special features like scrolling, flood, fire,...
35002
<tr><td align="left" valign="top"><a href="#Tips-and-Tricks">13.3 Tips and Tricks</a></td><td> </td><td align="left" valign="top"> Simple patterns that are valuable like a feature
35007
<a name="Resolvers"></a>
35008
<table cellpadding="1" cellspacing="1" border="0">
35009
<tr><td valign="middle" align="left">[<a href="#Advanced-Features" title="Previous section in reading order"> < </a>]</td>
35010
<td valign="middle" align="left">[<a href="#Resolver-Chaining" title="Next section in reading order"> > </a>]</td>
35011
<td valign="middle" align="left"> </td>
35012
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Beginning of this chapter or previous chapter"> << </a>]</td>
35013
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Up section"> Up </a>]</td>
35014
<td valign="middle" align="left">[<a href="#Extension-Development" title="Next chapter"> >> </a>]</td>
35015
<td valign="middle" align="left"> </td>
35016
<td valign="middle" align="left"> </td>
35017
<td valign="middle" align="left"> </td>
35018
<td valign="middle" align="left"> </td>
35019
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
35020
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
35021
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
35022
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
35024
<a name="Resolvers-1"></a>
35025
<h2 class="section">13.1 Resolvers</h2>
35027
<p>Every tile in the world is defined by a key that needs to be resolved to its
35028
declaration. This can be done either by the <a href="#Tiles-Repository">Tiles Repository</a> ‘<samp>ti</samp>’
35029
alone, or by additionally chained resolvers. In the chapter <a href="#Lua-API">Lua API</a> we
35030
learned how to set up a <a href="#World">World</a> by static <a href="#Tile-and-Object-Declaration">Tile and Object Declaration</a>s.
35031
Now it is time to explore the capabilities of resolvers. In the
35032
<a href="#World-Creation">World Creation</a> you had to supply a top resolver as an argument. Let us
35033
look which types of resolvers are available and how you can chain these resolvers.
35035
<table class="menu" border="0" cellspacing="0">
35036
<tr><td align="left" valign="top"><a href="#Resolver-Chaining">13.1.1 Resolver Chaining</a></td><td> </td><td align="left" valign="top"> Linking resolvers and the tiles repository
35038
<tr><td align="left" valign="top"><a href="#Custom-Resolver">13.1.2 Custom Resolver</a></td><td> </td><td align="left" valign="top"> Writing simplified own resolvers
35040
<tr><td align="left" valign="top"><a href="#res_002eautotile">13.1.3 res.autotile</a></td><td> </td><td align="left" valign="top"> Generate tiles from given template declarations
35042
<tr><td align="left" valign="top"><a href="#res_002ecomposer">13.1.4 res.composer</a></td><td> </td><td align="left" valign="top"> Compose tiles from given base tiles
35044
<tr><td align="left" valign="top"><a href="#res_002emaze">13.1.5 res.maze</a></td><td> </td><td align="left" valign="top"> Generate arbitrarily shaped mazes
35046
<tr><td align="left" valign="top"><a href="#res_002epuzzle">13.1.6 res.puzzle</a></td><td> </td><td align="left" valign="top"> Generate puzzle tiles and shuffle resulting puzzle clusters
35048
<tr><td align="left" valign="top"><a href="#res_002erandom">13.1.7 res.random</a></td><td> </td><td align="left" valign="top"> Choosing random tiles in a given distribution
35050
<tr><td align="left" valign="top"><a href="#res_002etrain">13.1.8 res.train</a></td><td> </td><td align="left" valign="top"> Set up floor chains that move on given railways
35056
<a name="Resolver-Chaining"></a>
35057
<table cellpadding="1" cellspacing="1" border="0">
35058
<tr><td valign="middle" align="left">[<a href="#Resolvers" title="Previous section in reading order"> < </a>]</td>
35059
<td valign="middle" align="left">[<a href="#Custom-Resolver" title="Next section in reading order"> > </a>]</td>
35060
<td valign="middle" align="left"> </td>
35061
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Beginning of this chapter or previous chapter"> << </a>]</td>
35062
<td valign="middle" align="left">[<a href="#Resolvers" title="Up section"> Up </a>]</td>
35063
<td valign="middle" align="left">[<a href="#Extension-Development" title="Next chapter"> >> </a>]</td>
35064
<td valign="middle" align="left"> </td>
35065
<td valign="middle" align="left"> </td>
35066
<td valign="middle" align="left"> </td>
35067
<td valign="middle" align="left"> </td>
35068
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
35069
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
35070
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
35071
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
35073
<a name="Resolver-Chaining-1"></a>
35074
<h3 class="subsection">13.1.1 Resolver Chaining</h3>
35076
<p>There exist several useful resolvers that may simplify the task of level writing
35077
or provide dynamic features like randomness, mazes, etc. Each of them handles
35078
just some keys out of your world map. For the other keys the resolver has no
35079
idea how to resolve them to object declarations. Thus each resolver has to be
35080
linked to a so called ‘<samp>subresolver</samp>’. The resolver just forwards all key
35081
request that it can not handle itself to its subresolver. Indeed it will in
35082
most cases even forward modified key requests to its subresolver that are
35083
required by the process of handling its own keys.
35085
<p>The last resolver in the chain will either use the <a href="#Tiles-Repository">Tiles Repository</a>
35086
‘<samp>ti</samp>’ as its subresolver or a <a href="#Custom-Resolver">Custom Resolver</a> function, which will be
35087
‘<samp>ti</samp>’ based, too.
35089
<p>A typical resolver chain will look like:
35092
<dl compact="compact">
35093
<dt> <b>Syntax Sample:</b></dt>
35094
<dd><table><tr><td> </td><td><pre class="example"><var>subresolver</var> = <i>res</i>.<i>random</i>(<i>ti</i>, ...)
35095
<var>topresolver</var> = <i>res</i>.<i>composer</i>(<var>subresolver</var>)
35096
width, height = <i>wo</i>(<var>topresolver</var>, ...)
35097
</pre></td></tr></table>
35100
<dt> <b>Details:</b></dt>
35101
<dd><p>The call of every resolver returns a context reference handle, that must be
35102
supplied to the upward resolver in the chain. Thus you need to start with the
35103
lowest resolver in your level code. The <a href="#World-Creation">World Creation</a> takes the top most
35104
resolver context handle.
35106
<p>There is no limit to the number of chained resolvers. But the order of resolvers
35107
may sometimes be critical. Please read carefully the resolver notes for usage,
35108
restrictions and caveats.
35111
<dt> <b>Full Example:</b></dt>
35112
<dd><p>The level "Demo Resolver Chain" of levelpack "Demolevels":
35113
</p><table><tr><td> </td><td><pre class="example">ti["~"] = {"fl_water"}
35114
ti["s"] = {"fl_sahara"}
35115
ti["t"] = {"fl_tigris"}
35116
ti["1"] = {"ac-blackball", 0, 0.5}
35118
ti["template_trigger"] = {"it_trigger", target="myoxyd%%", action="open"}
35119
ti["template_oxyd"] = ti["~"] .. {"st_oxyd", "myoxyd%%"}
35121
myrandom = res.random(ti, " ", {"s", "t"})
35123
myautotile = res.autotile(myrandom, {"a", "h", "template_trigger"},
35124
{"A", "H", "template_oxyd"})
35126
w, h = wo(myautotile, " ", {
35129
"~~ h b ~~",
35131
"B~ c d ~F",
35133
"~~ 1 ~~",
35135
"C~ f e ~G",
35137
"~~ g a ~~",
35143
</pre></td></tr></table>
35149
<a name="Custom-Resolver"></a>
35150
<table cellpadding="1" cellspacing="1" border="0">
35151
<tr><td valign="middle" align="left">[<a href="#Resolver-Chaining" title="Previous section in reading order"> < </a>]</td>
35152
<td valign="middle" align="left">[<a href="#res_002eautotile" title="Next section in reading order"> > </a>]</td>
35153
<td valign="middle" align="left"> </td>
35154
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Beginning of this chapter or previous chapter"> << </a>]</td>
35155
<td valign="middle" align="left">[<a href="#Resolvers" title="Up section"> Up </a>]</td>
35156
<td valign="middle" align="left">[<a href="#Extension-Development" title="Next chapter"> >> </a>]</td>
35157
<td valign="middle" align="left"> </td>
35158
<td valign="middle" align="left"> </td>
35159
<td valign="middle" align="left"> </td>
35160
<td valign="middle" align="left"> </td>
35161
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
35162
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
35163
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
35164
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
35166
<a name="Custom-Resolver-1"></a>
35167
<h3 class="subsection">13.1.2 Custom Resolver</h3>
35168
<a name="index-custom-resolver"></a>
35170
<p>A customer resolver is a function in the level that allows a dynamic remapping
35171
of tiles. When this function is registered in the resolver chain it is called
35172
once for every tile to be set. The tile that this function return will be set.
35174
<p>Typical use cases are design patterns that are easy to calculate, but tedious
35175
to draw in the map and dynamic generated levels that differ slightly on every
35178
<dl compact="compact">
35179
<dt> <b>Syntax:</b></dt>
35180
<dd><p>tile = <b>myresolver</b>(<i>key</i>, <i>x</i>, <i>y</i>)
35182
<dl compact="compact">
35183
<dt> <i>key</i></dt>
35184
<dd><p>String that contains the tile key to be resolved.
35187
<dd><p>The world x coordinate of the tile.
35190
<dd><p>The world y coordinate of the tile.
35195
<dt> <b>Details:</b></dt>
35196
<dd><p>A custom resolver function is the last resolver that is called in the chain.
35197
It has to return the final tile that should be drawn at the given position.
35198
This can be done by statement ‘<samp>return ti["k"]</samp>’, which references the tile
35199
already declared in the tiles map.
35201
<p>If no suitable tile was declared you can alternatively return a new tile
35202
like ‘<samp>return ti({"st_switch", state=ON})</samp>’.
35204
<p>If you decide not to draw any tile at all, you must return an empty tile
35205
declaration: ‘<samp>return {"nil"}</samp>’ or ‘<samp>return {}</samp>’.
35207
<p>‘<samp>return nil</samp>’ indicates an error of usage of an unknown tile key.
35210
<dt> <b>Example:</b></dt>
35211
<dd><p>The level "Demo User Resolver" of levelpack "Demolevels":
35212
</p><table><tr><td> </td><td><pre class="example">ti["r"] = {"fl_rough_red"}
35213
ti["b"] = {"fl_rough_blue"}
35214
ti["1"] = {"#ac-blackball"}
35216
ti["x"] = {"it_cross"}
35218
function myresolver(key, x, y)
35219
if key == " " then
35220
local center = ((x%3) * (y%3))%2
35221
local checker = ((math.modf(x/3) %2) + (math.modf(y/3) %2))%2
35222
if center + checker == 1 then
35223
return ti["r"]
35225
return ti["b"]
35232
w, h = wo(myresolver, " ", {
35247
</pre></td></tr></table>
35253
<a name="res_002eautotile"></a>
35254
<table cellpadding="1" cellspacing="1" border="0">
35255
<tr><td valign="middle" align="left">[<a href="#Custom-Resolver" title="Previous section in reading order"> < </a>]</td>
35256
<td valign="middle" align="left">[<a href="#res_002ecomposer" title="Next section in reading order"> > </a>]</td>
35257
<td valign="middle" align="left"> </td>
35258
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Beginning of this chapter or previous chapter"> << </a>]</td>
35259
<td valign="middle" align="left">[<a href="#Resolvers" title="Up section"> Up </a>]</td>
35260
<td valign="middle" align="left">[<a href="#Extension-Development" title="Next chapter"> >> </a>]</td>
35261
<td valign="middle" align="left"> </td>
35262
<td valign="middle" align="left"> </td>
35263
<td valign="middle" align="left"> </td>
35264
<td valign="middle" align="left"> </td>
35265
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
35266
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
35267
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
35268
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
35270
<a name="res_002eautotile-1"></a>
35271
<h3 class="subsection">13.1.3 res.autotile</h3>
35272
<a name="index-res_002eautotile"></a>
35274
<p>Autotiling reduces the number of required tile declarations by generating them
35275
according to given simple rules. The most common application are a bunch of
35276
identical switch like objects that all target the same type of object
35277
like a door or a laser. As each of them has its individual target object it
35278
would require to write a separate tile declaration with a unique tile key, e.g.
35280
<table><tr><td> </td><td><pre class="example">ti["A"] = {"st_floppy", target="laserA"}
35281
ti["B"] = {"st_floppy", target="laserB"}
35282
ti["C"] = {"st_floppy", target="laserC"}
35283
ti["a"] = {"st_laser", name="laserA"}
35284
ti["b"] = {"st_laser", name="laserB"}
35285
ti["c"] = {"st_laser", name="laserC"}
35286
</pre></td></tr></table>
35288
<p>Autotiling requires just one template tile of each type and substitutes any
35289
pattern ‘<samp>%%</samp>’ by a unique substitution.
35291
<table><tr><td> </td><td><pre class="example">ti["template_switch"] = {"st_floppy", target="laser%%"}
35292
ti["template_laser"] = {"st_laser", name="laser%%"}
35293
</pre></td></tr></table>
35295
<p>Independent on the number of required unique objects you have just one template.
35296
You just declare the used range of tile keys by a rule and are free to use
35297
them within your level map.
35299
<dl compact="compact">
35300
<dt> <b>Syntax:</b></dt>
35302
<p><b>res.autotile</b>(<i>subresolver</i>, <i>rules</i>)
35304
<dl compact="compact">
35305
<dt> <i>subresolver</i></dt>
35306
<dd><p>Resolver to which unresolved requests should be forwarded. May be ‘<samp>ti</samp>’
35307
as the final resolver of the resolver chain.
35309
<dt> <i>rules</i> = <i>rule</i>, <i>rule</i>,...</dt>
35310
<dd><p>One rule or as many as you like, all separated by a comma.
35312
<dt> <i>rule</i> = <i>prefixrule</i> | <i>rangerule</i></dt>
35313
<dd><p>Each rule can be either a prefixrule or a rangerule in any mixture
35315
<dt> <i>prefixrule</i> = {<i>prefix</i>, <i>template</i>}</dt>
35316
<dd><p>A table with two entries. First a prefix string that is common to all tile
35317
keys that should be handled followed by key string of the template tile.
35319
<dt> <i>rangerule</i> = {<i>first</i>, <i>last</i>, <i>template</i> [, <i>offset</i>]}</dt>
35320
<dd><p>A table with at least three entries. A string with the first key to be handled,
35321
followed by a string with the last key to be handled. The third value is the key
35322
string of the template tile. An optional fourth value, that defaults to <code>1</code>,
35323
defines the number of the first key on ‘<samp>%%</samp>’ pattern substitutions.
35328
<dt> <b>Syntax Samples:</b></dt>
35329
<dd><table><tr><td> </td><td><pre class="example">res.autotile(ti, {"A", "template_switch"}, {"L", "template_laser})
35330
res.autotile(ti, {"a", "e", "template_trigger}, {"A", "E", "template_door"}
35331
</pre></td></tr></table>
35334
<dt> <b>Details:</b></dt>
35335
<dd><p>Prefix rules need a key length of at least 2. You can not use it with maps
35336
of just one character per tile. The resolver will create a tile declaration for
35337
any tile key in the map that matches the given prefix. A copy of the template
35340
<p>Within this copy of the template all occurrences of the two characters ‘<samp>%%</samp>’
35341
in explicit object declarations will be substituted by a single percent sign
35342
followed by the suffix of the used tile key. Thus a key of ‘<samp>AD</samp>’ will target
35343
the laser ‘<samp>laser%D</samp>’. You need to use the key ‘<samp>LD</samp>’ in the map for the
35346
<p>Rangerules match any tile key in the given range. It can well be used in one
35347
character key maps. But it can be used in multicharacter maps, too. In this case
35348
the given first and last keys may just differ in the last character. Again a
35349
copy of the template rule will be generated and the ‘<samp>%%</samp>’ patterns will be
35350
substituted. But in this case the substitution is composed of a single percent
35351
sign followed by an integer number, that counts the key position within the
35352
given range, starting with the given offset or default <code>1</code>. Thus a key of
35353
‘<samp>c</samp>’ in the syntax sample above will target the door ‘<samp>door%3</samp>’. You
35354
would need to use the key ‘<samp>C</samp>’ in the map for the matching door.
35356
<p>The template tile definitions can well be composed of several concatenated
35357
tiles even with references of base tiles. The pattern substitution takes place
35358
on any attribute value containing string descriptions. A valid template would
35360
</p><table><tr><td> </td><td><pre class="example">ti["template"] = ti["~"] .. ti({"it_trigger", target={"door%%#*","laser%%"}}) .. {"st_grate1"}
35361
</pre></td></tr></table>
35363
<p>A pattern substitution can even take place on a key of a referenced base tile.
35364
Every occurrence of the two characters ‘<samp>%%</samp>’ in the key will be substituted
35365
by the suffix of the used tile key without a preceeding percent sign. E.g. the
35368
<table><tr><td> </td><td><pre class="example">ti["template"] = ti["P%%"] .. {"st_floppy", target="laser%%"}
35369
</pre></td></tr></table>
35371
<p>applied to a key with the suffix ‘<samp>d</samp>’ will result in a base tile key ‘<samp>Pd</samp>’.
35372
This feature is especially useful if the autotile resolver is chained to
35373
another subresolver which generates the base tiles.
35376
<dt> <b>Full Example:</b></dt>
35377
<dd><table><tr><td> </td><td><pre class="example">ti[" "] = {"fl_sahara"}
35379
ti["template_a"] = {"st_floppy", target={"door%%#*","laser%%"}}
35380
ti["template_A"] = {"st_blocker", "door%%#"}
35381
ti["template_1"] = {"st_laser_s", "laser%%"}
35383
ti["x"] = {"#ac-marble_black"} .. ti({"it_floppy"})
35385
local resolver = res.autotile(ti, {"a", "e", "template_a"},
35386
{"A", "E", "template_A"}, {"1", "5", "template_1"})
35388
w, h = wo(resolver, " ", {
35391
" a DB e BC ",
35393
" CD b AE c ",
35395
" d EA ",
35400
" 4 2 5 1 3 ",
35403
</pre></td></tr></table>
35404
<p>A more elaborate example can be found in <a href="#Orthogonal-Autotiling">Orthogonal Autotiling</a>.
35407
<dt> <b>Caveats:</b><a name="Caveats"></a></dt>
35408
<dd><p>Do not use the hash sign ‘<samp>#</samp>’ as suffix character for key length 2 and
35409
above autotiled keys. A key <code>"A#"</code> could result in an unexpected ‘<samp>%%</samp>’
35410
substitution in the name attribute. A name <code>"sample%%"</code> would be
35411
substituted by <code>"sample%#"</code> which is a name that will be autonumbered
35412
(see section <a href="#Object-Naming">Object Naming</a>).
35419
<a name="res_002ecomposer"></a>
35420
<table cellpadding="1" cellspacing="1" border="0">
35421
<tr><td valign="middle" align="left">[<a href="#res_002eautotile" title="Previous section in reading order"> < </a>]</td>
35422
<td valign="middle" align="left">[<a href="#res_002emaze" title="Next section in reading order"> > </a>]</td>
35423
<td valign="middle" align="left"> </td>
35424
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Beginning of this chapter or previous chapter"> << </a>]</td>
35425
<td valign="middle" align="left">[<a href="#Resolvers" title="Up section"> Up </a>]</td>
35426
<td valign="middle" align="left">[<a href="#Extension-Development" title="Next chapter"> >> </a>]</td>
35427
<td valign="middle" align="left"> </td>
35428
<td valign="middle" align="left"> </td>
35429
<td valign="middle" align="left"> </td>
35430
<td valign="middle" align="left"> </td>
35431
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
35432
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
35433
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
35434
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
35436
<a name="res_002ecomposer-1"></a>
35437
<h3 class="subsection">13.1.4 res.composer</h3>
35438
<a name="index-res_002ecomposer"></a>
35440
<p>The composer resolver reduces the number of required tile declarations by
35441
generating them by composition of base tiles. Even small levels and nearly
35442
every large level will use many different objects in numerous tile compositions.
35443
As the usable one character tile key candidates will not suffice you will need
35444
to use two or three character tile keys. But you will need numerous tile
35445
declarations, one for every used object combination.
35447
<p>The composer frees you from declaring every used combination. You just declare
35448
the base objects, e.g. the floors and all stones, items, actors and use
35449
combinations of these base tiles keys. The composer constructs the required
35450
tile declarations on the fly. E.g. with the following base tile declarations:
35452
<table><tr><td> </td><td><pre class="example">ti[" ."] = {"fl_space"}
35453
ti[" ~"] = {"fl_water"}
35454
ti["X "] = {"st_grate"}
35455
ti["h "] = {"it_hammer"}
35456
</pre></td></tr></table>
35458
<p>You can freely use any of the additional combination like <code>"X."</code> - a grate
35459
on space, <code>"X~"</code> - a grate on water, <code>"h."</code> - a hammer on space,
35460
<code>"h~"</code> - a hammer on water.
35462
<dl compact="compact">
35463
<dt> <b>Syntax:</b></dt>
35465
<p><b>res.composer</b>(<i>subresolver</i>)
35467
<p><b>res.composer</b>(<i>subresolver</i>, <i>sequence</i>)
35469
<dl compact="compact">
35470
<dt> <i>subresolver</i></dt>
35471
<dd><p>Resolver to which unresolved requests should be forwarded. May be ‘<samp>ti</samp>’
35472
as the final resolver of the resolver chain.
35474
<dt> <i>sequence</i></dt>
35475
<dd><p>Search sequence for basic tile declarations given as a string of priority
35476
numbers. The sequence defaults to <code>"123456789"</code>.
35481
<dt> <b>Syntax Samples:</b></dt>
35482
<dd><table><tr><td> </td><td><pre class="example">res.composer(ti)
35483
</pre></td></tr></table>
35486
<dt> <b>Details:</b></dt>
35487
<dd><p>For every key in the map the subresolver will be first requested for a tile
35488
declaration. Thus any given explicit declaration will precede the auto
35491
<p>Just in case that no declaration exists the search starts for existing subkey
35492
tiles. Subkeys are keys with all but some characters replaced by a whitespace
35493
‘<samp> </samp>’.
35495
<p>The search sequence is given by the optional second argument and defaults to
35496
<code>"123456789"</code>. In the first step all character positions marked by a
35497
‘<samp>1</samp>’ in the sequence string are maintained in the key string and all others
35498
are replaced by whitespace. In the second step all character positions marked
35499
by a ‘<samp>2</samp>’ in the sequence string are maintained in the key string and all
35500
others are replaced by whitespace. This procedure continues until the number
35501
equals the key length. All generated subkeys are resolved by the subresolver
35502
and concatenated in the given sequence.
35504
<p>With the default sequence <code>"123456789"</code> a key request for <code>"~mX"</code> is
35505
resolved to subkeys <code>"~ "</code>, <code>" m "</code> and <code>" X"</code>. These subkeys
35506
are resolved by the subresolver. If the subresolver is ‘<samp>ti</samp>’ the result is:
35508
<table><tr><td> </td><td><pre class="example">ti["~ "] .. ti[" m "] .. ti[" X"]
35509
</pre></td></tr></table>
35511
<p>With a key length of 3 or more characters it is sometimes useful to avoid a
35512
total decomposition into single character based subkeys. E.g. you may want
35513
to use a <a href="#res_002eautotile">res.autotile</a> or <a href="#res_002epuzzle">res.puzzle</a> as subresolver. Both have the
35514
need of essential 2 character subkeys. In this case you can simply define
35515
the sequence as <code>"122"</code> for a key length of 3. A key request of
35516
<code>"~Pa"</code> will be resolved to subkeys <code>"~ "</code>, <code>" Pa"</code>. In case
35517
of a puzzle subresolver this would result in:
35519
<table><tr><td> </td><td><pre class="example">ti["~ "] .. ti[" P"]
35520
</pre></td></tr></table>
35522
<p>with second tile declaration being a <a href="#st_005fpuzzle">st_puzzle</a> declaration with the
35523
‘<samp>connections</samp>’ attribute being set to <code>"w"</code> according to the last key
35524
character ‘<samp>a</samp>’.
35526
<p>With a <code>"231"</code> you stick to a total decomposition, but you redefine the
35527
sequence of evaluation and composition. For the key <code>"~mX"</code> you would get
35528
in contrast to the first example:
35530
<table><tr><td> </td><td><pre class="example">ti[" X"] .. ti["~ "] .. ti[" m "]
35531
</pre></td></tr></table>
35533
<p>In all cases, subkeys, that are strings of whitespace only, will simply be
35534
ignored. With the default sequence the key <code>"~ X"</code> will result just in:
35536
<table><tr><td> </td><td><pre class="example">ti["~ "] .. ti[" X"]
35537
</pre></td></tr></table>
35539
<p>If you set your floors by usage of the composer you should use the all
35540
whitespace key as your default floor as this key does not resolve via the
35541
composer and needs the backup of the default mechanism.
35544
<dt> <b>Full Example:</b></dt>
35545
<dd><table><tr><td> </td><td><pre class="example">ti[" "] = {"fl_sahara"}
35546
ti[" ="] = {"fl_tigris"}
35547
ti[" ."] = {"fl_abyss"}
35548
ti[" ~"] = {"fl_water"}
35549
ti[" ;"] = {"fl_lawn"}
35551
ti["# "] = {"st_granite"}
35552
ti["W "] = {"st_wood"}
35553
ti["X "] = {"st_oxyd"}
35554
ti["G "] = {"st_grate_cross"}
35556
ti["2 "] = {"it_coin_s"}
35557
ti["s "] = {"it_seed"}
35558
ti["c "] = {"it_cherry"}
35559
ti["h "] = {"it_hammer"}
35561
ti["k "] = {"it_key"} .. ti({"st_lightglass"})
35563
ti["xx"] = {"#ac_marble_black"}
35565
local resolver = res.composer(ti)
35567
w, h = wo(resolver, " ", {
35568
--0001020304050607080910111213141516171819
35570
" h= ;W;2;c G~ ~# #.2.X X~k=k; ",
35572
" 2;s; 2.s. 2=s= ",
35573
" c;h; c.h. c=h= xx ",
35576
</pre></td></tr></table>
35583
<a name="res_002emaze"></a>
35584
<table cellpadding="1" cellspacing="1" border="0">
35585
<tr><td valign="middle" align="left">[<a href="#res_002ecomposer" title="Previous section in reading order"> < </a>]</td>
35586
<td valign="middle" align="left">[<a href="#res_002epuzzle" title="Next section in reading order"> > </a>]</td>
35587
<td valign="middle" align="left"> </td>
35588
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Beginning of this chapter or previous chapter"> << </a>]</td>
35589
<td valign="middle" align="left">[<a href="#Resolvers" title="Up section"> Up </a>]</td>
35590
<td valign="middle" align="left">[<a href="#Extension-Development" title="Next chapter"> >> </a>]</td>
35591
<td valign="middle" align="left"> </td>
35592
<td valign="middle" align="left"> </td>
35593
<td valign="middle" align="left"> </td>
35594
<td valign="middle" align="left"> </td>
35595
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
35596
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
35597
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
35598
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
35600
<a name="res_002emaze-1"></a>
35601
<h3 class="subsection">13.1.5 res.maze</h3>
35602
<a name="index-res_002emaze"></a>
35604
<p>The maze resolver supports you in the creation of quite arbitrary mazes. The
35605
shape is no longer limited to boring rectangular areas of one grid thick walls
35606
leaving the player just a one grid path uniquely connecting all parts of the maze.
35608
<p>This second generation maze generator lets you fill mazes in arbitrarily shaped
35609
areas, mazes with thick walls or chasms, or thin walls of just a sheet of window
35610
glass, mazes with cells of single grid, cells that are whole islands or mazes
35611
based on <a href="#it_005fstrip">it_strip</a> that have cells of no extent and consist of connections
35612
only. The maze cells may be aligned strictly rectangular or shifted in one
35613
direction, they may be just connected to its 4 neighbors or to 6 neighbors in
35614
hexagonal mazes or three dimensional mazes. You can write and plug in your own
35615
maze generation and rendering algorithms. And finally you can analyse,
35616
postprocess and even modify your maze even after the initial creation.
35618
<p>From the mathematical point of view we provide the basic structures for
35619
generation of quite arbitrary directed graphs. Our maze consists of cells, the
35620
vertices of a graph. Every cell can be connected to a given number of neighbor
35621
cells. But these connections, that are the passages from one cell to another,
35622
can even be direction dependent. This allows you to use window panes on either
35623
side of a connection or to use oneways for your connections, too. These passages
35624
from one cell to another are the edges of our graph and as they may be directed
35625
we have a directed graph. But for most mazes the support of directions is
35626
irrelevant and transparent, and you do not really need to know anything about
35627
graphs at all. Thus we called the resolver just a maze resolver.
35629
<p>Of course such a versatile resolver needs some configuration. As the parameters
35630
exceed the number of arguments, that you can reasonably supply to a function
35631
just by enlisting them, we decided to group the parameters for specific
35632
tasks and to use a table with named attributes for the configuration. This
35633
sounds more complex than it is. But watch out carefully for the table curly
35634
braces as they are necessary and can not be omitted.
35636
<p>In a big level you may want to generate two or even more completely independent
35637
mazes. You can do this by using multiple instances of this resolver. The
35638
resolver handle returned on the configuration is a unique reference pointer for
35639
the maze for subsequent requests. Store it and link all the maze resolvers as
35640
explained in <a href="#Resolver-Chaining">Resolver Chaining</a>.
35642
<dl compact="compact">
35643
<dt> <b>Location:</b></dt>
35644
<dd><p>This resolver is part of the library ‘<samp>libmaze</samp>’ as of release 2. You can
35645
use it by adding the following dependency to your level <a href="#g_t_003ccompatibility_003e"><compatibility></a>
35647
</p><table><tr><td> </td><td><pre class="example"> <<i>el</i>:<b>dependency</b> <i>el</i>:<b>path</b>="<var>lib/libmaze</var>" <i>el</i>:<b>id</b>="<var>lib/libmaze</var>" <i>el</i>:<b>release</b>="<var>2</var>" <i>el</i>:<b>preload</b>="<var>true</var>"/>
35648
</pre></td></tr></table>
35650
<p>The library <a href="#libmap">libmap</a> is automatically preloaded by this resolver.
35653
<dt> <b>Syntax:</b></dt>
35655
<p><i>themaze</i> = <b>res.maze</b>(<i>subresolver</i>, <i>attributes</i>)
35657
<dl compact="compact">
35658
<dt> <i>subresolver</i></dt>
35659
<dd><p>Resolver to which unresolved requests should be forwarded. May be ‘<samp>ti</samp>’
35660
as the final resolver of the resolver chain.
35662
<dt> <i>attributes</i> = {<i>keyvalue</i>, <i>keyvalue</i>,...}</dt>
35663
<dd><p>An anonymous table with one or many attributes given as key value pairs,
35664
separated by a comma.
35666
<dt> <i>keyvalue</i> = <area=<i>area_value</i> | render = <i>render_value</i> | kernel = <i>kernel_value</i> | spacing = <i>spacing_value</i> | persistent=<i>persistence</i>></dt>
35667
<dd><p>Values for given keys that may occur in any sequence in the anonymous table.
35669
<dt> <i>area_value</i> = {<<i>rectangular_area</i> | <i>marked_area</i>>}</dt>
35670
<dd><p>The maze area specification, that is either defined as an rectangular area
35671
or an area marked in the world’s map.
35673
<dt> <i>rectangular_area</i> = <i>anchor</i>, <i>width</i>, <i>height</i></dt>
35674
<dd><p>An rectangular area that is given by an anchor position within the world and
35675
two numbers for the width and height measured in maze cells.
35677
<dt> <i>anchor</i></dt>
35678
<dd><p>Anything that is convertible to a <a href="#Position">Position</a> that denotes the upper left
35679
edge of the rectangular maze area. Besides a position value, an object reference
35680
or a name string of an object or position are supported value types.
35682
<dt> <i>marked_area</i></dt>
35683
<dd><p>One or multiple strings separated by a comma as simple entries in the anonymous
35684
table. Every string does either specify a key match, a key prefix or an object
35685
name. All these strings can be used at the same time for marking an area. The
35686
strings can occur in any sequence and multiplicity.
35688
<dt> <i>kernel_value</i> = {kernel_width, kernel_height}</dt>
35689
<dd><p>The size of the kernel of a cell given by width and height in number of grids.
35691
<dt> <i>spacing_value</i> = {spacing_x, spacing_y}</dt>
35692
<dd><p>The distance of the kernel of one cell to its neighbor in x and y direction
35693
measured in number of grids.
35695
<dt> <i>render_value</i> = {<<i>std_renderer_args</i> | <i>other_renderer</i>>}</dt>
35696
<dd><p>The specification for drawing the maze. In case of a missing specification
35697
no drawing will be done at all. If the default standard renderer should be used
35698
its parameters can be directly supplied, other renderers need a type
35699
specification plus the necessary configuration information.
35701
<dt> <i>std_renderer_args</i> = <i>passage_keys</i> [, <<i>wall_key</i> [, <i>kernel_key</i>] | <i>cell_map</i>>]]</dt>
35702
<dd><p>The standard renderer takes info about tile keys to be used for the passages,
35703
and either a cell map, or additional tile keys for the wall and optionally the
35706
<dt> <i>passage_keys</i> = <<i>passage_key</i> | {<i>passage_open</i>, <i>passage_closed</i>}></dt>
35707
<dd><p>Usually you just give a tile key for open maze passages. Closed passages appear
35708
like walls and use the same tile key. But in case you want to use special tile
35709
keys for open and for closed passages you can supply two strings in an
35710
anonymous table. If you give no wall key you may need to include an
35711
‘<samp>st_nil</samp>’ in your open passage tile declaration to kill a wall stone drawn
35714
<dt> <i>wall_key</i></dt>
35715
<dd><p>The tile key to be used for drawing walls. If it is omitted no wall is drawn
35716
and the resolver relies on all possible wall tiles to be drawn by the world
35719
<dt> <i>kernel_key</i></dt>
35720
<dd><p>In most cases the cell kernel will be drawn by the world map. But if not you
35721
can supply a tile key that will be drawn on every cell kernel grid.
35723
<dt> <i>cell_map</i></dt>
35724
<dd><p>Instead of kernel and wall tile keys you can supply a <a href="#libmap">libmap</a> map of a
35725
complete cell. The map can provide arbitrary tiles for cell kernels larger than
35726
a single grid. The walls can differ on the south and east side, too.
35728
<dt> <i>other_renderer</i> = <i>renderer</i> [, <i>other_renderer_args</i>]</dt>
35729
<dd><p>Enlisting of a renderer function followed by its specific arguments.
35731
<dt> <i>renderer</i></dt>
35732
<dd><p>The function that does the rendering. By default it is
35733
‘<samp>lib.maze.renderer_standard</samp>’ with the above given arguments. Other supplied
35734
renderers are ‘<samp>lib.maze.renderer_window</samp>’ and
35735
‘<samp>lib.maze.renderer_strip</samp>’
35736
<a name="index-lib_002emaze_002erenderer_005fstandard"></a>
35737
<a name="index-lib_002emaze_002erenderer_005fwindow"></a>
35738
<a name="index-lib_002emaze_002erenderer_005fstrip"></a>
35741
<dt> <i>persistence</i></dt>
35742
<dd><p>A boolean flag that defaults to ‘<samp>false</samp>’. You need to set it to ‘<samp>true</samp>’
35743
if you want to access the maze or any of its cells after the level
35744
initialization. Otherwise the maze reference handle with all its data may get
35745
invalid due to memory garbage collection. This is no problem for most mazes,
35746
that will be directly rendered and have no need of further evaluation or changes
35752
<dt> <b>Syntax Samples:</b></dt>
35753
<dd><table><tr><td> </td><td><pre class="example">maze1 = res.maze(ti, {area ={"anchor1", 4, 5}, render = {" ", "-", " "}})
35754
maze2 = res.maze(ti, {area ={"."}, kernel={1,1}, render = {"!", "~", "-"}})
35755
maze3 = res.maze(ti, {area ={"amaze#*"}, render = {{".","+"}, "~", "-"}})
35756
maze4 = res.maze(ti, {area ={po(2, 12), 5, 5}, kernel={3,2},
35757
render = {".", wo:newMap(" ", {"!!!~","--!~","~~~~"})}})
35758
</pre></td></tr></table>
35761
<dt> <b>Details:</b></dt>
35762
<dd><p>To be written.
35766
<dt> <b>Full Example:</b></dt>
35771
<a name="res_002epuzzle"></a>
35772
<table cellpadding="1" cellspacing="1" border="0">
35773
<tr><td valign="middle" align="left">[<a href="#res_002emaze" title="Previous section in reading order"> < </a>]</td>
35774
<td valign="middle" align="left">[<a href="#res_002erandom" title="Next section in reading order"> > </a>]</td>
35775
<td valign="middle" align="left"> </td>
35776
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Beginning of this chapter or previous chapter"> << </a>]</td>
35777
<td valign="middle" align="left">[<a href="#Resolvers" title="Up section"> Up </a>]</td>
35778
<td valign="middle" align="left">[<a href="#Extension-Development" title="Next chapter"> >> </a>]</td>
35779
<td valign="middle" align="left"> </td>
35780
<td valign="middle" align="left"> </td>
35781
<td valign="middle" align="left"> </td>
35782
<td valign="middle" align="left"> </td>
35783
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
35784
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
35785
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
35786
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
35788
<a name="res_002epuzzle-1"></a>
35789
<h3 class="subsection">13.1.6 res.puzzle</h3>
35790
<a name="index-res_002epuzzle"></a>
35792
<p>The puzzle resolver helps you to reduce the number of required tile declarations
35793
for clusters of <a href="#st_005fpuzzle">st_puzzle</a> stones. By usage of the ‘<samp>cluster</samp>’ attribute
35794
of <a href="#st_005fpuzzle">st_puzzle</a> you can easily set clusters of fully connected stones. But
35795
for irregular, internally just partial connected puzzles you often need a bunch
35796
of similar tile declarations that differ just in the ‘<samp>connections</samp>’ attribute
35799
<table><tr><td> </td><td><pre class="example">ti["B1"] = {"st_puzzle_blue", cluster=1}
35800
ti["Ba"] = {"st_puzzle_blue", connections="w"}
35801
ti["Bb"] = {"st_puzzle_blue", connections="sw"}
35802
ti["Bd"] = {"st_puzzle_blue", connections="ew"}
35803
ti["Bh"] = {"st_puzzle_blue", connections="n"}
35804
</pre></td></tr></table>
35806
<p>Like <a href="#res_002eautotile">res.autotile</a> this resolver offers autotiling. You just define one
35807
template tile and can use all connections variations
35809
<table><tr><td> </td><td><pre class="example">ti["B"] = {"st_puzzle_blue"}
35810
</pre></td></tr></table>
35812
<p>Additionally this resolver registers every puzzle stone set and allows you to
35813
shuffle the puzzle clusters. You can even select shuffle algorithms and define
35814
accessible sides of a puzzle.
35816
<dl compact="compact">
35817
<dt> <b>Location:</b></dt>
35818
<dd><p>This resolver is part of the library ‘<samp>libpuzzle</samp>’ as of release 3. You can
35819
use it by adding the following dependency to your level <a href="#g_t_003ccompatibility_003e"><compatibility></a>
35821
</p><table><tr><td> </td><td><pre class="example"> <<i>el</i>:<b>dependency</b> <i>el</i>:<b>path</b>="<var>lib/libpuzzle</var>" <i>el</i>:<b>id</b>="<var>lib/libpuzzle</var>" <i>el</i>:<b>release</b>="<var>3</var>" <i>el</i>:<b>preload</b>="<var>true</var>"/>
35822
</pre></td></tr></table>
35825
<dt> <b>Syntax:</b></dt>
35827
<p><b>res.puzzle</b>(<i>subresolver</i>, <i>rules</i>)
35829
<dl compact="compact">
35830
<dt> <i>subresolver</i></dt>
35831
<dd><p>Resolver to which unresolved requests should be forwarded. May be ‘<samp>ti</samp>’
35832
as the final resolver of the resolver chain.
35834
<dt> <i>rules</i> = <i>rule</i>, <i>rule</i>,...</dt>
35835
<dd><p>One rule or as many as you like, all separated by a comma.
35837
<dt> <i>rule</i></dt>
35838
<dd><p>The string of the template tile key that is the common tile key prefix for all
35839
autogenerated tile declarations.
35844
<dt> <b>Syntax Samples:</b></dt>
35845
<dd><table><tr><td> </td><td><pre class="example">res.puzzle(ti, "B", "Y", "I", "M")
35846
</pre></td></tr></table>
35849
<dt> <b>Details:</b></dt>
35850
<dd><p>The puzzle resolver assumes a tile key length of two or more characters. The
35851
given rules are prefix strings which need concat with a one character suffix
35852
to a standard tile key. Given a rule with a proper template rule you can use
35853
any of the following suffices without tile declaration:
35855
<table><tr><td> </td><td><pre class="example"> Suffix Cluster Connections
35857
'0' '5' 0 autoconnect
35858
'1' '6' 1 autoconnect
35859
'2' '7' 2 autoconnect
35860
'3' '8' 3 autoconnect
35861
'4' '9' 4 autoconnect
35862
' ' '+' nil ""
35863
'a' 'A' nil "w"
35864
'b' 'B' nil "s"
35865
'c' 'C' nil "sw"
35866
'd' 'D' nil "e"
35867
'e' 'E' nil "ew"
35868
'f' 'F' nil "es"
35869
'g' 'G' nil "esw"
35870
'h' 'H' nil "n"
35871
'i' 'I' nil "nw"
35872
'j' 'J' nil "ns"
35873
'k' 'K' nil "nsw"
35874
'l' 'L' nil "ne"
35875
'm' 'M' nil "new"
35876
'n' 'N' nil "nes"
35877
'o' 'O' nil "nesw"
35878
'p' 'P' 10 autoconnect
35879
'q' 'Q' 11 autoconnect
35880
'r' 'R' 12 autoconnect
35881
's' 'S' 13 autoconnect
35882
't' 'T' 14 autoconnect
35883
'u' 'U' 15 autoconnect
35884
'v' 'V' 16 autoconnect
35885
'w' 'W' 17 autoconnect
35886
'x' 'X' 18 autoconnect
35887
'y' 'Y' 19 autoconnect
35888
'z' 'Z' 20 autoconnect
35889
</pre></td></tr></table>
35891
<p>All puzzle stones set by this resolver will be registered and shuffled by
35892
default with the ‘<samp>intensity</samp>’ of 3. You can define other intensity attribute
35893
values on any puzzle stone. The maximum intensity of all stones in a cluster
35894
will be taken. The intensity multiplied by the number of stones in a cluster
35895
describes the number of inverse pushes, called pulls, that will be performed
35896
during shuffling. Thus an intensity of 3 on a cluster of 6 stones will perform
35897
18 pulls. That means it is guaranteed that you can solve the puzzle with 18
35898
pushes. But as some pull operations may neutralize the user may be able to
35899
solve such a shuffled puzzle with less than 18 pushes.
35901
<p>If you define no shuffle ‘<samp>algorithm</samp>’ it is assumed that the user can
35902
rotate the puzzle from any side and any <a href="#st_005fpuzzle">st_puzzle</a>. The requested number
35903
of shuffling pull operations will be performed from random puzzle stones in a
35904
manner that guarantees that the user can solve the puzzle if he has free access
35907
<p>If you set the ‘<samp>algorithm</samp>’ on any of the puzzle stones to the value
35908
<code>"marked"</code> the resolver registers that the user has no free access, but
35909
just from positions that you did mark. You do mark a position by setting
35910
the attribute <a href="#push_005fdirections">push_directions</a> on a floor. All floors adjacent to puzzle
35911
stones, including floors beneath another puzzle stone, will be checked for this
35912
attribute. It is your responsibility to mark all floors and to ensure that
35913
the player has continuos access to these foors for solving the puzzle by
35914
push rotations. The attribute takes a string value, a substring of <code>"nesw"</code>.
35915
If it contains the character of the required push direction this push event will
35916
take part in the random reverse shuffling process.
35918
<p>Note that hollow stones and their restriction of not being able to initiate a
35919
rotation if fully respected on shuffling.
35922
<dt> <b>Full Example:</b></dt>
35923
<dd><table><tr><td> </td><td><pre class="example">ti[" "] = {"fl_sahara"}
35924
ti["##"] = {"st_granite"}
35926
ti[".."] = {"fl_sahara", push_directions="nesw"}
35928
ti["B"] = {"st_puzzle_blue"}
35929
ti["Y"] = {"st_puzzle_yellow"}
35930
ti["I"] = {"st_puzzle_blue", intensity=2/6}
35931
ti["M"] = {"st_puzzle_blue", algorithm="marked", intensity=10}
35933
ti["xx"] = {"#ac_marble_black"} ..ti({"it_magicwand"})
35935
local resolver = res.puzzle(ti, "B", "Y", "I", "M")
35937
w, h = wo(resolver, " ", {
35939
"B1B1B1B1 ",
35940
"B2B1BjB1 Y1Y6Y1 ",
35941
"B2B2B2B2 Y1Y1YC ",
35942
" Y6YnY1 ",
35943
" ########## Y1Y1Y1 ",
35944
" ##M1M1M1## ",
35945
" I1I1 ##M1McM1.. ",
35946
" I6Ia ..M1M1M1.. xx ",
35947
" I1I1 ....#### ",
35952
</pre></td></tr></table>
35959
<a name="res_002erandom"></a>
35960
<table cellpadding="1" cellspacing="1" border="0">
35961
<tr><td valign="middle" align="left">[<a href="#res_002epuzzle" title="Previous section in reading order"> < </a>]</td>
35962
<td valign="middle" align="left">[<a href="#res_002etrain" title="Next section in reading order"> > </a>]</td>
35963
<td valign="middle" align="left"> </td>
35964
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Beginning of this chapter or previous chapter"> << </a>]</td>
35965
<td valign="middle" align="left">[<a href="#Resolvers" title="Up section"> Up </a>]</td>
35966
<td valign="middle" align="left">[<a href="#Extension-Development" title="Next chapter"> >> </a>]</td>
35967
<td valign="middle" align="left"> </td>
35968
<td valign="middle" align="left"> </td>
35969
<td valign="middle" align="left"> </td>
35970
<td valign="middle" align="left"> </td>
35971
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
35972
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
35973
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
35974
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
35976
<a name="res_002erandom-1"></a>
35977
<h3 class="subsection">13.1.7 res.random</h3>
35978
<a name="index-res_002erandom"></a>
35980
<p>With map based level description you have explicit control about the objects
35981
being set on every single grid. But sometimes you may want to introduce some
35982
randomness in the used objects. E.g. a floor may be made up of two types at
35983
random to generate a different look on every level start. The randomness would
35984
even make a level more difficult to play if one of the two floors would
35985
invert the mouse forces. The random resolver allows you to set up such
35988
<dl compact="compact">
35989
<dt> <b>Syntax:</b></dt>
35991
<p><b>res.random</b>(<i>subresolver</i>, <i>hits</i>, <i>replacements</i>)
35993
<dl compact="compact">
35994
<dt> <i>subresolver</i></dt>
35995
<dd><p>Resolver to which unresolved requests should be forwarded. May be ‘<samp>ti</samp>’
35996
as the final resolver of the resolver chain.
35998
<dt> <i>hits</i> = <i>key</i> | {<i>hit</i>, <i>hit</i>, ...}</dt>
35999
<dd><p>Either a single tile key string that defines the tiles to be randomized, or a
36000
table of hit descriptors that should all be examined in parallel.
36002
<dt> <i>hit</i> = <i>key</i> | {<i>key</i>, <i>superkey</i>}</dt>
36003
<dd><p>Either a single tile key string or a pair of tile key string and a related
36004
tile superkey string. The superkey tile will be set additionally to the random
36007
<dt> <i>replacements</i> = <i>key</i> | {<i>replacement</i>, <i>replacement</i>, ...}</dt>
36008
<dd><p>Either a single tile key string that would be taken without randomness or as in
36009
most cases a table of replacement descriptors from which the resulting tile
36010
should be selected with randomness.
36012
<dt> <i>replacement</i> = <i>key</i> | {<i>key</i>, <i>frequency</i>}</dt>
36013
<dd><p>Either a single tile key string that should be taken with a frequency of ‘<samp>1</samp>’,
36014
or a pair of a tile key string with a given frequency number. The frequency can
36015
be an integer or non-integer number, but must be positive or zero.
36020
<dt> <b>Syntax Samples:</b></dt>
36021
<dd><table><tr><td> </td><td><pre class="example">res.random(ti, "x", {"a", "b"})
36022
res.random(ti, {{"x", "y"},{"i","j"}}, {{"a", 2}, {"b", 1}})
36023
</pre></td></tr></table>
36026
<dt> <b>Details:</b></dt>
36027
<dd><p>Every key in the map is checked against the given hit key strings. If it fits
36028
one of them a replacement will take place.
36030
<p>The replacement will be one of the replacement tile keys resolved via the
36031
subresolver. The different keys will be chosen with a likelihood according to
36032
the ratio of the given frequency numbers. If no frequency is supplied a default
36033
of ‘<samp>1</samp>’ is taken. Thus in the first example both keys are taken in a ratio
36034
1:1, whereas in the second the ratio will be 2:1.
36036
<p>When a superkey is given for a hit key this superkey will additionally be
36037
resolved via the subresolver. This feature allows to use randomness on tiles
36038
with more than one object on a grid position. E.g. an item or an actor on a
36039
random floor. The other objects can be set via the superkey while the random
36040
floor is set according to the replacement rules.
36043
<dt> <b>Full Example:</b></dt>
36044
<dd><table><tr><td> </td><td><pre class="example">ti["~"] = {"fl_water"}
36045
ti["s"] = {"fl_sahara"}
36046
ti["t"] = {"fl_tigris"}
36047
ti["i"] = {"fl_inverse_gray"}
36048
ti["b"] = {"fl_yinyang_yin"}
36049
ti["w"] = {"fl_yinyang_yang"}
36051
ti["c"] = {"it_coin_s"}
36052
ti["p"] = {"it_brush"}
36054
ti["1"] = {"ac_marble_black", 0, 0.5}
36056
simple_random = res.random(ti, " ", {"s", "t"})
36058
full_random = res.random(simple_random, {".",{"C","c"},{"p","p"}},
36059
{{"i",3},{"b",4},{"w",1}})
36061
w, h = wo(full_random, "s", {
36062
" ~~.........",
36063
" ~~.........",
36064
" ~~......C..",
36065
" ~~.........",
36066
" ~~.........",
36067
" ~~.........",
36068
" c1.........",
36069
" ~~.........",
36070
" ~~.........",
36071
" ~~.........",
36072
" ~~......p..",
36073
" ~~.........",
36074
" ~~........."
36076
</pre></td></tr></table>
36078
<p>Note that in this example we can use ‘<samp>p</samp>’ as key as well as superkey. This
36079
is due to the fact that nowhere else this tile is directly set. Whereas the
36080
tile key ‘<samp>c</samp>’ is used for another tile with the default floor. Thus we do
36081
need to use another unique key ‘<samp>C</samp>’ for the coin on our random floor.
36087
<a name="res_002etrain"></a>
36088
<table cellpadding="1" cellspacing="1" border="0">
36089
<tr><td valign="middle" align="left">[<a href="#res_002erandom" title="Previous section in reading order"> < </a>]</td>
36090
<td valign="middle" align="left">[<a href="#General-Features" title="Next section in reading order"> > </a>]</td>
36091
<td valign="middle" align="left"> </td>
36092
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Beginning of this chapter or previous chapter"> << </a>]</td>
36093
<td valign="middle" align="left">[<a href="#Resolvers" title="Up section"> Up </a>]</td>
36094
<td valign="middle" align="left">[<a href="#Extension-Development" title="Next chapter"> >> </a>]</td>
36095
<td valign="middle" align="left"> </td>
36096
<td valign="middle" align="left"> </td>
36097
<td valign="middle" align="left"> </td>
36098
<td valign="middle" align="left"> </td>
36099
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
36100
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
36101
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
36102
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
36104
<a name="res_002etrain-1"></a>
36105
<h3 class="subsection">13.1.8 res.train</h3>
36106
<a name="index-res_002etrain"></a>
36108
<p>The train resolver supports you in the set up of train like wandering floor
36109
chains. Usually short passages of solid standard floors wander on a closed
36110
path of otherwise unpassable floors like <a href="#fl_005fabyss">fl_abyss</a> or <a href="#fl_005fwater">fl_water</a>.
36112
<p>The path itself is called railway, even though the name train does not really
36113
fit the features of the wandering floor chains. But these names have been
36114
chosen by Petr Machata in his first implementation of a simple wandering floor
36117
<p>In contrast to real world train, the wandering floors themselves do not move at
36118
all. Thus they do neither carry items or stones, nor do they allow an actor to
36119
rest on them and to be automatically transported along the path. The train
36120
is more like a curb wheel of a trunk. New floors are added to the front while
36121
trailing floors are removed.
36123
<p>Actually a chain of floors is composed of two train locos which move along the
36124
railway path. One at the front that sets floor of the standard passable kind and
36125
one at the end, or exactly one grid behind the end, that resets floor of the
36126
unpassable floor kind.
36128
<p>Usually both train locos move at the same speed keeping the passable floor
36129
chain length constant. But this resolver allows you to set up arbitrary
36130
number of train locos moving in arbitrary direction at arbitrary speed on a
36131
railway. But the resulting floor patterns will likely no longer behave like
36132
trains. Nevertheless we keep the name.
36134
<p>Every railway path has to be described by a chained train resolver instance. The
36135
paths of different resolvers may cross each other, but crossing trains may cause
36136
unexpected results as the train locos just set floors without any respect to
36137
other trains. In future it is planned to add track and train line attributes,
36138
which will allow even more complex railways.
36140
<dl compact="compact">
36141
<dt> <b>Syntax:</b></dt>
36143
<p><b>res.train</b>(<i>subresolver</i>[, <i>suffix</i>][, <i>hits</i>])
36145
<dl compact="compact">
36146
<dt> <i>subresolver</i></dt>
36147
<dd><p>Resolver to which unresolved requests should be forwarded. May be ‘<samp>ti</samp>’
36148
as the final resolver of the resolver chain.
36150
<dt> <i>suffix</i></dt>
36151
<dd><p>An optional key suffix string. Every grid position with a matching key is
36152
registered as part of the railway path.
36154
<dt> <i>hits</i> = <i>hit</i>, <i>hit</i>, ...</dt>
36155
<dd><p>One or many resolver key hits that will identify positions of the railway path
36156
with optional trains located on them.
36158
<dt> <i>hit</i> = <i>key</i> | {<i>key</i> [, <i>subkey</i>][, edge=<i>edgevalue</i>][, train=<i>trainvalue</i>]}</dt>
36159
<dd><p>Either a single tile key string or a table of a tile key string with an optional
36160
related tile subkey string and optional further arguments.
36162
<dt> <i>edgevalue</i></dt>
36163
<dd><p>A railway position that marks one of two edges spanning a rectangular railway
36166
<dt> <i>trainvalue</i> = {<i>successorkey</i> [, <i>predecessorkey</i>] [, length=<i>trainlength</i>] [, orientation=<i>traveldirection</i>] [, interval=<i>speed</i>] [, name=<i>namevalue</i>]}</dt>
36167
<dd><p>A train loco that moves with the given speed interval, defaulting to 0.25
36168
seconds per grid, and starting into the given traveldirection. The loco sets
36169
floors given by the sucessorkey string that will be resolved via the subresolver.
36170
If a trainlength is given, a second train loco is automatically created that
36171
preceeds this one by the given length. This front train loco will set floors
36172
defined by the predecessorkey string. If the train loco has an assigned name
36173
string, the front train loco will be named with an appended <code>"_front"</code>.
36178
<dt> <b>Syntax Samples:</b></dt>
36179
<dd><table><tr><td> </td><td><pre class="example">res.train(ti, ".", {" ^", train={" ~", " w", orientation=NORTH, length=6, interval=0.3}})
36180
res.train(ti, {"e", edge=true}, {">", train={" w", orientation=EAST}}, {"<", train={"~", orientation=WEST}})
36181
</pre></td></tr></table>
36184
<dt> <b>Details:</b></dt>
36185
<dd><p>Every key in the map is checked against the given hit key strings. If it fits
36186
one of them the positition is added to the railway path and the subkey is used
36187
to set remaining objects via the subresolver onto the grid. If no subkey is
36188
given no additional objects are set.
36190
<p>If the key is no hit, but a suffix string is given and matches the key, the
36191
position will be registered as part of the railway path, too. In this case
36192
the suffix part of the key will be replaced by space characters and the
36193
resulting key will be resolved via the subresolver.
36195
<p>There is no need of marking every grid position of a railway, what would be a
36196
very annoying task if many stones and items are positioned on its path. By
36197
default every train moves straight forward. You just need to provide hints for
36198
positions where the train turns left or right. Marking the positions of the path
36199
that follow every turn is sufficient.
36203
<dt> <b>Full Example:</b></dt>
36204
<dd><table><tr><td> </td><td><pre class="example">ti[" "] = {"fl_sahara"}
36205
ti[" ~"] = {"fl_water"}
36206
ti[" w"] = {"fl_wood"}
36207
ti["# "] = {"st_rawglass"}
36208
ti[" @"] = {"#ac_marble"}
36210
railway1 = res.train(ti, ".", {"1^", train={" ~", " w", orientation=NORTH, length=6}})
36211
railway2 = res.train(railway1, {"2e", edge=true}, {"2^", train={" ~", " w", orientation=NORTH, length=5}})
36213
wo(railway2, " ", {
36222
" # #. 2^ ",
36228
</pre></td></tr></table>
36229
<p>The first railway has just marked the essential positions that define the
36236
<a name="General-Features"></a>
36237
<table cellpadding="1" cellspacing="1" border="0">
36238
<tr><td valign="middle" align="left">[<a href="#res_002etrain" title="Previous section in reading order"> < </a>]</td>
36239
<td valign="middle" align="left">[<a href="#Display-Follow-Strategy" title="Next section in reading order"> > </a>]</td>
36240
<td valign="middle" align="left"> </td>
36241
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Beginning of this chapter or previous chapter"> << </a>]</td>
36242
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Up section"> Up </a>]</td>
36243
<td valign="middle" align="left">[<a href="#Extension-Development" title="Next chapter"> >> </a>]</td>
36244
<td valign="middle" align="left"> </td>
36245
<td valign="middle" align="left"> </td>
36246
<td valign="middle" align="left"> </td>
36247
<td valign="middle" align="left"> </td>
36248
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
36249
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
36250
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
36251
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
36253
<a name="General-Features-1"></a>
36254
<h2 class="section">13.2 General Features</h2>
36256
<table class="menu" border="0" cellspacing="0">
36257
<tr><td align="left" valign="top"><a href="#Display-Follow-Strategy">13.2.1 Display Follow Strategy</a></td><td> </td><td align="left" valign="top"> How the display view follows the active marble
36259
<tr><td align="left" valign="top"><a href="#Flood-Spreading">13.2.2 Flood Spreading</a></td><td> </td><td align="left" valign="top"> How a water flood spreads over a given area
36261
<tr><td align="left" valign="top"><a href="#Fire-Spreading">13.2.3 Fire Spreading</a></td><td> </td><td align="left" valign="top"> How to start, use, and stop fire.
36263
<tr><td align="left" valign="top"><a href="#Heat_002dTransformation">13.2.4 Heat-Transformation</a></td><td> </td><td align="left" valign="top"> How some floors transform when a fire starts nearby.
36265
<tr><td align="left" valign="top"><a href="#Freeze-Checking">13.2.5 Freeze Checking</a></td><td> </td><td align="left" valign="top"> How to turn frozen boxes in a Sokoban to st_death.
36270
<a name="Display-Follow-Strategy"></a>
36271
<table cellpadding="1" cellspacing="1" border="0">
36272
<tr><td valign="middle" align="left">[<a href="#General-Features" title="Previous section in reading order"> < </a>]</td>
36273
<td valign="middle" align="left">[<a href="#Flood-Spreading" title="Next section in reading order"> > </a>]</td>
36274
<td valign="middle" align="left"> </td>
36275
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Beginning of this chapter or previous chapter"> << </a>]</td>
36276
<td valign="middle" align="left">[<a href="#General-Features" title="Up section"> Up </a>]</td>
36277
<td valign="middle" align="left">[<a href="#Extension-Development" title="Next chapter"> >> </a>]</td>
36278
<td valign="middle" align="left"> </td>
36279
<td valign="middle" align="left"> </td>
36280
<td valign="middle" align="left"> </td>
36281
<td valign="middle" align="left"> </td>
36282
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
36283
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
36284
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
36285
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
36287
<a name="Display-Follow-Strategy-1"></a>
36288
<h3 class="subsection">13.2.1 Display Follow Strategy</h3>
36290
<p>As the world can be larger than a display screen the active marble can move
36291
out of the area that is visible at level start. Somehow the display has to
36292
follow the active marble.
36294
<p>Whereas prior Enigma versions did provide just a handful of fixed modes, future
36295
versions will give you a much more detailed control of the display following
36296
strategy. We decided to switch the configuration to the future parameters
36297
already now. This allows us to give you some more follower control, even though
36298
some attributes are still limited in their values.
36300
<p>The strategy is described by the following parameters.
36302
<dl compact="compact">
36303
<dt> <b>Attributes:</b></dt>
36305
<dl compact="compact">
36306
<dt> <a href="#FollowGrid">FollowGrid</a></dt>
36307
<dt> <a href="#FollowMethod">FollowMethod</a></dt>
36308
<dt> <a href="#FollowThreshold">FollowThreshold</a></dt>
36309
<dt> <a href="#FollowAction">FollowAction</a></dt>
36313
<dt> <b>Syntax Samples:</b></dt>
36314
<dd><table><tr><td> </td><td><pre class="example">wo["FollowGrid"] = true
36315
wo["FollowMethod"] = FOLLOW_SCROLL
36316
</pre></td></tr></table>
36319
<dt> <b>Details:</b></dt>
36320
<dd><p>The attributes should always be set in the sequence as given above. This is due
36321
to the fact that the first attributes may reset some of the later attributes
36322
to matching defaults. This way you will have to set just a two attributes for
36323
the most common cases.
36325
<p>You can set the display follow strategy at any point. You are even allowed to
36326
switch the strategy during the running game.
36329
<dt> <b>Valid Configurations as of Enigma 1.10:</b></dt>
36331
<dl compact="compact">
36332
<dt> <b>Screen Flipping:</b></dt>
36333
<dd><table><tr><td> </td><td><pre class="example">wo["FollowGrid"] = true
36334
wo["FollowMethod"] = FOLLOW_FLIP
36335
</pre></td></tr></table>
36336
<p>The default strategy. The screen flips as soon as the marble reaches the outer
36337
half of the boundary grid tile. The screen moves by a full screen minus the
36338
common tile row or column.
36341
<dt> <b>Half Screen Scrolling:</b></dt>
36342
<dd><table><tr><td> </td><td><pre class="example">wo["FollowGrid"] = true
36343
wo["FollowMethod"] = FOLLOW_SCROLL
36344
wo["FollowAction"] = FOLLOW_HALFSCREEN
36345
</pre></td></tr></table>
36346
<p>As soon as the marble reaches the outer half of the boundary grid tile the
36347
display scrolls pixel by pixel by half a screen. It realigns to the grid. As
36348
on a standard sized screen the display would have to scroll 9.5 grids in
36349
horizontal direction such scrolls will alternate in scrolls of 9 and 10 grids.
36350
The follower will try to stabilize the reachable scroll positions.
36353
<dt> <b>Permanent Smooth Scrolling:</b></dt>
36354
<dd><table><tr><td> </td><td><pre class="example">wo["FollowGrid"] = false
36355
wo["FollowMethod"] = FOLLOW_SCROLL
36356
</pre></td></tr></table>
36357
<p>The active actor will always stay in the center of the screen. The display
36358
compensates the actor’s movement pixel by pixel by scrolling. The display
36359
positions are not aligned to grid tiles.
36362
<dt> <b>Full Screen Scrolling:</b></dt>
36363
<dd><table><tr><td> </td><td><pre class="example">wo["FollowGrid"] = true
36364
wo["FollowMethod"] = FOLLOW_SCROLL
36365
wo["FollowAction"] = FOLLOW_FULLSCREEN
36366
</pre></td></tr></table>
36367
<p>As soon as the marble reaches the outer half of the boundary grid tile the
36368
display scrolls pixel by pixel by a full screen minus the common tile row or
36372
<dt> <b>No Screen Scrolling:</b></dt>
36373
<dd><table><tr><td> </td><td><pre class="example">wo["FollowMethod"] = FOLLOW_NO
36374
</pre></td></tr></table>
36375
<p>No scrolling at all. Even if the active actor moves out of sight the display
36376
remains at its position.
36379
<dt> <b>Screen Flipping at a given threshold:</b></dt>
36380
<dd><table><tr><td> </td><td><pre class="example">wo["FollowGrid"] = true
36381
wo["FollowMethod"] = FOLLOW_FLIP
36382
wo["FollowThreshold"] = po(2.5, 1.5)
36383
</pre></td></tr></table>
36384
<p>The screen flips as soon as the marble reaches the given distance to the screen
36385
boundary. The screen moves by a full screen minus twice the threshold distance.
36386
The final display realigns to the grid even on odd threshold distances.
36389
<dt> <b>Full Screen Scrolling at a given threshold:</b></dt>
36390
<dd><table><tr><td> </td><td><pre class="example">wo["FollowGrid"] = true
36391
wo["FollowMethod"] = FOLLOW_SCROLL
36392
wo["FollowThreshold"] = po(2.5, 1.5)
36393
</pre></td></tr></table>
36394
<p>The screen scrolls as soon as the marble reaches the given distance to the screen
36395
boundary. The screen moves by a full screen minus twice the threshold distance.
36396
The final display realigns to the grid even on odd threshold distances.
36404
<a name="Flood-Spreading"></a>
36405
<table cellpadding="1" cellspacing="1" border="0">
36406
<tr><td valign="middle" align="left">[<a href="#Display-Follow-Strategy" title="Previous section in reading order"> < </a>]</td>
36407
<td valign="middle" align="left">[<a href="#Fire-Spreading" title="Next section in reading order"> > </a>]</td>
36408
<td valign="middle" align="left"> </td>
36409
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Beginning of this chapter or previous chapter"> << </a>]</td>
36410
<td valign="middle" align="left">[<a href="#General-Features" title="Up section"> Up </a>]</td>
36411
<td valign="middle" align="left">[<a href="#Extension-Development" title="Next chapter"> >> </a>]</td>
36412
<td valign="middle" align="left"> </td>
36413
<td valign="middle" align="left"> </td>
36414
<td valign="middle" align="left"> </td>
36415
<td valign="middle" align="left"> </td>
36416
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
36417
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
36418
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
36419
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
36421
<a name="Flood-Spreading-1"></a>
36422
<h3 class="subsection">13.2.2 Flood Spreading</h3>
36423
<a name="index-flood"></a>
36425
<p>A flood is active <a href="#fl_005fwater">fl_water</a> that, originating from a source, spreads over
36426
<a href="#floodable">floodable</a> areas. In contrast to a flood standard water is just static,
36427
its ‘<samp>state</samp>’ is ‘<samp>IDLE</samp>’ and it will not spread to adjacent floors. But
36428
a flood reaching a static water lake will cross it as a tsunami and continue
36429
actively spreading on all riparian zones.
36431
<p>You set up the area by adding the attribute <a href="#floodable">floodable</a> with value
36432
<code>true</code> on all its floors. Just <a href="#fl_005fwater">fl_water</a> and the framed variants of
36433
<a href="#fl_005fwood">fl_wood</a>, <a href="#fl_005fhay">fl_hay</a> and <a href="#fl_005frock">fl_rock</a> do not require to be explicitly
36434
marked floodable as they are floodable by default. The marked area is the
36435
maximum area that may be flooded. But obstacles may block the flood temporarily
36438
<p>A flood starts at a source. As soon as you add a ‘<samp>fl_water_source</samp>’ or set
36439
the ‘<samp>state</samp>’ to ‘<samp>FLOODING</samp>’, the <a href="#fl_005fwater">fl_water</a> starts to spread to
36440
floodable neighboring grids with a speed defined by the attribute
36441
‘<samp>interval</samp>’. The speed will be inherited to floors flooded by the stream.
36443
<p>Floodable floors with solid stones, closed doors or <a href="#st_005fwindow">st_window</a> with
36444
blocking faces on top will keep the flood from spreading to their grid position
36445
or if already flooded to spread to a neighboring grid. But as soon as the
36446
obstacle vanishes, e.g. an <a href="#st_005fdoor">st_door</a> opens, the flood continues to spread.
36447
Hollow stones, especially <a href="#st_005foneway">st_oneway</a> do not block flood streams, totally
36448
independent of actor blocking features on certain types or faces.
36450
<p>Of special interest are the <a href="#st_005fbox">st_box</a> variants and their successor floors,
36451
the framed variants of <a href="#fl_005fwood">fl_wood</a>, <a href="#fl_005fhay">fl_hay</a> and <a href="#fl_005frock">fl_rock</a>. A flood
36452
will flow beneath a box stone, if the floor beneath is floodable. In consequence
36453
of the upcoming water, the box stone will fall and build a framed floor of the
36454
given kind. These floors act like bridges over flooding water. They still let
36455
the flood spread to further neighboring floodable floors. Thus a user can not
36456
stop a flood by pushing an <a href="#st_005fbox">st_box</a> onto its path, but he can make the water
36457
passable for his marbles. In fact this framed floors can even operate as a flood
36458
source, but we do not recommend this usage.
36460
<p>In contrast to these floor building stones the <a href="#st_005fpuzzle">st_puzzle</a> does neither
36461
fall on static nor on flooding <a href="#fl_005fwater">fl_water</a>. As a solid stone it will even
36462
block a flood on neighboring grids to reach its position. But of course once
36463
moved completely over <a href="#fl_005fwater">fl_water</a> the puzzle will fall if its own conditions
36464
are met. The successor <a href="#fl_005fgray">fl_gray</a> will not build a bridge over water. It
36465
fills up the ditch and replaces the water completely. Thus the user can use
36466
puzzles to stop a flood.
36468
<p>When a flood stream spreads to a new floor items on these floors may be affected.
36469
E.g. <a href="#it_005fcrack">it_crack</a> get flooded and do vanish. All <a href="#it_005fburnable">it_burnable</a> besides oil
36470
get wiped out, too.
36472
<p>Further active components of the flood concept are <a href="#it_005fvortex">it_vortex</a> and
36473
<a href="#it_005fwormhole">it_wormhole</a>. Besides actors both do spread a flood. The <a href="#it_005fwormhole">it_wormhole</a>
36474
spreads the flood to its ‘<samp>destination</samp>’ if the floor at this grid is marked
36475
‘<samp>floodable</samp>’. An <a href="#it_005fvortex">it_vortex</a> will flood all its ‘<samp>destination</samp>’s,
36476
but of course just if it is in state ‘<samp>OPEN</samp>’. In case the destinations are
36477
vortices, too, they must be open, too, for a successful flood spreading. When the
36478
last closed vortex on either end opens again the hold flood continues to spread.
36479
Note that in these cases the flood reaches the destination grid from beneath.
36480
Thus no stone will block the emerging water. But nevertheless a stone on the
36481
destination position may well block the water from spreading to the neighboring
36484
<p>Be aware that the Enigma flood has some extraordinary features. The most
36485
important is the ability to spread unlimitedly from every grid that got flooded,
36486
independently of a still existing connection to the flood source. Thus once a
36487
door is opened and a bit of the flood passes the door, the flood will continue
36488
to spread even if the door closes again. Same is true for toggling vortices or
36489
puzzle stones being pushed into a flood building a complete bridge over the
36490
water stream. But this feature is intentionally, as it avoids many shortcut
36491
situations and thus makes the flood more usable for level authors.
36494
<a name="Fire-Spreading"></a>
36495
<table cellpadding="1" cellspacing="1" border="0">
36496
<tr><td valign="middle" align="left">[<a href="#Flood-Spreading" title="Previous section in reading order"> < </a>]</td>
36497
<td valign="middle" align="left">[<a href="#Heat_002dTransformation" title="Next section in reading order"> > </a>]</td>
36498
<td valign="middle" align="left"> </td>
36499
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Beginning of this chapter or previous chapter"> << </a>]</td>
36500
<td valign="middle" align="left">[<a href="#General-Features" title="Up section"> Up </a>]</td>
36501
<td valign="middle" align="left">[<a href="#Extension-Development" title="Next chapter"> >> </a>]</td>
36502
<td valign="middle" align="left"> </td>
36503
<td valign="middle" align="left"> </td>
36504
<td valign="middle" align="left"> </td>
36505
<td valign="middle" align="left"> </td>
36506
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
36507
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
36508
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
36509
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
36511
<a name="Fire-Spreading-1"></a>
36512
<h3 class="subsection">13.2.3 Fire Spreading</h3>
36514
<p>The 1.0-version of Enigma introduced a new fire system, making use of
36515
attributes and messages of the floor tiles. The default fire, once
36516
ignited, spreads over the landscape and destroys items, marbles and
36517
some stones. It spreads along those floor tiles that are marked “burnable” by
36518
default (like <a href="#fl_005fhay">fl_hay</a> or <a href="#fl_005fwood">fl_wood</a>), by attribute (see attribute
36519
<a href="#burnable">burnable</a>), or by one of two items that indicate burnability: the invisible
36520
<a href="#it_005fburnable">it_burnable</a> and the visible <code>it_burnable_oil</code>. On a burning floor,
36521
all items are destroyed. However, some items prevent the floor from burning,
36522
like <a href="#it_005fmeditation">it_meditation</a> or <a href="#it_005fdynamite">it_dynamite</a> (which ignites instead).
36524
<p>Fire can be ignited in several standard ways:
36526
<li> The <code>setfire</code>-message sets fire to a floor if it is
36527
burnable and the item on it allows it to burn; non-burnable items like
36528
<a href="#it_005fdynamite">it_dynamite</a> are not ignited by this.
36529
</li><li> The <code>heat</code>-message ignites burnable floors as does
36530
<code>setfire</code>, but also initiates a <a href="#Heat_002dTransformation">Heat-Transformation</a> of the floor
36531
and ignites items on it.
36532
</li><li> The <code>ignite</code> and <code>explosion</code>-messages that are used by
36533
<a href="#it_005fdynamite">it_dynamite</a> and <a href="#it_005fbomb">it_bomb</a> can initiate fire via
36534
<a href="#it_005fburnable">it_burnable</a>[_oil] or if the
36535
<a href="#ignitable">ignitable</a>-attribute of the floor is set (off by default).
36536
</li><li> The floor already starts burning on initialization when the
36537
<code>initfire</code>-attribute is set (off by default).
36538
</li><li> Fire in the neighborhood, see below.
36541
<p>If needed, the <code>forcefire</code>-message can be used to set fire to
36542
non-burnable floors. Internally, it is equivalent to manually setting
36543
<code>it_burnable_ignited</code>; however, setting <code>it_burnable_ignited</code>
36544
manually is deprecated to allow a further development of the fire-system in
36547
<p>Fire does the following:
36549
<li> It kills <a href="#st_005fbox">st_box</a>_wood, <a href="#st_005fbox">st_box</a>_hay, and <a href="#st_005fflat">st_flat</a>_moveburnable
36550
above it, and <a href="#st_005fflat">st_flat</a>_burnable beneath it.
36551
</li><li> It melts <a href="#st_005fice">st_ice</a> to <a href="#fl_005fwater">fl_water</a>.
36552
</li><li> It heats its neighboring tiles, which might result in a
36553
<a href="#Heat_002dTransformation">Heat-Transformation</a> of the floor.
36554
</li><li> It might ignite or destroy items on its neighbor, this concerns
36555
<a href="#it_005fdynamite">it_dynamite</a>, both <a href="#it_005fbomb">it_bomb</a>, and <a href="#it_005fcrack">it_crack</a>.
36556
</li><li> It might set fire to its neighbor.
36557
</li><li> It shatters marbles that are not protected with <a href="#it_005fumbrella">it_umbrella</a> or other
36558
measures. Note that in future versions, jumping over fire with <a href="#it_005fspring">it_spring</a>
36562
<p>Fire stops burning after a random amount of time, as long as the
36563
<code>eternal</code>-attribute of the floor is not set. When it stops
36564
burning, it might replace the floor by another kind
36565
(“fire-transform”), this is: <a href="#fl_005fwood">fl_wood</a> is replaced by
36566
<a href="#fl_005fabyss">fl_abyss</a>, <a href="#fl_005flawn">fl_lawn</a> by <a href="#fl_005fdunes">fl_dunes</a>. Finally, it
36567
puts <a href="#it_005fburnable">it_burnable</a>_ash on the floor, which prohibits a second
36568
fire and which can be removed with <a href="#it_005fbrush">it_brush</a>. However, ash is not
36569
set if the <a href="#noash">noash</a>-attribute is set (default only for <a href="#fl_005fabyss">fl_abyss</a>).
36571
<p>Since the spreading of fire is a random event, in 0.92, a level author couldn’t
36572
be sure that a particular item was ignited or fire was set. Since 1.0, these can
36573
be assured by setting the <a href="#secure">secure</a>-attribute: When a burnable floor with
36574
<code>secure = true</code> is near fire, it will eventually catch fire, items on it
36575
are ignited, etc. <code>secure</code> is <code>false</code> by default.
36577
<p>In 0.92, there were two speeds of fire: When using <a href="#it_005fburnable">it_burnable</a>,
36578
fire spread much faster than without. This is still the same in
36579
1.0 and above. However, you can set the <a href="#fastfire">fastfire</a>-attribute to hasten
36580
the fire without setting the invisible <a href="#it_005fburnable">it_burnable</a>, this should be the
36583
<p>Fire that burns under a stone is not allowed to spread; the only exceptions are
36584
floating stones like <a href="#st_005fgrate">st_grate</a>, and those stones that are destroyed by fire
36585
anyway (<a href="#st_005fbox">st_box</a>_wood, <a href="#st_005fbox">st_box</a>_hay, <a href="#st_005fflat">st_flat</a>_burnable,
36586
<a href="#st_005fflat">st_flat</a>_moveburnable). In contrast to this, fire might also spread to
36587
under a movable stone, but not further.
36589
<p>You can stop fire with <code>it_extinguisher</code>, which creates the fireproof
36590
<code>it_burnable_fireproof</code>. Another way to stop fire is to push the totally
36591
inert <a href="#st_005fbox">st_box</a>_rock over it: This is the only movable stone that doesn’t
36592
allow fire under it. A final way to stop fire is to send the
36593
<code>stopfire</code>-message to a floor.
36595
<p><strong>Differences between 1.0 and 0.92</strong>
36597
<p>The old fire system of Enigma versions up to 0.92, differs from
36598
the 1.0 and above version mainly in the following points:
36601
<li> no fire-transform except <a href="#fl_005fwood">fl_wood</a> to <a href="#fl_005fabyss">fl_abyss</a>
36602
</li><li> no <a href="#Heat_002dTransformation">Heat-Transformation</a>s
36603
</li><li> ash on <a href="#fl_005fabyss">fl_abyss</a>
36604
</li><li> no difference between different floors
36605
</li><li> replication via same-floor-pattern instead of
36606
burnable-floor-pattern: 0.92 didn’t distinguish between burnable and
36607
non-burnable floors. Instead, fire was allowed to spread to floors of
36608
the same kind slowly.
36609
</li><li> burnable items always catch fire: In 1.0 and above, a burnable item
36610
(except for <a href="#it_005fburnable">it_burnable</a>[_oil]) on a non-burnable floor won’t catch fire,
36614
<p>A good model of the 0.92-system can be attained via the
36615
compatibility-modes: All non-Enigma-modes (see section <a href="#Engine-Compatibility">Engine Compatibility</a> and
36616
<a href="#g_t_003ccompatibility_003e"><compatibility></a>) feature a version which only marginally differs from
36617
0.92-fire, yet allowing some of the new achievements, like secure- or
36620
<p>Note that in 0.92, fire-transformation happened at the beginning of
36621
the fire, which manifested in the so called “burning-abyss”-bug.
36622
Besides other details, this is how the original 0.92 system differs from the
36623
one in 1.0-non-Enigma-mode.
36625
<p><strong>Burnable and Fireproof Floors</strong>
36627
<p>All floors that look like plastic, fabrics, or organics are burnable by default:
36628
<code>fl_adhesionless, fl_aquamarine, fl_bluegray, fl_bluegreen, fl_blueslab,
36629
fl_fake_trigger, fl_hay, fl_ivory, fl_marble, fl_platinum, fl_red, fl_redslab,
36630
fl_rough*, fl_tigris, fl_woven</code>.
36632
<p>All floors that look like wood are burnable and leave <a href="#fl_005fabyss">fl_abyss</a> behind:
36633
<code>fl_bast, fl_plank, fl_samba*, fl_wood*</code>, and <a href="#fl_005fbridge">fl_bridge</a>_b*.
36635
<p>All floors that look like grass are burnable and leave <a href="#fl_005fdunes">fl_dunes</a> behind:
36636
<a href="#fl_005flawn">fl_lawn</a>.
36638
<p>All other floors are fireproof (they don’t burn by default):
36639
<code>fl_abyss*, fl_brick, fl_bright, fl_concrete, fl_dark, fl_darkgray,
36640
fl_dummy, fl_dunes, fl_gravel, fl_gray, fl_himalaya, fl_ice, fl_inverse*,
36641
fl_metal*, fl_mortar, fl_pinkbumps, fl_rock, fl_sahara, fl_sand, fl_slope*,
36642
fl_space, fl_stone, fl_swamp, fl_water, fl_white, fl_yinyang*</code>, and
36643
<a href="#fl_005fbridge">fl_bridge</a>_g*.
36645
<p>An open <a href="#fl_005fbridge">fl_bridge</a> is never burnable, this overrides all items and
36646
attributes. A closed <a href="#fl_005fbridge">fl_bridge</a> is burnable if and only if it is brown,
36647
but this can be changed via attribute <code>burnable</code>. Note that changing the
36648
flavor of <a href="#fl_005fbridge">fl_bridge</a> will change <code>burnable</code> according to the new
36651
<p><strong>Fireproof Items</strong>
36653
<p>Most items are passively burnable, this is: An item is destroyed by
36654
fire, if and only if the floor could burn all by itself. However,
36655
there are some items with individual reactions (<code>it_burnable,
36656
it_burnable_oil, it_dynamite, it_bomb*, it_crack*</code>)
36657
and some items that are completely fireproof. These are: <code>it_burnable_ash,
36658
it_burnable_fireproof, it_debris, it_dummy, it_explosion*, it_extinguisher,
36659
it_extinguisher_medium, it_meditation*, it_trap, it_vortex*</code> and the fire
36660
animations themselves: <code>it_burnable_ignited</code> and
36661
<code>it_burnable_burning</code>.
36663
<p>Note that <code>it_extinguisher_empty, it_trigger</code> (visible and invisible),
36664
<code>it_landmine</code>, and <code>it_death</code> are passively burnable. In particular,
36665
<code>it_landmine</code> does not explode or create <code>it_meditation</code> when burning.
36666
The reaction of <a href="#it_005fsensor">it_sensor</a> towards fire might be changed in future
36669
<p>If you need to save a passively burnable item from fire, simply set a fireproof
36670
floor like <code>fl_sand</code> or <code>fl_rock</code> below it. This normally is the case
36671
when using <a href="#it_005fstrip">it_strip</a>. However, you can use the <code>burnable</code>-attribute in
36672
these cases to force burnability of the floors.
36675
<a name="Heat_002dTransformation"></a>
36676
<table cellpadding="1" cellspacing="1" border="0">
36677
<tr><td valign="middle" align="left">[<a href="#Fire-Spreading" title="Previous section in reading order"> < </a>]</td>
36678
<td valign="middle" align="left">[<a href="#Freeze-Checking" title="Next section in reading order"> > </a>]</td>
36679
<td valign="middle" align="left"> </td>
36680
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Beginning of this chapter or previous chapter"> << </a>]</td>
36681
<td valign="middle" align="left">[<a href="#General-Features" title="Up section"> Up </a>]</td>
36682
<td valign="middle" align="left">[<a href="#Extension-Development" title="Next chapter"> >> </a>]</td>
36683
<td valign="middle" align="left"> </td>
36684
<td valign="middle" align="left"> </td>
36685
<td valign="middle" align="left"> </td>
36686
<td valign="middle" align="left"> </td>
36687
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
36688
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
36689
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
36690
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
36692
<a name="Heat_002dTransformation-1"></a>
36693
<h3 class="subsection">13.2.4 Heat-Transformation</h3>
36695
<p>When a fire starts to burn near <a href="#fl_005fice">fl_ice</a>, it melts to <a href="#fl_005fwater">fl_water</a>. In the
36696
same sense, <a href="#fl_005fwater">fl_water</a> boils to <a href="#fl_005fswamp">fl_swamp</a>, and this again to
36697
<a href="#fl_005fdunes">fl_dunes</a>. In contrast to most other fire-related actions, this is not
36698
random, but always and only happens, when a nearby fire starts to burn, i.e.
36699
once for each new fire.
36701
<p>Examples: Put an <a href="#st_005fbox">st_box</a>_rock on <a href="#fl_005fice">fl_ice</a>. A fire will melt
36702
the ice, and <a href="#st_005fbox">st_box</a>_rock creates a fireproof and safe way to the
36703
other side. If you use <a href="#st_005fbox">st_box</a>_wood instead, <a href="#fl_005fwood">fl_wood</a>_framed is
36704
created, which presumably catches fire and leaves <a href="#fl_005fabyss">fl_abyss</a>
36705
behind. Finally, <a href="#st_005fbox">st_box</a>_hay will create <a href="#fl_005fhay">fl_hay</a>_framed, which is
36706
burnable, but won’t burn down to <a href="#fl_005fabyss">fl_abyss</a>. A similar combination is
36707
<code>fl_water</code> with <a href="#st_005fchess">st_chess</a>.
36709
<p>You can enforce a transformation by sending the <code>heat</code>-message to the
36712
<p>If you want to suppress this transformation, you can switch to
36713
a non-Enigma-compatibility-mode.
36716
<a name="Freeze-Checking"></a>
36717
<table cellpadding="1" cellspacing="1" border="0">
36718
<tr><td valign="middle" align="left">[<a href="#Heat_002dTransformation" title="Previous section in reading order"> < </a>]</td>
36719
<td valign="middle" align="left">[<a href="#Tips-and-Tricks" title="Next section in reading order"> > </a>]</td>
36720
<td valign="middle" align="left"> </td>
36721
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Beginning of this chapter or previous chapter"> << </a>]</td>
36722
<td valign="middle" align="left">[<a href="#General-Features" title="Up section"> Up </a>]</td>
36723
<td valign="middle" align="left">[<a href="#Extension-Development" title="Next chapter"> >> </a>]</td>
36724
<td valign="middle" align="left"> </td>
36725
<td valign="middle" align="left"> </td>
36726
<td valign="middle" align="left"> </td>
36727
<td valign="middle" align="left"> </td>
36728
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
36729
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
36730
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
36731
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
36733
<a name="Freeze-Checking-1"></a>
36734
<h3 class="subsection">13.2.5 Freeze Checking</h3>
36736
<p>With Enigma 1.1 and above, you can use a special feature to support Sokoban
36737
levels and Sokoban parts of levels: Whenever a movable stone is pushed into
36738
some unmovable position, this feature automatically transforms the stone into
36739
<a href="#st_005fdeath">st_death</a>, to demonstrate that the game is lost and provide a simple way
36740
for the player to restart.
36742
<p>The feature is called “Freeze Checking”. It applies to each stone with
36743
attribute <code>freeze_check = true</code> which is pushed onto a floor with
36744
attribute <code>freeze_check = true</code>. This way you can restrict the freeze
36745
check to a bounded area. For a true Sokoban the goal tiles should not be marked
36746
with <code>freeze_check = true</code>, as a frozen box on a goal is not considered
36747
harmful. On the other hand, you can specify which boxes are freeze-checked. This
36748
gives further freedom to use other stones inside your Sokoban area: Floor and
36749
stone both need the <code>freeze_check</code>-attribute activated.
36751
<p>The freeze check recognizes three basic constellations of stones that lead to a
36752
freeze of a standard movable stone. With <code>B</code> as box (movable or
36753
persistent) and <code>#</code> as wall (persistent):
36754
</p><table><tr><td> </td><td><pre class="example">BB #B #B
36756
</pre></td></tr></table>
36757
<p>There are more freeze constellations which are not recognized, the simplest
36759
</p><table><tr><td> </td><td><pre class="example">#B
36762
</pre></td></tr></table>
36763
<p>Don’t rely on this fact, it might be changed in future versions.
36765
<p>Please bear in mind: The freeze check is not intelligent. It can’t foresee that
36766
one of your functions might remove a stone, it can’t foresee that some door
36767
will never open up again (doors are considered as non-existent), it doesn’t
36768
recognize when you put an <a href="#it_005fpuller">it_puller</a>, <a href="#it_005fcherry">it_cherry</a>, or <a href="#st_005fswap">st_swap</a> in
36769
your level. It handles special stones in a way to minimize false-positive freeze
36772
<p>Floating stones (like <a href="#st_005fgrate">st_grate</a>) create completely new frozen
36773
constellations. From the following two examples, only the right example is
36774
frozen (<code>G</code> is <code>st_grate_cross</code>):
36775
</p><table><tr><td> </td><td><pre class="example">G G
36778
</pre></td></tr></table>
36779
<p>At present, none of these are recognized as frozen by Enigma, floating stones
36780
are considered as non-existing during a freeze check. To demonstrate the
36781
difficulty, you may analyze yourself which of the following constellations is
36783
</p><table><tr><td> </td><td><pre class="example">G G GBG GB# G G#G
36784
B# BBB BB GB G BBBBB
36787
</pre></td></tr></table>
36789
<p>In some cases, stones are even handled differently although they have similar
36790
properties: <a href="#st_005fbox">st_box</a>_wood and <code>st_flat_moveburnable</code> (see
36791
<a href="#st_005fflat">st_flat</a>) are both movable and both destroyed by fire (see <a href="#Fire-Spreading">Fire Spreading</a>). There would never be frozen stones, as they can easily be burned
36792
away. Yet, <code>st_box_wood</code> uses the default freeze checking, whereas
36793
<code>st_flat_moveburnable</code> is considered as non-existing. This is because
36794
<code>st_box_wood</code> is often used without fire, whereas
36795
<code>st_flat_moveburnable</code> is primarily used in combination with fire.
36797
<p>Another example is <a href="#st_005fshogun">st_shogun</a>_s, which is considered as a default
36798
movable stone, in contrast to the remaining shogun stones. This way you can use
36799
<code>st_shogun_s</code> with goal <a href="#it_005fshogun">it_shogun</a>_s, but don’t have to fear
36800
false-positive freeze checks from the non-standard way in which shogun stones
36803
<p>As a concluding remark, the freeze checking is to be used as a support for the
36804
gamer only. It’s not meant to be exploited as special feature to make movable
36805
stones unmovable or to provide a way to jump back to the starting position. It
36806
is subject to changes in future versions. And versions before 1.1 won’t make a
36807
freeze check at all - so you can’t rely on it to happen. It should really be
36808
used in Sokoban-kind parts of a level only, for which it is designed.
36811
<a name="Tips-and-Tricks"></a>
36812
<table cellpadding="1" cellspacing="1" border="0">
36813
<tr><td valign="middle" align="left">[<a href="#Freeze-Checking" title="Previous section in reading order"> < </a>]</td>
36814
<td valign="middle" align="left">[<a href="#Nearest-Object-Clustering" title="Next section in reading order"> > </a>]</td>
36815
<td valign="middle" align="left"> </td>
36816
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Beginning of this chapter or previous chapter"> << </a>]</td>
36817
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Up section"> Up </a>]</td>
36818
<td valign="middle" align="left">[<a href="#Extension-Development" title="Next chapter"> >> </a>]</td>
36819
<td valign="middle" align="left"> </td>
36820
<td valign="middle" align="left"> </td>
36821
<td valign="middle" align="left"> </td>
36822
<td valign="middle" align="left"> </td>
36823
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
36824
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
36825
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
36826
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
36828
<a name="Tips-and-Tricks-1"></a>
36829
<h2 class="section">13.3 Tips and Tricks</h2>
36831
<table class="menu" border="0" cellspacing="0">
36832
<tr><td align="left" valign="top"><a href="#Nearest-Object-Clustering">13.3.1 Nearest Object Clustering</a></td><td> </td><td align="left" valign="top"> When nearest object address wrong target
36834
<tr><td align="left" valign="top"><a href="#Orthogonal-Autotiling">13.3.2 Orthogonal Autotiling</a></td><td> </td><td align="left" valign="top"> Autotiling with different sources and targets
36839
<a name="Nearest-Object-Clustering"></a>
36840
<table cellpadding="1" cellspacing="1" border="0">
36841
<tr><td valign="middle" align="left">[<a href="#Tips-and-Tricks" title="Previous section in reading order"> < </a>]</td>
36842
<td valign="middle" align="left">[<a href="#Orthogonal-Autotiling" title="Next section in reading order"> > </a>]</td>
36843
<td valign="middle" align="left"> </td>
36844
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Beginning of this chapter or previous chapter"> << </a>]</td>
36845
<td valign="middle" align="left">[<a href="#Tips-and-Tricks" title="Up section"> Up </a>]</td>
36846
<td valign="middle" align="left">[<a href="#Extension-Development" title="Next chapter"> >> </a>]</td>
36847
<td valign="middle" align="left"> </td>
36848
<td valign="middle" align="left"> </td>
36849
<td valign="middle" align="left"> </td>
36850
<td valign="middle" align="left"> </td>
36851
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
36852
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
36853
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
36854
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
36856
<a name="Nearest-Object-Clustering-1"></a>
36857
<h3 class="subsection">13.3.1 Nearest Object Clustering</h3>
36859
<p>The nearest object as described in <a href="#Object-Naming">Object Naming</a> provides a major feature
36860
for reducing the number of needed tile declarations. As the selection needs
36861
to be unique a rule had to be defined in case of equal distances. South wins,
36862
then east, stones are favored to items, floors and actors.
36864
<p>In most cases level authors can arrange their objects to fit these rules. But
36865
sometimes the level design does not allow the straight forward usage of a
36866
simple nearest object selection. E.g.
36868
<table><tr><td> </td><td><pre class="example">ti["F"] = {"st_floppy", target="@door#*"}
36869
ti["B"] = {"st_blocker", name="door#"}
36870
wo{ti, " ", {
36872
" FB#####FB####",
36873
" # F B ",
36874
" # # F#####",
36875
</pre></td></tr></table>
36877
<p>In both cases the floppy switch that is located at the crossing of two blocker
36878
doors will open the false one.
36880
<p>But you can use a cluster concept like the one we introduced for
36881
<a href="#Cluster-Stones">Cluster Stones</a>. Just add one or in rare cases two or three additional
36882
groups. Assign all standard cases to group A and the out of line cases in
36885
<table><tr><td> </td><td><pre class="example">ti["F"] = {"st_floppy", target="@doorA#*"}
36886
ti["B"] = {"st_blocker", name="doorA#"}
36887
ti["f"] = {"st_floppy", target="@doorB#*"}
36888
ti["b"] = {"st_blocker", name="doorB#"}
36889
wo{ti, " ", {
36891
" fB#####fb####",
36892
" # F B ",
36893
" # # F#####",
36894
</pre></td></tr></table>
36896
<p>By clustering the doors in two groups you just need two additional tile
36897
declarations. But you will likely be able to handle a dozen of additional
36898
switch/door combinations.
36901
<a name="Orthogonal-Autotiling"></a>
36902
<table cellpadding="1" cellspacing="1" border="0">
36903
<tr><td valign="middle" align="left">[<a href="#Nearest-Object-Clustering" title="Previous section in reading order"> < </a>]</td>
36904
<td valign="middle" align="left">[<a href="#Extension-Development" title="Next section in reading order"> > </a>]</td>
36905
<td valign="middle" align="left"> </td>
36906
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Beginning of this chapter or previous chapter"> << </a>]</td>
36907
<td valign="middle" align="left">[<a href="#Tips-and-Tricks" title="Up section"> Up </a>]</td>
36908
<td valign="middle" align="left">[<a href="#Extension-Development" title="Next chapter"> >> </a>]</td>
36909
<td valign="middle" align="left"> </td>
36910
<td valign="middle" align="left"> </td>
36911
<td valign="middle" align="left"> </td>
36912
<td valign="middle" align="left"> </td>
36913
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
36914
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
36915
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
36916
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
36918
<a name="Orthogonal-Autotiling-1"></a>
36919
<h3 class="subsection">13.3.2 Orthogonal Autotiling</h3>
36921
<p>Autotiling is useful whenever you want to define lots of
36922
target-action-pairings, even when source and target objects differ (i.e. use
36923
different tile keys). In this case we speak of ‘<samp>orthogonal autotiling</samp>’.
36924
Let’s take a look at the important parts of the API 2 version of the level
36925
‘<samp>Laser Games</samp>’:
36927
<table><tr><td> </td><td><pre class="example">...
36928
ti["T*"] = {"it_trigger", target = "mirror%%", action_1 = "turn", action_0 = "turnback"}
36929
ti["F*"] = {"st_fourswitch", target = "mirror%%"}
36930
ti["1*"] = {"st_mirror", name = "mirror%%", flavor = "triangle", orientation = NORTH}
36931
ti["2*"] = {"st_mirror", name = "mirror%%", flavor = "triangle", orientation = SOUTH}
36932
ti["3*"] = {"st_mirror", name = "mirror%%", orientation = NORTH}
36935
local resolver = res.autotile(ti, {"T", "T*"}, {"F", "F*"},
36936
{"1", "1*"}, {"2", "2*"}, {"3", "3*"}, {"4", "4*"}, {"5", "5*"},
36937
{"6", "6*"}, {"7", "7*"}, {"8", "8*"}, {"9", "9*"})
36939
w, h = wo(resolver, " ", {
36940
"# # # # # # # # # # # $ # $ # $ # $ # # ",
36941
"# # # ",
36942
"# = = # 1a 9b 3c 2d $ ",
36943
"# = # # ",
36944
"# TaTbTcTd # 3e 4f 5g 4h $ ",
36945
"# TeFfFgTh # # ",
36946
"# TiFjFkTl # 6i 3j 4k 7l $ ",
36947
"# TmFnFoTp # # ",
36948
"# TqTrTsTt # 8m 7n 6o 8p $ ",
36949
"# # # ",
36950
"# @ = # 1q 7r 3s 2t $ ",
36951
"# # # ",
36952
"# # # # # # # # # # # $ # $ # $ # ^ # # "
36955
</pre></td></tr></table>
36957
<p>We have different kinds of sources for our actions (triggers <code>T</code> and
36958
fourswitchs <code>F</code>), and different kinds of targets (mirrors <code>1</code>,
36959
<code>2</code> etc.). However, as all mirrors are consistently named <code>mirror%%</code>,
36960
with <code>%%</code> being replaced by <code>%a</code> to <code>%t</code>, the connections
36961
between the objects can be set easily without having to worry about different
36962
object types: The trigger <code>Ta</code> will turn mirror <code>1a</code> (which is called
36963
<code>mirror%a</code>), <code>Tb</code> will turn <code>9b</code> and so on. If we decide to
36964
replace mirror <code>1a</code> by, say, mirror type <code>2</code>, we can simply replace
36965
<code>1a</code> by <code>2a</code>, and still preserve the action-target-pairing.
36967
<p>In this very special situation, the attribute <code>counterclock</code> proves to
36968
be useful: All mirrors in this level turn clockwise, except for <code>9b</code>.
36969
Without <code>counterclock</code>, we’d have to use a callback-function to decide
36970
about the target and manually choose between the actions <code>turn</code> and
36971
<code>turnback</code>. However, by setting
36973
<table><tr><td> </td><td><pre class="example">ti["9*"] = {"st_mirror", name = "mirror%%", flavor = "triangle",
36974
orientation = SOUTH, counterclock = true}
36975
</pre></td></tr></table>
36977
<p>it’s possible to send the same messages to all mirrors that correspond to
36978
triggers (i.e. <code>turn</code> when the trigger is pressed down and <code>turnback</code>
36979
when it is released again), and still to have one or more mirrors behave in a
36980
different way (i.e. rotating in another direction). The <code>inverse</code>
36981
attribute is of a similar use.
36985
<a name="Extension-Development"></a>
36986
<table cellpadding="1" cellspacing="1" border="0">
36987
<tr><td valign="middle" align="left">[<a href="#Orthogonal-Autotiling" title="Previous section in reading order"> < </a>]</td>
36988
<td valign="middle" align="left">[<a href="#Resolver-Development" title="Next section in reading order"> > </a>]</td>
36989
<td valign="middle" align="left"> </td>
36990
<td valign="middle" align="left">[<a href="#Advanced-Features" title="Beginning of this chapter or previous chapter"> << </a>]</td>
36991
<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up </a>]</td>
36992
<td valign="middle" align="left">[<a href="#Guidelines-and-Hints" title="Next chapter"> >> </a>]</td>
36993
<td valign="middle" align="left"> </td>
36994
<td valign="middle" align="left"> </td>
36995
<td valign="middle" align="left"> </td>
36996
<td valign="middle" align="left"> </td>
36997
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
36998
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
36999
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
37000
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
37002
<a name="Extension-Development-1"></a>
37003
<h1 class="chapter">14. Extension Development</h1>
37005
<table class="menu" border="0" cellspacing="0">
37006
<tr><td align="left" valign="top"><a href="#Resolver-Development">14.1 Resolver Development</a></td><td> </td><td align="left" valign="top">
37011
<a name="Resolver-Development"></a>
37012
<table cellpadding="1" cellspacing="1" border="0">
37013
<tr><td valign="middle" align="left">[<a href="#Extension-Development" title="Previous section in reading order"> < </a>]</td>
37014
<td valign="middle" align="left">[<a href="#Resolver-Configurator" title="Next section in reading order"> > </a>]</td>
37015
<td valign="middle" align="left"> </td>
37016
<td valign="middle" align="left">[<a href="#Extension-Development" title="Beginning of this chapter or previous chapter"> << </a>]</td>
37017
<td valign="middle" align="left">[<a href="#Extension-Development" title="Up section"> Up </a>]</td>
37018
<td valign="middle" align="left">[<a href="#Guidelines-and-Hints" title="Next chapter"> >> </a>]</td>
37019
<td valign="middle" align="left"> </td>
37020
<td valign="middle" align="left"> </td>
37021
<td valign="middle" align="left"> </td>
37022
<td valign="middle" align="left"> </td>
37023
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
37024
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
37025
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
37026
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
37028
<a name="Resolver-Development-1"></a>
37029
<h2 class="section">14.1 Resolver Development</h2>
37031
<p>Resolvers are designed to provide easy plugable extensions for usage by level
37032
authors. Further on resolvers should be as flexible as possible. To reach these
37033
goals each resolver consists of three parts: the configurator, the implemention
37036
<table class="menu" border="0" cellspacing="0">
37037
<tr><td align="left" valign="top"><a href="#Resolver-Configurator">14.1.1 Resolver Configurator</a></td><td> </td><td align="left" valign="top">
37039
<tr><td align="left" valign="top"><a href="#Resolver-Implementation">14.1.2 Resolver Implementation</a></td><td> </td><td align="left" valign="top">
37041
<tr><td align="left" valign="top"><a href="#Resolver-Finalizer">14.1.3 Resolver Finalizer</a></td><td> </td><td align="left" valign="top">
37047
<a name="Resolver-Configurator"></a>
37048
<table cellpadding="1" cellspacing="1" border="0">
37049
<tr><td valign="middle" align="left">[<a href="#Resolver-Development" title="Previous section in reading order"> < </a>]</td>
37050
<td valign="middle" align="left">[<a href="#Resolver-Implementation" title="Next section in reading order"> > </a>]</td>
37051
<td valign="middle" align="left"> </td>
37052
<td valign="middle" align="left">[<a href="#Extension-Development" title="Beginning of this chapter or previous chapter"> << </a>]</td>
37053
<td valign="middle" align="left">[<a href="#Resolver-Development" title="Up section"> Up </a>]</td>
37054
<td valign="middle" align="left">[<a href="#Guidelines-and-Hints" title="Next chapter"> >> </a>]</td>
37055
<td valign="middle" align="left"> </td>
37056
<td valign="middle" align="left"> </td>
37057
<td valign="middle" align="left"> </td>
37058
<td valign="middle" align="left"> </td>
37059
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
37060
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
37061
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
37062
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
37064
<a name="Resolver-Configurator-1"></a>
37065
<h3 class="subsection">14.1.1 Resolver Configurator</h3>
37066
<a name="index-res_002eresolvername"></a>
37068
<p>The configurator is the function that is being called, when the author
37069
supplies the resolver specific parameters.
37071
<dl compact="compact">
37072
<dt> <b>Syntax:</b></dt>
37073
<dd><p>context = <b>res.resolvername</b>(<i>subresolver</i>,...)
37075
<dl compact="compact">
37076
<dt> <i>subresolver</i></dt>
37077
<dd><p>Resolver to which unresolved requests should be forwarded. May be ‘<samp>ti</samp>’
37078
as the final resolver of the resolver chain.
37083
<dt> <b>Details:</b></dt>
37084
<dd><p>This function has just one mandatory parameter, the subresolver. You are free
37085
to specify arbitrary further parameters due to the needs of the resolvers task.
37087
<p>All official resolvers will be registered in the registry table ‘<samp>res</samp>’ under
37088
their official name:
37090
<table><tr><td> </td><td><pre class="example">function res.composer(subresolver)
37093
</pre></td></tr></table>
37095
<p>This configurator function will be called just once per level start. It is
37096
called after the tile declarations and before the first tile is set and the
37097
implementation part may be called.
37099
<p>It is the task of the configurator function to check the user supplied
37100
parameters thoroughly and to provide appropriate error messages on bad
37101
parameters. Do this with a lua error message call at level 2 or the useful
37102
helper functions <a href="#assert_005fbool">assert_bool</a> and <a href="#assert_005ftype">assert_type</a>:
37103
</p><table><tr><td> </td><td><pre class="example">error("Resolver autotile rule " .. i.." is not a table", 2)
37104
assert_bool(is_resolver(subresolver), "res.composer first argument (subresolver)", 2)
37105
assert_type(args[1], "res.composer second argument (sequence)", 2, "non-empty string")
37106
</pre></td></tr></table>
37108
<p>The configuration function has to return a table that contains the context
37109
for subsequent calls of the implementation. This table has three predefined
37112
<dl compact="compact">
37113
<dt> <b>[1]</b> = <i>implementation function</i></dt>
37114
<dt> <b>[2]</b> = <i>finalizer function</i></dt>
37115
<dt> <b>[3]</b> = <i>subresolver</i></dt>
37116
<dt> <b>...</b> = resolver specific additional entries</dt>
37119
<p>All the checked and preprocessed parameters have to be stored in this context
37120
table for later usage. The resolver implementation function is usually
37121
registered as ‘<samp>res.resolvername_implementation</samp>’. The finalizer can be
37122
‘<samp>nil</samp>’ if no finalization is necessary. The subresolver given as the
37123
first parameter of the configurator call needs to be the third context
37126
<p>The context needs to add a metatable with two entries. First <code>"_type"</code>
37127
needs to identify the context as an enigma data type for the <a href="#etype">etype</a>
37128
function. Most resolvers to simply store the string <code>"resolver"</code>, but
37129
special ones might return special identification strings like <code>"maze"</code>.
37130
The second required entry is <code>"_resolver"</code> that needs a boolean ‘<samp>true</samp>’
37131
value assigned for purpose of secure identification of resolver tables. A
37132
default resolver metatable is stored at ‘<samp>res.metatable</samp>’ and can directly
37133
be set by ‘<samp>setmetatable</samp>’.
37136
<dt> <b>Full Example:</b></dt>
37137
<dd><table><tr><td> </td><td><pre class="example">function res.composer(subresolver)
37138
assert_bool(is_resolver(subresolver), "res.composer first argument (subresolver)", 2)
37139
local context = {res.composer_implementation, nil, subresolver}
37140
setmetatable(context, res.metatable)
37143
</pre></td></tr></table>
37148
<a name="Resolver-Implementation"></a>
37149
<table cellpadding="1" cellspacing="1" border="0">
37150
<tr><td valign="middle" align="left">[<a href="#Resolver-Configurator" title="Previous section in reading order"> < </a>]</td>
37151
<td valign="middle" align="left">[<a href="#Resolver-Finalizer" title="Next section in reading order"> > </a>]</td>
37152
<td valign="middle" align="left"> </td>
37153
<td valign="middle" align="left">[<a href="#Extension-Development" title="Beginning of this chapter or previous chapter"> << </a>]</td>
37154
<td valign="middle" align="left">[<a href="#Resolver-Development" title="Up section"> Up </a>]</td>
37155
<td valign="middle" align="left">[<a href="#Guidelines-and-Hints" title="Next chapter"> >> </a>]</td>
37156
<td valign="middle" align="left"> </td>
37157
<td valign="middle" align="left"> </td>
37158
<td valign="middle" align="left"> </td>
37159
<td valign="middle" align="left"> </td>
37160
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
37161
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
37162
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
37163
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
37165
<a name="Resolver-Implementation-1"></a>
37166
<h3 class="subsection">14.1.2 Resolver Implementation</h3>
37167
<a name="index-res_002ecomposer_005fimplementation"></a>
37169
<p>When the map gets evaluated on the world creation the top resolver is asked
37170
for every key to return the valid tile declaration. This is done with the
37173
<dl compact="compact">
37174
<dt> <b>Syntax:</b></dt>
37175
<dd><p>tile = <b>resolver_implementation</b>(<i>context</i>, <i>evaluator</i>, <i>key</i>, <i>x</i>, <i>y</i>)
37177
<dl compact="compact">
37178
<dt> <i>context</i></dt>
37179
<dd><p>The context as provided as return value by the <a href="#Resolver-Configurator">Resolver Configurator</a>.
37181
<dt> <i>evaluator</i></dt>
37182
<dd><p>A system function that needs to be called whenever this resolver needs to
37183
look up the key by its subresolver.
37185
<dt> <i>key</i></dt>
37186
<dd><p>The key string that should be resolved
37188
<dt> <i>x</i>, <i>y</i></dt>
37189
<dd><p>The position of the tile.
37194
<dt> <b>Details:</b></dt>
37195
<dd><p>Based on the given parameters, the key, the position, the resolver parameters
37196
stored in the context and the existing tiles that can be requested via the
37197
evaluator function the implementation needs to decide if it takes influence on
37198
the key. Note that it is not possible to access any world object via its
37199
coordinate at this time. On every call you have to assume that it may be the
37200
first tile that is set.
37202
<p>If the key is not resolved to a final tile by this resolver, the subresolver
37203
must be called via the evaluator function:
37204
</p><table><tr><td> </td><td><pre class="example">local tile = evaluator(context[3], key, x, y)
37205
</pre></td></tr></table>
37207
<p>Remember that the subresolver is stored at position 3 of the context. As no
37208
influence should be taken this tile is the one that should be returned.
37210
<p>But if you want to return another tile you are free to do it. You can decide
37211
on another key and ask the subresolver for the appropriate tile. You can
37212
even concatenate two tiles returned by subsequent subresolver calls. You are
37213
allowed to return a new tile with a table declaration of an object. Some valid
37215
</p><table><tr><td> </td><td><pre class="example">return evaluator(context[3], "a", x, y)
37216
return evaluator(context[3], "a", x, y) .. evaluator(context[3], "b", x, y)
37217
return evaluator(context[3], "a", x, y) .. ti({"st_laser_n", state=ON})
37218
</pre></td></tr></table>
37220
<p>You are even allowed to add new tile declarations to the tiles repository to
37221
speed up subsequent calls:
37222
</p><table><tr><td> </td><td><pre class="example">ti["newkey"] = evaluator(context[3], "a", x, y) .. ti({"st_laser_n", state=ON})
37223
</pre></td></tr></table>
37225
<p>A resolver implementation can store and modify any of its private parameters
37226
in the context table for subsequent calls. Especially it can enlist all
37227
coordinates for postprocessing operations in the finalizer.
37230
<dt> <b>Full Example:</b></dt>
37231
<dd><p>The implementation of the composer (without the special sequence treatment)
37232
</p><table><tr><td> </td><td><pre class="example">function res.composer_implementation(context, evaluator, key, x, y)
37233
local tile = evaluator(context[3], key, x, y)
37234
if tile ~= nil then
37237
-- try to compose tile
37239
local subkey = string.rep(" ", i-1) .. string.sub(key, i, i) .. string.rep(" ", #key - i)
37240
local subtile = evaluator(context[3], subkey, x, y)
37241
if subtile == nil then
37244
if tile == nil then
37247
tile = tile .. subtile
37252
</pre></td></tr></table>
37257
<a name="Resolver-Finalizer"></a>
37258
<table cellpadding="1" cellspacing="1" border="0">
37259
<tr><td valign="middle" align="left">[<a href="#Resolver-Implementation" title="Previous section in reading order"> < </a>]</td>
37260
<td valign="middle" align="left">[<a href="#Guidelines-and-Hints" title="Next section in reading order"> > </a>]</td>
37261
<td valign="middle" align="left"> </td>
37262
<td valign="middle" align="left">[<a href="#Extension-Development" title="Beginning of this chapter or previous chapter"> << </a>]</td>
37263
<td valign="middle" align="left">[<a href="#Resolver-Development" title="Up section"> Up </a>]</td>
37264
<td valign="middle" align="left">[<a href="#Guidelines-and-Hints" title="Next chapter"> >> </a>]</td>
37265
<td valign="middle" align="left"> </td>
37266
<td valign="middle" align="left"> </td>
37267
<td valign="middle" align="left"> </td>
37268
<td valign="middle" align="left"> </td>
37269
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
37270
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
37271
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
37272
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
37274
<a name="Resolver-Finalizer-1"></a>
37275
<h3 class="subsection">14.1.3 Resolver Finalizer</h3>
37276
<a name="index-res_002eresolver_005ffinalization"></a>
37278
<p>If the <a href="#Resolver-Configurator">Resolver Configurator</a> provides a finalizer function in its context
37279
this function will be called once when all tiles from the map have been set.
37281
<dl compact="compact">
37282
<dt> <b>Syntax:</b></dt>
37283
<dd><p><b>resolver_finalization</b>(<i>context</i>)
37285
<dl compact="compact">
37286
<dt> <i>context</i></dt>
37287
<dd><p>The context as provided as return value by the <a href="#Resolver-Configurator">Resolver Configurator</a>.
37292
<dt> <b>Details:</b></dt>
37293
<dd><p>The finalization functions of chained resolvers are called from bottom to top.
37295
<p>Many resolvers have no need of a finalization. But some like a maze constructor
37296
need to know all participating tiles until they can do their final work.
37298
<p>As all tiles from the map have been processed the objects can now be accessed.
37299
Further information may be stored in the resolvers context.
37301
<p>The finalizer does neither call its subresolver nor does it return a value.
37307
<a name="Guidelines-and-Hints"></a>
37308
<table cellpadding="1" cellspacing="1" border="0">
37309
<tr><td valign="middle" align="left">[<a href="#Resolver-Finalizer" title="Previous section in reading order"> < </a>]</td>
37310
<td valign="middle" align="left">[<a href="#Filename-Recommendation" title="Next section in reading order"> > </a>]</td>
37311
<td valign="middle" align="left"> </td>
37312
<td valign="middle" align="left">[<a href="#Extension-Development" title="Beginning of this chapter or previous chapter"> << </a>]</td>
37313
<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up </a>]</td>
37314
<td valign="middle" align="left">[<a href="#Compatibility" title="Next chapter"> >> </a>]</td>
37315
<td valign="middle" align="left"> </td>
37316
<td valign="middle" align="left"> </td>
37317
<td valign="middle" align="left"> </td>
37318
<td valign="middle" align="left"> </td>
37319
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
37320
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
37321
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
37322
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
37324
<a name="Guidelines-and-Hints-1"></a>
37325
<h1 class="chapter">15. Guidelines and Hints</h1>
37327
<p>Up to now we described all features in their full extend. Of course you are
37328
free to use them all without any restrictions for your private levels. We are
37329
committed to maintain all features in future versions of Enigma.
37331
<p>But for inclusion of your levels into the Enigma project we would like to
37332
recommend conformance to some common standards. These few points guarantee that
37333
your levels can easily be processed by our administration tools, the players
37334
can talk about your level and your level remains editable by the project
37335
maintainers in case of urgent need.
37337
<p>Additionally we like to give you some hints how to write good levels by means
37338
of proper strategy.
37340
<table class="menu" border="0" cellspacing="0">
37341
<tr><td align="left" valign="top"><a href="#Filename-Recommendation">15.1 Filename Recommendation</a></td><td> </td><td align="left" valign="top">
37343
<tr><td align="left" valign="top"><a href="#Title-Recommendation">15.2 Title Recommendation</a></td><td> </td><td align="left" valign="top">
37345
<tr><td align="left" valign="top"><a href="#Tile-Key-Recommendation">15.3 Tile Key Recommendation</a></td><td> </td><td align="left" valign="top">
37347
<tr><td align="left" valign="top"><a href="#Easy-Mode-Hints">15.4 Easy Mode Hints</a></td><td> </td><td align="left" valign="top">
37352
<a name="Filename-Recommendation"></a>
37353
<table cellpadding="1" cellspacing="1" border="0">
37354
<tr><td valign="middle" align="left">[<a href="#Guidelines-and-Hints" title="Previous section in reading order"> < </a>]</td>
37355
<td valign="middle" align="left">[<a href="#Title-Recommendation" title="Next section in reading order"> > </a>]</td>
37356
<td valign="middle" align="left"> </td>
37357
<td valign="middle" align="left">[<a href="#Guidelines-and-Hints" title="Beginning of this chapter or previous chapter"> << </a>]</td>
37358
<td valign="middle" align="left">[<a href="#Guidelines-and-Hints" title="Up section"> Up </a>]</td>
37359
<td valign="middle" align="left">[<a href="#Compatibility" title="Next chapter"> >> </a>]</td>
37360
<td valign="middle" align="left"> </td>
37361
<td valign="middle" align="left"> </td>
37362
<td valign="middle" align="left"> </td>
37363
<td valign="middle" align="left"> </td>
37364
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
37365
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
37366
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
37367
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
37369
<a name="Filename-Recommendation-1"></a>
37370
<h2 class="section">15.1 Filename Recommendation</h2>
37371
<p>No space for spaces
37374
<a name="Title-Recommendation"></a>
37375
<table cellpadding="1" cellspacing="1" border="0">
37376
<tr><td valign="middle" align="left">[<a href="#Filename-Recommendation" title="Previous section in reading order"> < </a>]</td>
37377
<td valign="middle" align="left">[<a href="#Tile-Key-Recommendation" title="Next section in reading order"> > </a>]</td>
37378
<td valign="middle" align="left"> </td>
37379
<td valign="middle" align="left">[<a href="#Guidelines-and-Hints" title="Beginning of this chapter or previous chapter"> << </a>]</td>
37380
<td valign="middle" align="left">[<a href="#Guidelines-and-Hints" title="Up section"> Up </a>]</td>
37381
<td valign="middle" align="left">[<a href="#Compatibility" title="Next chapter"> >> </a>]</td>
37382
<td valign="middle" align="left"> </td>
37383
<td valign="middle" align="left"> </td>
37384
<td valign="middle" align="left"> </td>
37385
<td valign="middle" align="left"> </td>
37386
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
37387
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
37388
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
37389
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
37391
<a name="Title-Recommendation-1"></a>
37392
<h2 class="section">15.2 Title Recommendation</h2>
37393
<p>English titles preferred - use subtitle, too
37396
<a name="Tile-Key-Recommendation"></a>
37397
<table cellpadding="1" cellspacing="1" border="0">
37398
<tr><td valign="middle" align="left">[<a href="#Title-Recommendation" title="Previous section in reading order"> < </a>]</td>
37399
<td valign="middle" align="left">[<a href="#Easy-Mode-Hints" title="Next section in reading order"> > </a>]</td>
37400
<td valign="middle" align="left"> </td>
37401
<td valign="middle" align="left">[<a href="#Guidelines-and-Hints" title="Beginning of this chapter or previous chapter"> << </a>]</td>
37402
<td valign="middle" align="left">[<a href="#Guidelines-and-Hints" title="Up section"> Up </a>]</td>
37403
<td valign="middle" align="left">[<a href="#Compatibility" title="Next chapter"> >> </a>]</td>
37404
<td valign="middle" align="left"> </td>
37405
<td valign="middle" align="left"> </td>
37406
<td valign="middle" align="left"> </td>
37407
<td valign="middle" align="left"> </td>
37408
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
37409
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
37410
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
37411
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
37413
<a name="Tile-Key-Recommendation-1"></a>
37414
<h2 class="section">15.3 Tile Key Recommendation</h2>
37416
<p>The following guidelines are not compulsory, but we nevertheless encourage
37417
them, as they ease the development of new and the maintenance of old levels.
37420
<li> Stones use capital letters, items small letters, floors use punctuation marks.
37421
</li><li> The default floor is <code>" "</code>. The second most important floor typically is
37422
<code>"_"</code> or <code>"."</code>. It’s a good idea to use tile keys for floors, which are
37423
small and don’t obstruct the view on the more important objects, like
37424
stones and items. Important floors (like bridges) may have letters or
37425
numbers to emphasize their importance (a bridge could be <code>"b"</code>, or a
37426
number to use autotiling).
37427
</li><li> Water typically is <code>"~"</code>, as the tilde is a small character which resembles
37428
a wave. Similarly, an abyss can be well described by <code>"_"</code>, as the underscore
37430
</li><li> On a German keyboard, the four characters <code>"."</code>, <code>","</code>, <code>":"</code> and <code>";"</code> are
37431
arranged in a square, so you can easily use them to arrange quadruples
37432
of floors, like lawn pieces of different brightness.
37433
On a US keyboard, you can use <code>","</code>, <code>"."</code>, <code>"<"</code> and <code>">"</code> to the same purpose.
37434
Another quadruple of characters are the arithmetic operators <code>"+"</code>, <code>"-"</code>,<code>"*"</code>, and <code>"/"</code>.
37435
</li><li> Slopes can be described using <code>"<"</code>, <code>">"</code>, <code>"v"</code> and <code>"^"</code>. As you see, we
37436
encourage you to use the letter <code>"v"</code> for a floor at this point, as it
37437
resembles an arrow pointing down. For slant slopes, it’s a good idea to
37438
use either numbers (following the number keypad on your keyboard), or
37439
quadruple characters like <code>"."</code>, <code>","</code>, <code>":"</code>, <code>";"</code> or arithmetic operators.
37440
</li><li> Although it fits nicely to <code>"/"</code>, it’s not a good idea to use the backslash
37441
as a tile key, as it has to be masked to work correctly. Similarly, we
37442
disencourage the use of brackets as tile keys.
37443
</li><li> The most important simple stone should be <code>"#"</code>, all other stones should
37444
use their first letter, like “laser” -> <code>"L"</code>, “switch” -> <code>"S"</code>, “box” -> <code>"B"</code>.
37445
If two stones have the same first letter, the more important one should
37446
be given priority (<code>"L"</code> for laser instead of <code>"L"</code> for <code>"st_lightglass"</code>,
37447
<code>"G"</code> for <code>"st_lightglass"</code> instead of <code>"G"</code> for <code>"st_greenbrown"</code>).
37448
</li><li> Orientable stones like boulders or lasers should use <code>"N"</code>, <code>"E"</code>, <code>"S"</code>, <code>"W"</code>
37449
if they appear in more than one orientation.
37450
</li><li> Stones of the same kind, which appear several times in different ways
37451
(like switches with different actions) should use consecutive letter
37452
(<code>"S"</code>, <code>"T"</code>, <code>"U"</code>, ...) or numbers.
37453
</li><li> Oxyd stones should use <code>"O"</code> or <code>"0"</code>. If you put several different oxyd
37454
stones, e.g. of different colors, make use of consecutive letters (<code>"P"</code>,
37455
<code>"Q"</code>, <code>"R"</code> ...) or numbers.
37456
</li><li> If you want to put mirrors, it’s a good idea to use characters resembling
37457
the orientation of the mirror, i.e. <code>"|"</code>, <code>"-"</code>, and <code>"/"</code>. As the backslash
37458
is no good tile key, you may use <code>"&"</code> or <code>"Q"</code> instead, as these characters
37459
include a prominent slant line similar to the backslash. Triangular
37460
mirrors are best written with <code>"<"</code>, <code>">"</code>, <code>"v"</code> and <code>"^"</code>.
37461
</li><li> For rotator stones, it’s a good idea to use <code>"R"</code> and <code>"L"</code> for clockwise
37462
(right) and counter-clockwise (left) rotating stones. As an alternative,
37463
you might want to use characters which are written in either clockwise
37464
or counter-clockwise manner, like <code>"p"</code> and <code>"q"</code>. Note that this might
37465
depend on your handwriting.
37466
</li><li> Documents can use either <code>"d"</code>, or <code>"i"</code> (for <code>"information"</code>), as <code>"d"</code> is
37467
used more often (e.g. for autotiling purposes). If several documents
37468
appear in the level, you can use consecutive letters (<code>"i"</code>, <code>"j"</code>, <code>"k"</code> ...).
37469
Remember that you can take advantage of autotiling if you have lots of
37470
different documents in your level.
37471
</li><li> Coins can be written with <code>"c"</code>, with <code>"$"</code> or with numbers resembling their worth.
37472
</li><li> Marbles should be <code>"@"</code>, all other actors should use small letters
37473
(<code>"t"</code> for ac_top, <code>"p"</code> for ac_pearl, ...), or large punctuation marks.
37474
</li><li> For autotiling, it’s a good idea to use <code>"X"</code>, <code>"Y"</code>, <code>"x"</code>, <code>"y"</code>, <code>"*"</code>, <code>"?"</code> and
37475
similar characters which associate themselves with variables as template
37476
keys. Another possibility is to use a full word like <code>"door"</code> or <code>"switch"</code>
37477
as template tile key, which has the advantage of being easier
37481
<a name="Easy-Mode-Hints"></a>
37482
<table cellpadding="1" cellspacing="1" border="0">
37483
<tr><td valign="middle" align="left">[<a href="#Tile-Key-Recommendation" title="Previous section in reading order"> < </a>]</td>
37484
<td valign="middle" align="left">[<a href="#Compatibility" title="Next section in reading order"> > </a>]</td>
37485
<td valign="middle" align="left"> </td>
37486
<td valign="middle" align="left">[<a href="#Guidelines-and-Hints" title="Beginning of this chapter or previous chapter"> << </a>]</td>
37487
<td valign="middle" align="left">[<a href="#Guidelines-and-Hints" title="Up section"> Up </a>]</td>
37488
<td valign="middle" align="left">[<a href="#Compatibility" title="Next chapter"> >> </a>]</td>
37489
<td valign="middle" align="left"> </td>
37490
<td valign="middle" align="left"> </td>
37491
<td valign="middle" align="left"> </td>
37492
<td valign="middle" align="left"> </td>
37493
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
37494
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
37495
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
37496
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
37498
<a name="Easy-Mode-Hints-1"></a>
37499
<h2 class="section">15.4 Easy Mode Hints</h2>
37500
<p>write easy first, floor friction,...
37504
<a name="Compatibility"></a>
37505
<table cellpadding="1" cellspacing="1" border="0">
37506
<tr><td valign="middle" align="left">[<a href="#Easy-Mode-Hints" title="Previous section in reading order"> < </a>]</td>
37507
<td valign="middle" align="left">[<a href="#Engine-Compatibility" title="Next section in reading order"> > </a>]</td>
37508
<td valign="middle" align="left"> </td>
37509
<td valign="middle" align="left">[<a href="#Guidelines-and-Hints" title="Beginning of this chapter or previous chapter"> << </a>]</td>
37510
<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up </a>]</td>
37511
<td valign="middle" align="left">[<a href="#Object-Index" title="Next chapter"> >> </a>]</td>
37512
<td valign="middle" align="left"> </td>
37513
<td valign="middle" align="left"> </td>
37514
<td valign="middle" align="left"> </td>
37515
<td valign="middle" align="left"> </td>
37516
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
37517
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
37518
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
37519
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
37521
<a name="Compatibility-1"></a>
37522
<h1 class="chapter">16. Compatibility</h1>
37525
<table class="menu" border="0" cellspacing="0">
37526
<tr><td align="left" valign="top"><a href="#Engine-Compatibility">16.1 Engine Compatibility</a></td><td> </td><td align="left" valign="top"> Differences between Compatibility Modes
37531
<a name="Engine-Compatibility"></a>
37532
<table cellpadding="1" cellspacing="1" border="0">
37533
<tr><td valign="middle" align="left">[<a href="#Compatibility" title="Previous section in reading order"> < </a>]</td>
37534
<td valign="middle" align="left">[<a href="#Object-Index" title="Next section in reading order"> > </a>]</td>
37535
<td valign="middle" align="left"> </td>
37536
<td valign="middle" align="left">[<a href="#Compatibility" title="Beginning of this chapter or previous chapter"> << </a>]</td>
37537
<td valign="middle" align="left">[<a href="#Compatibility" title="Up section"> Up </a>]</td>
37538
<td valign="middle" align="left">[<a href="#Object-Index" title="Next chapter"> >> </a>]</td>
37539
<td valign="middle" align="left"> </td>
37540
<td valign="middle" align="left"> </td>
37541
<td valign="middle" align="left"> </td>
37542
<td valign="middle" align="left"> </td>
37543
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
37544
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
37545
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
37546
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
37548
<a name="Engine-Compatibility-1"></a>
37549
<h2 class="section">16.1 Engine Compatibility</h2>
37551
<p>Although Enigma was inspired by the Oxyd game series, there are
37552
some differences between the native Enigma engine mode and the other modes as
37553
well as between the other modes themselves. Using the compatibility element
37554
of the xml-metadata (see section <a href="#g_t_003ccompatibility_003e"><compatibility></a>), it is possible to activate some
37555
of these special features. Here is a list of the major differences
37557
<p><strong>All non-Enigma modes <code>(oxyd1, per.oxyd, oxyd.magnum, oxyd.extra)</code></strong>
37560
<li> Keep <a href="#it_005fkey">it_key</a> when using <a href="#st_005fkey">st_key</a>.
37561
</li><li> Oxyd stones (<a href="#st_005foxyd">st_oxyd</a>) must blink before they can be
37562
ultimately opened (pairs must be hit with some time delay).
37563
</li><li> The non-Enigma modes feature a model of the 0.92-Fire System
37564
(see <a href="#Fire-Spreading">Fire Spreading</a>).
37565
</li><li> <a href="#it_005fsquashed">it_squashed</a> and <a href="#it_005fcross">it_cross</a> can’t be removed with
37566
<a href="#it_005fbrush">it_brush</a>.
37567
</li><li> The only function of <a href="#it_005fpencil">it_pencil</a> is to turn
37568
<a href="#st_005fflat">st_flat</a> and its movable variant into the burnable variants.
37569
</li><li> <a href="#it_005fbottle">it_bottle</a> doesn’t break when a stone is pushed over it.
37570
</li><li> <a href="#st_005fswap">st_swap</a> and <a href="#st_005fpull">st_pull</a> may not swap/pull into the level
37575
<p><strong><code>oxyd1</code>-compatibility</strong>
37578
<li> <a href="#it_005fseed">it_seed</a> grows to <a href="#fl_005fwood">fl_wood</a>_framed under <a href="#st_005fgrate">st_grate</a>_cross,
37579
not to <a href="#st_005fbox">st_box</a>_wood.
37580
</li><li> Flying actors may pass <a href="#st_005fgrate">st_grate</a>).
37581
</li><li> <a href="#st_005fbox">st_box</a>_wood only falls when moved.
37582
</li><li> The <code>ignite</code>-message (e.g. by <a href="#it_005fdynamite">it_dynamite</a>) doesn’t
37583
kill <a href="#it_005fdocument">it_document</a>.
37584
</li><li> Bombs <a href="#it_005fbomb">it_bomb</a> aren’t ignited when <a href="#st_005fbox">st_box</a>_wood is pushed over
37585
them (see <code>oxydmagnum</code>-compatibility).
37589
<p><strong><code>per.oxyd</code>-compatibility</strong>
37592
<li> When painted with <a href="#it_005fbrush">it_brush</a>, <a href="#st_005fghost">st_ghost</a>_purplemarble becomes
37593
an open <a href="#st_005ffake">st_fake</a>_oxydc instead of <code>st_purplemarble</code>.
37594
</li><li> <a href="#it_005fhammer">it_hammer</a> doesn’t laser-transform into <a href="#it_005fsword">it_sword</a>.
37595
</li><li> <a href="#it_005fumbrella">it_umbrella</a> doesn’t explode in laser light.
37596
</li><li> <a href="#it_005fcross">it_cross</a> inverts signals it receives.
37600
<p><strong><code>oxyd.magnum</code>-compatibility</strong>
37603
<li> <a href="#it_005fseed">it_seed</a> grows to <a href="#fl_005fwood">fl_wood</a>_framed under <a href="#st_005fgrate">st_grate</a>_cross,
37604
not to <a href="#st_005fbox">st_box</a>_wood.
37605
</li><li> Bombs<a href="#it_005fbomb">it_bomb</a> aren’t ignited when <a href="#st_005fbox">st_box</a>_wood is pushed over
37606
them (see <code>oxyd1</code>-compatibility).
37613
<a name="Object-Index"></a>
37614
<table cellpadding="1" cellspacing="1" border="0">
37615
<tr><td valign="middle" align="left">[<a href="#Engine-Compatibility" title="Previous section in reading order"> < </a>]</td>
37616
<td valign="middle" align="left">[<a href="#Attribute-Index" title="Next section in reading order"> > </a>]</td>
37617
<td valign="middle" align="left"> </td>
37618
<td valign="middle" align="left">[<a href="#Compatibility" title="Beginning of this chapter or previous chapter"> << </a>]</td>
37619
<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up </a>]</td>
37620
<td valign="middle" align="left">[<a href="#Attribute-Index" title="Next chapter"> >> </a>]</td>
37621
<td valign="middle" align="left"> </td>
37622
<td valign="middle" align="left"> </td>
37623
<td valign="middle" align="left"> </td>
37624
<td valign="middle" align="left"> </td>
37625
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
37626
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
37627
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
37628
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
37630
<a name="Object-Index-1"></a>
37631
<h1 class="unnumbered">Object Index</h1>
37633
<table><tr><th valign="top">Jump to: </th><td><a href="#Object-Index-1_ob_letter-A" class="summary-letter"><b>A</b></a>
37635
<a href="#Object-Index-1_ob_letter-F" class="summary-letter"><b>F</b></a>
37637
<a href="#Object-Index-1_ob_letter-I" class="summary-letter"><b>I</b></a>
37639
<a href="#Object-Index-1_ob_letter-N" class="summary-letter"><b>N</b></a>
37641
<a href="#Object-Index-1_ob_letter-O" class="summary-letter"><b>O</b></a>
37643
<a href="#Object-Index-1_ob_letter-S" class="summary-letter"><b>S</b></a>
37646
<table border="0" class="index-ob">
37647
<tr><td></td><th align="left">Index Entry</th><th align="left"> Section</th></tr>
37648
<tr><td colspan="3"> <hr></td></tr>
37649
<tr><th><a name="Object-Index-1_ob_letter-A">A</a></th><td></td><td></td></tr>
37650
<tr><td></td><td valign="top"><a href="#index-ac_005fbug">ac_bug</a></td><td valign="top"><a href="#ac_005fbug">10.2.1 ac_bug</a></td></tr>
37651
<tr><td></td><td valign="top"><a href="#index-ac_005fhorse">ac_horse</a></td><td valign="top"><a href="#ac_005fhorse">10.2.2 ac_horse</a></td></tr>
37652
<tr><td></td><td valign="top"><a href="#index-ac_005fkiller">ac_killer</a></td><td valign="top"><a href="#ac_005fkiller">10.2.3 ac_killer</a></td></tr>
37653
<tr><td></td><td valign="top"><a href="#index-ac_005fmarble">ac_marble</a></td><td valign="top"><a href="#ac_005fmarble">10.2.4 ac_marble</a></td></tr>
37654
<tr><td></td><td valign="top"><a href="#index-ac_005fpearl">ac_pearl</a></td><td valign="top"><a href="#ac_005fpearl">10.2.5 ac_pearl</a></td></tr>
37655
<tr><td></td><td valign="top"><a href="#index-ac_005frotor">ac_rotor</a></td><td valign="top"><a href="#ac_005frotor">10.2.6 ac_rotor</a></td></tr>
37656
<tr><td></td><td valign="top"><a href="#index-ac_005ftop">ac_top</a></td><td valign="top"><a href="#ac_005ftop">10.2.7 ac_top</a></td></tr>
37657
<tr><td colspan="3"> <hr></td></tr>
37658
<tr><th><a name="Object-Index-1_ob_letter-F">F</a></th><td></td><td></td></tr>
37659
<tr><td></td><td valign="top"><a href="#index-fl_005fabyss">fl_abyss</a></td><td valign="top"><a href="#fl_005fabyss">7.4.1 fl_abyss</a></td></tr>
37660
<tr><td></td><td valign="top"><a href="#index-fl_005fadhesionless">fl_adhesionless</a></td><td valign="top"><a href="#fl_005fadhesionless">7.3.1 fl_adhesionless</a></td></tr>
37661
<tr><td></td><td valign="top"><a href="#index-fl_005faquamarine">fl_aquamarine</a></td><td valign="top"><a href="#fl_005faquamarine">7.3.2 fl_aquamarine</a></td></tr>
37662
<tr><td></td><td valign="top"><a href="#index-fl_005fbast">fl_bast</a></td><td valign="top"><a href="#fl_005fbast">7.3.3 fl_bast</a></td></tr>
37663
<tr><td></td><td valign="top"><a href="#index-fl_005fbluegray">fl_bluegray</a></td><td valign="top"><a href="#fl_005fbluegray">7.3.4 fl_bluegray</a></td></tr>
37664
<tr><td></td><td valign="top"><a href="#index-fl_005fbluegreen">fl_bluegreen</a></td><td valign="top"><a href="#fl_005fbluegreen">7.3.5 fl_bluegreen</a></td></tr>
37665
<tr><td></td><td valign="top"><a href="#index-fl_005fblueslab">fl_blueslab</a></td><td valign="top"><a href="#fl_005fblueslab">7.3.6 fl_blueslab</a></td></tr>
37666
<tr><td></td><td valign="top"><a href="#index-fl_005fbrick">fl_brick</a></td><td valign="top"><a href="#fl_005fbrick">7.3.7 fl_brick</a></td></tr>
37667
<tr><td></td><td valign="top"><a href="#index-fl_005fbridge">fl_bridge</a></td><td valign="top"><a href="#fl_005fbridge">7.4.2 fl_bridge</a></td></tr>
37668
<tr><td></td><td valign="top"><a href="#index-fl_005fbright">fl_bright</a></td><td valign="top"><a href="#fl_005fbright">7.3.8 fl_bright</a></td></tr>
37669
<tr><td></td><td valign="top"><a href="#index-fl_005fconcrete">fl_concrete</a></td><td valign="top"><a href="#fl_005fconcrete">7.3.9 fl_concrete</a></td></tr>
37670
<tr><td></td><td valign="top"><a href="#index-fl_005fdark">fl_dark</a></td><td valign="top"><a href="#fl_005fdark">7.3.10 fl_dark</a></td></tr>
37671
<tr><td></td><td valign="top"><a href="#index-fl_005fdarkgray">fl_darkgray</a></td><td valign="top"><a href="#fl_005fdarkgray">7.3.11 fl_darkgray</a></td></tr>
37672
<tr><td></td><td valign="top"><a href="#index-fl_005fdunes">fl_dunes</a></td><td valign="top"><a href="#fl_005fdunes">7.3.12 fl_dunes</a></td></tr>
37673
<tr><td></td><td valign="top"><a href="#index-fl_005ffake">fl_fake</a></td><td valign="top"><a href="#fl_005ffake">7.4.3 fl_fake</a></td></tr>
37674
<tr><td></td><td valign="top"><a href="#index-fl_005fgravel">fl_gravel</a></td><td valign="top"><a href="#fl_005fgravel">7.3.13 fl_gravel</a></td></tr>
37675
<tr><td></td><td valign="top"><a href="#index-fl_005fgray">fl_gray</a></td><td valign="top"><a href="#fl_005fgray">7.3.14 fl_gray</a></td></tr>
37676
<tr><td></td><td valign="top"><a href="#index-fl_005fhay">fl_hay</a></td><td valign="top"><a href="#fl_005fhay">7.4.4 fl_hay</a></td></tr>
37677
<tr><td></td><td valign="top"><a href="#index-fl_005fhimalaya">fl_himalaya</a></td><td valign="top"><a href="#fl_005fhimalaya">7.3.15 fl_himalaya</a></td></tr>
37678
<tr><td></td><td valign="top"><a href="#index-fl_005fice">fl_ice</a></td><td valign="top"><a href="#fl_005fice">7.4.5 fl_ice</a></td></tr>
37679
<tr><td></td><td valign="top"><a href="#index-fl_005finverse">fl_inverse</a></td><td valign="top"><a href="#fl_005finverse">7.4.6 fl_inverse</a></td></tr>
37680
<tr><td></td><td valign="top"><a href="#index-fl_005fivory">fl_ivory</a></td><td valign="top"><a href="#fl_005fivory">7.3.16 fl_ivory</a></td></tr>
37681
<tr><td></td><td valign="top"><a href="#index-fl_005flawn">fl_lawn</a></td><td valign="top"><a href="#fl_005flawn">7.3.17 fl_lawn</a></td></tr>
37682
<tr><td></td><td valign="top"><a href="#index-fl_005fmarble">fl_marble</a></td><td valign="top"><a href="#fl_005fmarble">7.3.18 fl_marble</a></td></tr>
37683
<tr><td></td><td valign="top"><a href="#index-fl_005fmetal">fl_metal</a></td><td valign="top"><a href="#fl_005fmetal">7.3.19 fl_metal</a></td></tr>
37684
<tr><td></td><td valign="top"><a href="#index-fl_005fmortar">fl_mortar</a></td><td valign="top"><a href="#fl_005fmortar">7.3.20 fl_mortar</a></td></tr>
37685
<tr><td></td><td valign="top"><a href="#index-fl_005fnil">fl_nil</a></td><td valign="top"><a href="#Tile-and-Object-Declaration">5.11 Tile and Object Declaration</a></td></tr>
37686
<tr><td></td><td valign="top"><a href="#index-fl_005fpinkbumps">fl_pinkbumps</a></td><td valign="top"><a href="#fl_005fpinkbumps">7.3.21 fl_pinkbumps</a></td></tr>
37687
<tr><td></td><td valign="top"><a href="#index-fl_005fplank">fl_plank</a></td><td valign="top"><a href="#fl_005fplank">7.3.22 fl_plank</a></td></tr>
37688
<tr><td></td><td valign="top"><a href="#index-fl_005fplatinum">fl_platinum</a></td><td valign="top"><a href="#fl_005fplatinum">7.3.23 fl_platinum</a></td></tr>
37689
<tr><td></td><td valign="top"><a href="#index-fl_005fred">fl_red</a></td><td valign="top"><a href="#fl_005fred">7.3.24 fl_red</a></td></tr>
37690
<tr><td></td><td valign="top"><a href="#index-fl_005fredslab">fl_redslab</a></td><td valign="top"><a href="#fl_005fredslab">7.3.25 fl_redslab</a></td></tr>
37691
<tr><td></td><td valign="top"><a href="#index-fl_005frock">fl_rock</a></td><td valign="top"><a href="#fl_005frock">7.4.7 fl_rock</a></td></tr>
37692
<tr><td></td><td valign="top"><a href="#index-fl_005frough">fl_rough</a></td><td valign="top"><a href="#fl_005frough">7.3.26 fl_rough</a></td></tr>
37693
<tr><td></td><td valign="top"><a href="#index-fl_005fsahara">fl_sahara</a></td><td valign="top"><a href="#fl_005fsahara">7.3.27 fl_sahara</a></td></tr>
37694
<tr><td></td><td valign="top"><a href="#index-fl_005fsamba">fl_samba</a></td><td valign="top"><a href="#fl_005fsamba">7.3.28 fl_samba</a></td></tr>
37695
<tr><td></td><td valign="top"><a href="#index-fl_005fsand">fl_sand</a></td><td valign="top"><a href="#fl_005fsand">7.3.29 fl_sand</a></td></tr>
37696
<tr><td></td><td valign="top"><a href="#index-fl_005fscales">fl_scales</a></td><td valign="top"><a href="#fl_005fscales">7.4.8 fl_scales</a></td></tr>
37697
<tr><td></td><td valign="top"><a href="#index-fl_005fslope">fl_slope</a></td><td valign="top"><a href="#fl_005fslope">7.4.9 fl_slope</a></td></tr>
37698
<tr><td></td><td valign="top"><a href="#index-fl_005fspace">fl_space</a></td><td valign="top"><a href="#fl_005fspace">7.3.30 fl_space</a></td></tr>
37699
<tr><td></td><td valign="top"><a href="#index-fl_005fstone">fl_stone</a></td><td valign="top"><a href="#fl_005fstone">7.3.31 fl_stone</a></td></tr>
37700
<tr><td></td><td valign="top"><a href="#index-fl_005fswamp">fl_swamp</a></td><td valign="top"><a href="#fl_005fswamp">7.4.10 fl_swamp</a></td></tr>
37701
<tr><td></td><td valign="top"><a href="#index-fl_005fthief">fl_thief</a></td><td valign="top"><a href="#fl_005fthief">7.4.11 fl_thief</a></td></tr>
37702
<tr><td></td><td valign="top"><a href="#index-fl_005ftigris">fl_tigris</a></td><td valign="top"><a href="#fl_005ftigris">7.3.32 fl_tigris</a></td></tr>
37703
<tr><td></td><td valign="top"><a href="#index-fl_005fwater">fl_water</a></td><td valign="top"><a href="#fl_005fwater">7.4.12 fl_water</a></td></tr>
37704
<tr><td></td><td valign="top"><a href="#index-fl_005fwhite">fl_white</a></td><td valign="top"><a href="#fl_005fwhite">7.3.33 fl_white</a></td></tr>
37705
<tr><td></td><td valign="top"><a href="#index-fl_005fwood">fl_wood</a></td><td valign="top"><a href="#fl_005fwood">7.4.13 fl_wood</a></td></tr>
37706
<tr><td></td><td valign="top"><a href="#index-fl_005fwoven">fl_woven</a></td><td valign="top"><a href="#fl_005fwoven">7.3.34 fl_woven</a></td></tr>
37707
<tr><td></td><td valign="top"><a href="#index-fl_005fyinyang">fl_yinyang</a></td><td valign="top"><a href="#fl_005fyinyang">7.4.14 fl_yinyang</a></td></tr>
37708
<tr><td colspan="3"> <hr></td></tr>
37709
<tr><th><a name="Object-Index-1_ob_letter-I">I</a></th><td></td><td></td></tr>
37710
<tr><td></td><td valign="top"><a href="#index-it_005fbag">it_bag</a></td><td valign="top"><a href="#it_005fbag">8.3.1 it_bag</a></td></tr>
37711
<tr><td></td><td valign="top"><a href="#index-it_005fbanana">it_banana</a></td><td valign="top"><a href="#it_005fbanana">8.3.2 it_banana</a></td></tr>
37712
<tr><td></td><td valign="top"><a href="#index-it_005fblocker">it_blocker</a></td><td valign="top"><a href="#it_005fblocker">8.4.1 it_blocker</a></td></tr>
37713
<tr><td></td><td valign="top"><a href="#index-it_005fbomb">it_bomb</a></td><td valign="top"><a href="#it_005fbomb">8.4.2 it_bomb</a></td></tr>
37714
<tr><td></td><td valign="top"><a href="#index-it_005fbottle">it_bottle</a></td><td valign="top"><a href="#it_005fbottle">8.3.3 it_bottle</a></td></tr>
37715
<tr><td></td><td valign="top"><a href="#index-it_005fbrake">it_brake</a></td><td valign="top"><a href="#it_005fbrake">8.3.4 it_brake</a></td></tr>
37716
<tr><td></td><td valign="top"><a href="#index-it_005fbrush">it_brush</a></td><td valign="top"><a href="#it_005fbrush">8.3.5 it_brush</a></td></tr>
37717
<tr><td></td><td valign="top"><a href="#index-it_005fburnable">it_burnable</a></td><td valign="top"><a href="#it_005fburnable">8.4.3 it_burnable</a></td></tr>
37718
<tr><td></td><td valign="top"><a href="#index-it_005fcherry">it_cherry</a></td><td valign="top"><a href="#it_005fcherry">8.3.6 it_cherry</a></td></tr>
37719
<tr><td></td><td valign="top"><a href="#index-it_005fcoffee">it_coffee</a></td><td valign="top"><a href="#it_005fcoffee">8.3.7 it_coffee</a></td></tr>
37720
<tr><td></td><td valign="top"><a href="#index-it_005fcoin">it_coin</a></td><td valign="top"><a href="#it_005fcoin">8.3.8 it_coin</a></td></tr>
37721
<tr><td></td><td valign="top"><a href="#index-it_005fcrack">it_crack</a></td><td valign="top"><a href="#it_005fcrack">8.4.4 it_crack</a></td></tr>
37722
<tr><td></td><td valign="top"><a href="#index-it_005fcross">it_cross</a></td><td valign="top"><a href="#it_005fcross">8.4.5 it_cross</a></td></tr>
37723
<tr><td></td><td valign="top"><a href="#index-it_005fdeath">it_death</a></td><td valign="top"><a href="#it_005fdeath">8.4.6 it_death</a></td></tr>
37724
<tr><td></td><td valign="top"><a href="#index-it_005fdocument">it_document</a></td><td valign="top"><a href="#it_005fdocument">8.3.9 it_document</a></td></tr>
37725
<tr><td></td><td valign="top"><a href="#index-it_005fdrop">it_drop</a></td><td valign="top"><a href="#it_005fdrop">8.3.10 it_drop</a></td></tr>
37726
<tr><td></td><td valign="top"><a href="#index-it_005fdynamite">it_dynamite</a></td><td valign="top"><a href="#it_005fdynamite">8.3.11 it_dynamite</a></td></tr>
37727
<tr><td></td><td valign="top"><a href="#index-it_005fexplosion">it_explosion</a></td><td valign="top"><a href="#it_005fexplosion">8.4.7 it_explosion</a></td></tr>
37728
<tr><td></td><td valign="top"><a href="#index-it_005fextinguisher">it_extinguisher</a></td><td valign="top"><a href="#it_005fextinguisher">8.3.12 it_extinguisher</a></td></tr>
37729
<tr><td></td><td valign="top"><a href="#index-it_005fextralife">it_extralife</a></td><td valign="top"><a href="#it_005fextralife">8.3.13 it_extralife</a></td></tr>
37730
<tr><td></td><td valign="top"><a href="#index-it_005fflag">it_flag</a></td><td valign="top"><a href="#it_005fflag">8.3.14 it_flag</a></td></tr>
37731
<tr><td></td><td valign="top"><a href="#index-it_005ffloppy">it_floppy</a></td><td valign="top"><a href="#it_005ffloppy">8.3.15 it_floppy</a></td></tr>
37732
<tr><td></td><td valign="top"><a href="#index-it_005fglasses">it_glasses</a></td><td valign="top"><a href="#it_005fglasses">8.3.16 it_glasses</a></td></tr>
37733
<tr><td></td><td valign="top"><a href="#index-it_005fhammer">it_hammer</a></td><td valign="top"><a href="#it_005fhammer">8.3.17 it_hammer</a></td></tr>
37734
<tr><td></td><td valign="top"><a href="#index-it_005fkey">it_key</a></td><td valign="top"><a href="#it_005fkey">8.3.18 it_key</a></td></tr>
37735
<tr><td></td><td valign="top"><a href="#index-it_005flandmine">it_landmine</a></td><td valign="top"><a href="#it_005flandmine">8.4.8 it_landmine</a></td></tr>
37736
<tr><td></td><td valign="top"><a href="#index-it_005flaserbeam">it_laserbeam</a></td><td valign="top"><a href="#it_005flaserbeam">8.4.9 it_laserbeam</a></td></tr>
37737
<tr><td></td><td valign="top"><a href="#index-it_005fmagicwand">it_magicwand</a></td><td valign="top"><a href="#it_005fmagicwand">8.3.19 it_magicwand</a></td></tr>
37738
<tr><td></td><td valign="top"><a href="#index-it_005fmagnet">it_magnet</a></td><td valign="top"><a href="#it_005fmagnet">8.4.10 it_magnet</a></td></tr>
37739
<tr><td></td><td valign="top"><a href="#index-it_005fmeditation">it_meditation</a></td><td valign="top"><a href="#it_005fmeditation">8.4.11 it_meditation</a></td></tr>
37740
<tr><td></td><td valign="top"><a href="#index-it_005fnil">it_nil</a></td><td valign="top"><a href="#Tile-and-Object-Declaration">5.11 Tile and Object Declaration</a></td></tr>
37741
<tr><td></td><td valign="top"><a href="#index-it_005fpencil">it_pencil</a></td><td valign="top"><a href="#it_005fpencil">8.3.20 it_pencil</a></td></tr>
37742
<tr><td></td><td valign="top"><a href="#index-it_005fpin">it_pin</a></td><td valign="top"><a href="#it_005fpin">8.3.21 it_pin</a></td></tr>
37743
<tr><td></td><td valign="top"><a href="#index-it_005fpipe">it_pipe</a></td><td valign="top"><a href="#it_005fpipe">8.3.22 it_pipe</a></td></tr>
37744
<tr><td></td><td valign="top"><a href="#index-it_005fpuller">it_puller</a></td><td valign="top"><a href="#it_005fpuller">8.3.23 it_puller</a></td></tr>
37745
<tr><td></td><td valign="top"><a href="#index-it_005fring">it_ring</a></td><td valign="top"><a href="#it_005fring">8.3.24 it_ring</a></td></tr>
37746
<tr><td></td><td valign="top"><a href="#index-it_005frubberband">it_rubberband</a></td><td valign="top"><a href="#it_005frubberband">8.3.25 it_rubberband</a></td></tr>
37747
<tr><td></td><td valign="top"><a href="#index-it_005fseed">it_seed</a></td><td valign="top"><a href="#it_005fseed">8.3.26 it_seed</a></td></tr>
37748
<tr><td></td><td valign="top"><a href="#index-it_005fsensor">it_sensor</a></td><td valign="top"><a href="#it_005fsensor">8.4.12 it_sensor</a></td></tr>
37749
<tr><td></td><td valign="top"><a href="#index-it_005fshogun">it_shogun</a></td><td valign="top"><a href="#it_005fshogun">8.4.13 it_shogun</a></td></tr>
37750
<tr><td></td><td valign="top"><a href="#index-it_005fspade">it_spade</a></td><td valign="top"><a href="#it_005fspade">8.3.27 it_spade</a></td></tr>
37751
<tr><td></td><td valign="top"><a href="#index-it_005fspoon">it_spoon</a></td><td valign="top"><a href="#it_005fspoon">8.3.28 it_spoon</a></td></tr>
37752
<tr><td></td><td valign="top"><a href="#index-it_005fspring">it_spring</a></td><td valign="top"><a href="#it_005fspring">8.3.29 it_spring</a></td></tr>
37753
<tr><td></td><td valign="top"><a href="#index-it_005fspringboard">it_springboard</a></td><td valign="top"><a href="#it_005fspringboard">8.4.14 it_springboard</a></td></tr>
37754
<tr><td></td><td valign="top"><a href="#index-it_005fsquashed">it_squashed</a></td><td valign="top"><a href="#it_005fsquashed">8.4.15 it_squashed</a></td></tr>
37755
<tr><td></td><td valign="top"><a href="#index-it_005fstrip">it_strip</a></td><td valign="top"><a href="#it_005fstrip">8.4.16 it_strip</a></td></tr>
37756
<tr><td></td><td valign="top"><a href="#index-it_005fsurprise">it_surprise</a></td><td valign="top"><a href="#it_005fsurprise">8.3.30 it_surprise</a></td></tr>
37757
<tr><td></td><td valign="top"><a href="#index-it_005fsword">it_sword</a></td><td valign="top"><a href="#it_005fsword">8.3.31 it_sword</a></td></tr>
37758
<tr><td></td><td valign="top"><a href="#index-it_005ftrap">it_trap</a></td><td valign="top"><a href="#it_005ftrap">8.4.17 it_trap</a></td></tr>
37759
<tr><td></td><td valign="top"><a href="#index-it_005ftrigger">it_trigger</a></td><td valign="top"><a href="#it_005ftrigger">8.4.18 it_trigger</a></td></tr>
37760
<tr><td></td><td valign="top"><a href="#index-it_005fumbrella">it_umbrella</a></td><td valign="top"><a href="#it_005fumbrella">8.3.32 it_umbrella</a></td></tr>
37761
<tr><td></td><td valign="top"><a href="#index-it_005fvortex">it_vortex</a></td><td valign="top"><a href="#it_005fvortex">8.4.19 it_vortex</a></td></tr>
37762
<tr><td></td><td valign="top"><a href="#index-it_005fweight">it_weight</a></td><td valign="top"><a href="#it_005fweight">8.3.33 it_weight</a></td></tr>
37763
<tr><td></td><td valign="top"><a href="#index-it_005fwormhole">it_wormhole</a></td><td valign="top"><a href="#it_005fwormhole">8.4.20 it_wormhole</a></td></tr>
37764
<tr><td></td><td valign="top"><a href="#index-it_005fwrench">it_wrench</a></td><td valign="top"><a href="#it_005fwrench">8.3.34 it_wrench</a></td></tr>
37765
<tr><td></td><td valign="top"><a href="#index-it_005fyinyang">it_yinyang</a></td><td valign="top"><a href="#it_005fyinyang">8.3.35 it_yinyang</a></td></tr>
37766
<tr><td colspan="3"> <hr></td></tr>
37767
<tr><th><a name="Object-Index-1_ob_letter-N">N</a></th><td></td><td></td></tr>
37768
<tr><td></td><td valign="top"><a href="#index-nil">nil</a></td><td valign="top"><a href="#Tile-and-Object-Declaration">5.11 Tile and Object Declaration</a></td></tr>
37769
<tr><td colspan="3"> <hr></td></tr>
37770
<tr><th><a name="Object-Index-1_ob_letter-O">O</a></th><td></td><td></td></tr>
37771
<tr><td></td><td valign="top"><a href="#index-ot_005fcannonball">ot_cannonball</a></td><td valign="top"><a href="#ot_005fcannonball">11.1.1 ot_cannonball</a></td></tr>
37772
<tr><td></td><td valign="top"><a href="#index-ot_005fcounter">ot_counter</a></td><td valign="top"><a href="#ot_005fcounter">11.2.1 ot_counter</a></td></tr>
37773
<tr><td></td><td valign="top"><a href="#index-ot_005frubberband">ot_rubberband</a></td><td valign="top"><a href="#ot_005frubberband">11.1.2 ot_rubberband</a></td></tr>
37774
<tr><td></td><td valign="top"><a href="#index-ot_005ftimer">ot_timer</a></td><td valign="top"><a href="#ot_005ftimer">11.2.2 ot_timer</a></td></tr>
37775
<tr><td></td><td valign="top"><a href="#index-ot_005fwire">ot_wire</a></td><td valign="top"><a href="#ot_005fwire">11.1.3 ot_wire</a></td></tr>
37776
<tr><td colspan="3"> <hr></td></tr>
37777
<tr><th><a name="Object-Index-1_ob_letter-S">S</a></th><td></td><td></td></tr>
37778
<tr><td></td><td valign="top"><a href="#index-st_005factorimpulse">st_actorimpulse</a></td><td valign="top"><a href="#st_005factorimpulse">9.5.1 st_actorimpulse</a></td></tr>
37779
<tr><td></td><td valign="top"><a href="#index-st_005fancient">st_ancient</a></td><td valign="top"><a href="#st_005fancient">9.3.1 st_ancient</a></td></tr>
37780
<tr><td></td><td valign="top"><a href="#index-st_005fbarrier">st_barrier</a></td><td valign="top"><a href="#st_005fbarrier">9.5.2 st_barrier</a></td></tr>
37781
<tr><td></td><td valign="top"><a href="#index-st_005fbeads">st_beads</a></td><td valign="top"><a href="#st_005fbeads">9.5.3 st_beads</a></td></tr>
37782
<tr><td></td><td valign="top"><a href="#index-st_005fblocker">st_blocker</a></td><td valign="top"><a href="#st_005fblocker">9.5.4 st_blocker</a></td></tr>
37783
<tr><td></td><td valign="top"><a href="#index-st_005fbluegray">st_bluegray</a></td><td valign="top"><a href="#st_005fbluegray">9.3.2 st_bluegray</a></td></tr>
37784
<tr><td></td><td valign="top"><a href="#index-st_005fbluesand">st_bluesand</a></td><td valign="top"><a href="#st_005fbluesand">9.4.2 st_bluesand</a></td></tr>
37785
<tr><td></td><td valign="top"><a href="#index-st_005fblur">st_blur</a></td><td valign="top"><a href="#st_005fblur">9.5.5 st_blur</a></td></tr>
37786
<tr><td></td><td valign="top"><a href="#index-st_005fboulder">st_boulder</a></td><td valign="top"><a href="#st_005fboulder">9.5.6 st_boulder</a></td></tr>
37787
<tr><td></td><td valign="top"><a href="#index-st_005fbox">st_box</a></td><td valign="top"><a href="#st_005fbox">9.5.7 st_box</a></td></tr>
37788
<tr><td></td><td valign="top"><a href="#index-st_005fbrake">st_brake</a></td><td valign="top"><a href="#st_005fbrake">9.5.8 st_brake</a></td></tr>
37789
<tr><td></td><td valign="top"><a href="#index-st_005fbreak">st_break</a></td><td valign="top"><a href="#st_005fbreak">9.5.9 st_break</a></td></tr>
37790
<tr><td></td><td valign="top"><a href="#index-st_005fbrick">st_brick</a></td><td valign="top"><a href="#st_005fbrick">9.4.3 st_brick</a></td></tr>
37791
<tr><td></td><td valign="top"><a href="#index-st_005fbrownie">st_brownie</a></td><td valign="top"><a href="#st_005fbrownie">9.3.3 st_brownie</a></td></tr>
37792
<tr><td></td><td valign="top"><a href="#index-st_005fbrownmarble">st_brownmarble</a></td><td valign="top"><a href="#st_005fbrownmarble">9.3.4 st_brownmarble</a></td></tr>
37793
<tr><td></td><td valign="top"><a href="#index-st_005fbrownpyramid">st_brownpyramid</a></td><td valign="top"><a href="#st_005fbrownpyramid">9.5.10 st_brownpyramid</a></td></tr>
37794
<tr><td></td><td valign="top"><a href="#index-st_005fcamouflage">st_camouflage</a></td><td valign="top"><a href="#st_005fcamouflage">9.3.5 st_camouflage</a></td></tr>
37795
<tr><td></td><td valign="top"><a href="#index-st_005fchameleon">st_chameleon</a></td><td valign="top"><a href="#st_005fchameleon">9.5.11 st_chameleon</a></td></tr>
37796
<tr><td></td><td valign="top"><a href="#index-st_005fcharge">st_charge</a></td><td valign="top"><a href="#st_005fcharge">9.5.12 st_charge</a></td></tr>
37797
<tr><td></td><td valign="top"><a href="#index-st_005fchess">st_chess</a></td><td valign="top"><a href="#st_005fchess">9.5.13 st_chess</a></td></tr>
37798
<tr><td></td><td valign="top"><a href="#index-st_005fcoinslot">st_coinslot</a></td><td valign="top"><a href="#st_005fcoinslot">9.5.14 st_coinslot</a></td></tr>
37799
<tr><td></td><td valign="top"><a href="#index-st_005fconcrete">st_concrete</a></td><td valign="top"><a href="#st_005fconcrete">9.3.6 st_concrete</a></td></tr>
37800
<tr><td></td><td valign="top"><a href="#index-st_005fdarkglass">st_darkglass</a></td><td valign="top"><a href="#st_005fdarkglass">9.5.15 st_darkglass</a></td></tr>
37801
<tr><td></td><td valign="top"><a href="#index-st_005fdarkgray">st_darkgray</a></td><td valign="top"><a href="#st_005fdarkgray">9.3.7 st_darkgray</a></td></tr>
37802
<tr><td></td><td valign="top"><a href="#index-st_005fdeath">st_death</a></td><td valign="top"><a href="#st_005fdeath">9.5.16 st_death</a></td></tr>
37803
<tr><td></td><td valign="top"><a href="#index-st_005fdisco">st_disco</a></td><td valign="top"><a href="#st_005fdisco">9.5.17 st_disco</a></td></tr>
37804
<tr><td></td><td valign="top"><a href="#index-st_005fdispenser">st_dispenser</a></td><td valign="top"><a href="#st_005fdispenser">9.5.18 st_dispenser</a></td></tr>
37805
<tr><td></td><td valign="top"><a href="#index-st_005fdoor">st_door</a></td><td valign="top"><a href="#st_005fdoor">9.5.19 st_door</a></td></tr>
37806
<tr><td></td><td valign="top"><a href="#index-st_005ffake">st_fake</a></td><td valign="top"><a href="#st_005ffake">9.5.20 st_fake</a></td></tr>
37807
<tr><td></td><td valign="top"><a href="#index-st_005fflash">st_flash</a></td><td valign="top"><a href="#st_005fflash">9.5.21 st_flash</a></td></tr>
37808
<tr><td></td><td valign="top"><a href="#index-st_005fflat">st_flat</a></td><td valign="top"><a href="#st_005fflat">9.5.22 st_flat</a></td></tr>
37809
<tr><td></td><td valign="top"><a href="#index-st_005ffloppy">st_floppy</a></td><td valign="top"><a href="#st_005ffloppy">9.5.23 st_floppy</a></td></tr>
37810
<tr><td></td><td valign="top"><a href="#index-st_005ffourswitch">st_fourswitch</a></td><td valign="top"><a href="#st_005ffourswitch">9.5.24 st_fourswitch</a></td></tr>
37811
<tr><td></td><td valign="top"><a href="#index-st_005fghost">st_ghost</a></td><td valign="top"><a href="#st_005fghost">9.5.25 st_ghost</a></td></tr>
37812
<tr><td></td><td valign="top"><a href="#index-st_005fgranite">st_granite</a></td><td valign="top"><a href="#st_005fgranite">9.3.8 st_granite</a></td></tr>
37813
<tr><td></td><td valign="top"><a href="#index-st_005fgrate">st_grate</a></td><td valign="top"><a href="#st_005fgrate">9.5.26 st_grate</a></td></tr>
37814
<tr><td></td><td valign="top"><a href="#index-st_005fgreenbrown">st_greenbrown</a></td><td valign="top"><a href="#st_005fgreenbrown">9.5.27 st_greenbrown</a></td></tr>
37815
<tr><td></td><td valign="top"><a href="#index-st_005fgreengray">st_greengray</a></td><td valign="top"><a href="#st_005fgreengray">9.3.9 st_greengray</a></td></tr>
37816
<tr><td></td><td valign="top"><a href="#index-st_005fice">st_ice</a></td><td valign="top"><a href="#st_005fice">9.5.28 st_ice</a></td></tr>
37817
<tr><td></td><td valign="top"><a href="#index-st_005finvisible">st_invisible</a></td><td valign="top"><a href="#st_005finvisible">9.3.10 st_invisible</a></td></tr>
37818
<tr><td></td><td valign="top"><a href="#index-st_005fjamb">st_jamb</a></td><td valign="top"><a href="#st_005fjamb">9.5.29 st_jamb</a></td></tr>
37819
<tr><td></td><td valign="top"><a href="#index-st_005fkey">st_key</a></td><td valign="top"><a href="#st_005fkey">9.5.30 st_key</a></td></tr>
37820
<tr><td></td><td valign="top"><a href="#index-st_005fknight">st_knight</a></td><td valign="top"><a href="#st_005fknight">9.5.31 st_knight</a></td></tr>
37821
<tr><td></td><td valign="top"><a href="#index-st_005flaser">st_laser</a></td><td valign="top"><a href="#st_005flaser">9.5.32 st_laser</a></td></tr>
37822
<tr><td></td><td valign="top"><a href="#index-st_005flaserflop">st_laserflop</a></td><td valign="top"><a href="#st_005flaserflop">9.5.33 st_laserflop</a></td></tr>
37823
<tr><td></td><td valign="top"><a href="#index-st_005flaserswitch">st_laserswitch</a></td><td valign="top"><a href="#st_005flaserswitch">9.5.34 st_laserswitch</a></td></tr>
37824
<tr><td></td><td valign="top"><a href="#index-st_005flightglass">st_lightglass</a></td><td valign="top"><a href="#st_005flightglass">9.5.35 st_lightglass</a></td></tr>
37825
<tr><td></td><td valign="top"><a href="#index-st_005flightpassenger">st_lightpassenger</a></td><td valign="top"><a href="#st_005flightpassenger">9.5.36 st_lightpassenger</a></td></tr>
37826
<tr><td></td><td valign="top"><a href="#index-st_005fmagic">st_magic</a></td><td valign="top"><a href="#st_005fmagic">9.5.37 st_magic</a></td></tr>
37827
<tr><td></td><td valign="top"><a href="#index-st_005fmail">st_mail</a></td><td valign="top"><a href="#st_005fmail">9.5.38 st_mail</a></td></tr>
37828
<tr><td></td><td valign="top"><a href="#index-st_005fmetal">st_metal</a></td><td valign="top"><a href="#st_005fmetal">9.3.11 st_metal</a></td></tr>
37829
<tr><td></td><td valign="top"><a href="#index-st_005fmirror">st_mirror</a></td><td valign="top"><a href="#st_005fmirror">9.5.39 st_mirror</a></td></tr>
37830
<tr><td></td><td valign="top"><a href="#index-st_005fmonoflop">st_monoflop</a></td><td valign="top"><a href="#st_005fmonoflop">9.5.40 st_monoflop</a></td></tr>
37831
<tr><td></td><td valign="top"><a href="#index-st_005fnil">st_nil</a></td><td valign="top"><a href="#Tile-and-Object-Declaration">5.11 Tile and Object Declaration</a></td></tr>
37832
<tr><td></td><td valign="top"><a href="#index-st_005foneway">st_oneway</a></td><td valign="top"><a href="#st_005foneway">9.5.41 st_oneway</a></td></tr>
37833
<tr><td></td><td valign="top"><a href="#index-st_005foxyd">st_oxyd</a></td><td valign="top"><a href="#st_005foxyd">9.5.42 st_oxyd</a></td></tr>
37834
<tr><td></td><td valign="top"><a href="#index-st_005fpanel">st_panel</a></td><td valign="top"><a href="#st_005fpanel">9.4.4 st_panel</a></td></tr>
37835
<tr><td></td><td valign="top"><a href="#index-st_005fpassage">st_passage</a></td><td valign="top"><a href="#st_005fpassage">9.5.43 st_passage</a></td></tr>
37836
<tr><td></td><td valign="top"><a href="#index-st_005fpinkbumps">st_pinkbumps</a></td><td valign="top"><a href="#st_005fpinkbumps">9.3.12 st_pinkbumps</a></td></tr>
37837
<tr><td></td><td valign="top"><a href="#index-st_005fplaster">st_plaster</a></td><td valign="top"><a href="#st_005fplaster">9.5.44 st_plaster</a></td></tr>
37838
<tr><td></td><td valign="top"><a href="#index-st_005fplop">st_plop</a></td><td valign="top"><a href="#st_005fplop">9.5.45 st_plop</a></td></tr>
37839
<tr><td></td><td valign="top"><a href="#index-st_005fpolarswitch">st_polarswitch</a></td><td valign="top"><a href="#st_005fpolarswitch">9.5.46 st_polarswitch</a></td></tr>
37840
<tr><td></td><td valign="top"><a href="#index-st_005fportal">st_portal</a></td><td valign="top"><a href="#st_005fportal">9.5.47 st_portal</a></td></tr>
37841
<tr><td></td><td valign="top"><a href="#index-st_005fpull">st_pull</a></td><td valign="top"><a href="#st_005fpull">9.5.48 st_pull</a></td></tr>
37842
<tr><td></td><td valign="top"><a href="#index-st_005fpurplegray">st_purplegray</a></td><td valign="top"><a href="#st_005fpurplegray">9.3.13 st_purplegray</a></td></tr>
37843
<tr><td></td><td valign="top"><a href="#index-st_005fpurplemarble">st_purplemarble</a></td><td valign="top"><a href="#st_005fpurplemarble">9.3.14 st_purplemarble</a></td></tr>
37844
<tr><td></td><td valign="top"><a href="#index-st_005fpuzzle">st_puzzle</a></td><td valign="top"><a href="#st_005fpuzzle">9.5.49 st_puzzle</a></td></tr>
37845
<tr><td></td><td valign="top"><a href="#index-st_005fquake">st_quake</a></td><td valign="top"><a href="#st_005fquake">9.5.50 st_quake</a></td></tr>
37846
<tr><td></td><td valign="top"><a href="#index-st_005frawglass">st_rawglass</a></td><td valign="top"><a href="#st_005frawglass">9.5.51 st_rawglass</a></td></tr>
37847
<tr><td></td><td valign="top"><a href="#index-st_005fredbrown">st_redbrown</a></td><td valign="top"><a href="#st_005fredbrown">9.3.15 st_redbrown</a></td></tr>
37848
<tr><td></td><td valign="top"><a href="#index-st_005fredfiber">st_redfiber</a></td><td valign="top"><a href="#st_005fredfiber">9.5.52 st_redfiber</a></td></tr>
37849
<tr><td></td><td valign="top"><a href="#index-st_005fredmarble">st_redmarble</a></td><td valign="top"><a href="#st_005fredmarble">9.3.16 st_redmarble</a></td></tr>
37850
<tr><td></td><td valign="top"><a href="#index-st_005fredrock">st_redrock</a></td><td valign="top"><a href="#st_005fredrock">9.3.17 st_redrock</a></td></tr>
37851
<tr><td></td><td valign="top"><a href="#index-st_005frotator">st_rotator</a></td><td valign="top"><a href="#st_005frotator">9.5.53 st_rotator</a></td></tr>
37852
<tr><td></td><td valign="top"><a href="#index-st_005frubberband">st_rubberband</a></td><td valign="top"><a href="#st_005frubberband">9.5.54 st_rubberband</a></td></tr>
37853
<tr><td></td><td valign="top"><a href="#index-st_005fscissors">st_scissors</a></td><td valign="top"><a href="#st_005fscissors">9.5.55 st_scissors</a></td></tr>
37854
<tr><td></td><td valign="top"><a href="#index-st_005fshogun">st_shogun</a></td><td valign="top"><a href="#st_005fshogun">9.5.56 st_shogun</a></td></tr>
37855
<tr><td></td><td valign="top"><a href="#index-st_005fspitter">st_spitter</a></td><td valign="top"><a href="#st_005fspitter">9.5.57 st_spitter</a></td></tr>
37856
<tr><td></td><td valign="top"><a href="#index-st_005fstoneimpulse">st_stoneimpulse</a></td><td valign="top"><a href="#st_005fstoneimpulse">9.5.58 st_stoneimpulse</a></td></tr>
37857
<tr><td></td><td valign="top"><a href="#index-st_005fsurprise">st_surprise</a></td><td valign="top"><a href="#st_005fsurprise">9.5.59 st_surprise</a></td></tr>
37858
<tr><td></td><td valign="top"><a href="#index-st_005fswap">st_swap</a></td><td valign="top"><a href="#st_005fswap">9.5.60 st_swap</a></td></tr>
37859
<tr><td></td><td valign="top"><a href="#index-st_005fswitch">st_switch</a></td><td valign="top"><a href="#st_005fswitch">9.5.61 st_switch</a></td></tr>
37860
<tr><td></td><td valign="top"><a href="#index-st_005fthief">st_thief</a></td><td valign="top"><a href="#st_005fthief">9.5.62 st_thief</a></td></tr>
37861
<tr><td></td><td valign="top"><a href="#index-st_005ftigris">st_tigris</a></td><td valign="top"><a href="#st_005ftigris">9.3.18 st_tigris</a></td></tr>
37862
<tr><td></td><td valign="top"><a href="#index-st_005ftimer">st_timer</a></td><td valign="top"><a href="#st_005ftimer">9.5.63 st_timer</a></td></tr>
37863
<tr><td></td><td valign="top"><a href="#index-st_005fturnstile">st_turnstile</a></td><td valign="top"><a href="#st_005fturnstile">9.5.64 st_turnstile</a></td></tr>
37864
<tr><td></td><td valign="top"><a href="#index-st_005fturnstilearm">st_turnstilearm</a></td><td valign="top"><a href="#st_005fturnstilearm">9.5.65 st_turnstilearm</a></td></tr>
37865
<tr><td></td><td valign="top"><a href="#index-st_005fvolcano">st_volcano</a></td><td valign="top"><a href="#st_005fvolcano">9.5.66 st_volcano</a></td></tr>
37866
<tr><td></td><td valign="top"><a href="#index-st_005fwindow">st_window</a></td><td valign="top"><a href="#st_005fwindow">9.5.67 st_window</a></td></tr>
37867
<tr><td></td><td valign="top"><a href="#index-st_005fwoven">st_woven</a></td><td valign="top"><a href="#st_005fwoven">9.3.19 st_woven</a></td></tr>
37868
<tr><td></td><td valign="top"><a href="#index-st_005fyellow">st_yellow</a></td><td valign="top"><a href="#st_005fyellow">9.3.20 st_yellow</a></td></tr>
37869
<tr><td></td><td valign="top"><a href="#index-st_005fyinyang">st_yinyang</a></td><td valign="top"><a href="#st_005fyinyang">9.5.68 st_yinyang</a></td></tr>
37870
<tr><td colspan="3"> <hr></td></tr>
37872
<table><tr><th valign="top">Jump to: </th><td><a href="#Object-Index-1_ob_letter-A" class="summary-letter"><b>A</b></a>
37874
<a href="#Object-Index-1_ob_letter-F" class="summary-letter"><b>F</b></a>
37876
<a href="#Object-Index-1_ob_letter-I" class="summary-letter"><b>I</b></a>
37878
<a href="#Object-Index-1_ob_letter-N" class="summary-letter"><b>N</b></a>
37880
<a href="#Object-Index-1_ob_letter-O" class="summary-letter"><b>O</b></a>
37882
<a href="#Object-Index-1_ob_letter-S" class="summary-letter"><b>S</b></a>
37887
<a name="Attribute-Index"></a>
37888
<table cellpadding="1" cellspacing="1" border="0">
37889
<tr><td valign="middle" align="left">[<a href="#Object-Index" title="Previous section in reading order"> < </a>]</td>
37890
<td valign="middle" align="left">[<a href="#Message-Index" title="Next section in reading order"> > </a>]</td>
37891
<td valign="middle" align="left"> </td>
37892
<td valign="middle" align="left">[<a href="#Object-Index" title="Beginning of this chapter or previous chapter"> << </a>]</td>
37893
<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up </a>]</td>
37894
<td valign="middle" align="left">[<a href="#Message-Index" title="Next chapter"> >> </a>]</td>
37895
<td valign="middle" align="left"> </td>
37896
<td valign="middle" align="left"> </td>
37897
<td valign="middle" align="left"> </td>
37898
<td valign="middle" align="left"> </td>
37899
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
37900
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
37901
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
37902
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
37904
<a name="Attribute-Index-1"></a>
37905
<h1 class="unnumbered">Attribute Index</h1>
37907
<table><tr><th valign="top">Jump to: </th><td><a href="#Attribute-Index-1_at_letter-A" class="summary-letter"><b>A</b></a>
37909
<a href="#Attribute-Index-1_at_letter-O" class="summary-letter"><b>O</b></a>
37911
<a href="#Attribute-Index-1_at_letter-S" class="summary-letter"><b>S</b></a>
37914
<table border="0" class="index-at">
37915
<tr><td></td><th align="left">Index Entry</th><th align="left"> Section</th></tr>
37916
<tr><td colspan="3"> <hr></td></tr>
37917
<tr><th><a name="Attribute-Index-1_at_letter-A">A</a></th><td></td><td></td></tr>
37918
<tr><td></td><td valign="top"><a href="#index-autoclose">autoclose</a></td><td valign="top"><a href="#it_005fblocker">8.4.1 it_blocker</a></td></tr>
37919
<tr><td></td><td valign="top"><a href="#index-autoclose-1">autoclose</a></td><td valign="top"><a href="#st_005fblocker">9.5.4 st_blocker</a></td></tr>
37920
<tr><td colspan="3"> <hr></td></tr>
37921
<tr><th><a name="Attribute-Index-1_at_letter-O">O</a></th><td></td><td></td></tr>
37922
<tr><td></td><td valign="top"><a href="#index-orientation">orientation</a></td><td valign="top"><a href="#it_005fpuller">8.3.23 it_puller</a></td></tr>
37923
<tr><td></td><td valign="top"><a href="#index-orientation-1">orientation</a></td><td valign="top"><a href="#st_005fboulder">9.5.6 st_boulder</a></td></tr>
37924
<tr><td></td><td valign="top"><a href="#index-orientation-2">orientation</a></td><td valign="top"><a href="#st_005fturnstile">9.5.64 st_turnstile</a></td></tr>
37925
<tr><td></td><td valign="top"><a href="#index-orientation-3">orientation</a></td><td valign="top"><a href="#st_005fturnstilearm">9.5.65 st_turnstilearm</a></td></tr>
37926
<tr><td colspan="3"> <hr></td></tr>
37927
<tr><th><a name="Attribute-Index-1_at_letter-S">S</a></th><td></td><td></td></tr>
37928
<tr><td></td><td valign="top"><a href="#index-state">state</a></td><td valign="top"><a href="#st_005ffourswitch">9.5.24 st_fourswitch</a></td></tr>
37929
<tr><td colspan="3"> <hr></td></tr>
37931
<table><tr><th valign="top">Jump to: </th><td><a href="#Attribute-Index-1_at_letter-A" class="summary-letter"><b>A</b></a>
37933
<a href="#Attribute-Index-1_at_letter-O" class="summary-letter"><b>O</b></a>
37935
<a href="#Attribute-Index-1_at_letter-S" class="summary-letter"><b>S</b></a>
37940
<a name="Message-Index"></a>
37941
<table cellpadding="1" cellspacing="1" border="0">
37942
<tr><td valign="middle" align="left">[<a href="#Attribute-Index" title="Previous section in reading order"> < </a>]</td>
37943
<td valign="middle" align="left">[<a href="#Function-Index" title="Next section in reading order"> > </a>]</td>
37944
<td valign="middle" align="left"> </td>
37945
<td valign="middle" align="left">[<a href="#Attribute-Index" title="Beginning of this chapter or previous chapter"> << </a>]</td>
37946
<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up </a>]</td>
37947
<td valign="middle" align="left">[<a href="#Function-Index" title="Next chapter"> >> </a>]</td>
37948
<td valign="middle" align="left"> </td>
37949
<td valign="middle" align="left"> </td>
37950
<td valign="middle" align="left"> </td>
37951
<td valign="middle" align="left"> </td>
37952
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
37953
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
37954
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
37955
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
37957
<a name="Message-Index-1"></a>
37958
<h1 class="unnumbered">Message Index</h1>
37960
<table><tr><th valign="top">Jump to: </th><td><a href="#Message-Index-1_ms_letter-O" class="summary-letter"><b>O</b></a>
37963
<table border="0" class="index-ms">
37964
<tr><td></td><th align="left">Index Entry</th><th align="left"> Section</th></tr>
37965
<tr><td colspan="3"> <hr></td></tr>
37966
<tr><th><a name="Message-Index-1_ms_letter-O">O</a></th><td></td><td></td></tr>
37967
<tr><td></td><td valign="top"><a href="#index-orientate">orientate</a></td><td valign="top"><a href="#st_005fboulder">9.5.6 st_boulder</a></td></tr>
37968
<tr><td></td><td valign="top"><a href="#index-orientate-1">orientate</a></td><td valign="top"><a href="#st_005fmirror">9.5.39 st_mirror</a></td></tr>
37969
<tr><td></td><td valign="top"><a href="#index-orientate-2">orientate</a></td><td valign="top"><a href="#st_005fturnstilearm">9.5.65 st_turnstilearm</a></td></tr>
37970
<tr><td colspan="3"> <hr></td></tr>
37972
<table><tr><th valign="top">Jump to: </th><td><a href="#Message-Index-1_ms_letter-O" class="summary-letter"><b>O</b></a>
37977
<a name="Function-Index"></a>
37978
<table cellpadding="1" cellspacing="1" border="0">
37979
<tr><td valign="middle" align="left">[<a href="#Message-Index" title="Previous section in reading order"> < </a>]</td>
37980
<td valign="middle" align="left">[<a href="#Concept-Index" title="Next section in reading order"> > </a>]</td>
37981
<td valign="middle" align="left"> </td>
37982
<td valign="middle" align="left">[<a href="#Message-Index" title="Beginning of this chapter or previous chapter"> << </a>]</td>
37983
<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up </a>]</td>
37984
<td valign="middle" align="left">[<a href="#Concept-Index" title="Next chapter"> >> </a>]</td>
37985
<td valign="middle" align="left"> </td>
37986
<td valign="middle" align="left"> </td>
37987
<td valign="middle" align="left"> </td>
37988
<td valign="middle" align="left"> </td>
37989
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
37990
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
37991
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
37992
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
37994
<a name="Function-Index-1"></a>
37995
<h1 class="unnumbered">Function Index</h1>
38000
<table><tr><th valign="top">Jump to: </th><td><a href="#Function-Index-1_tp_letter-A" class="summary-letter"><b>A</b></a>
38002
<a href="#Function-Index-1_tp_letter-C" class="summary-letter"><b>C</b></a>
38004
<a href="#Function-Index-1_tp_letter-E" class="summary-letter"><b>E</b></a>
38006
<a href="#Function-Index-1_tp_letter-F" class="summary-letter"><b>F</b></a>
38008
<a href="#Function-Index-1_tp_letter-G" class="summary-letter"><b>G</b></a>
38010
<a href="#Function-Index-1_tp_letter-I" class="summary-letter"><b>I</b></a>
38012
<a href="#Function-Index-1_tp_letter-L" class="summary-letter"><b>L</b></a>
38014
<a href="#Function-Index-1_tp_letter-R" class="summary-letter"><b>R</b></a>
38016
<a href="#Function-Index-1_tp_letter-S" class="summary-letter"><b>S</b></a>
38018
<a href="#Function-Index-1_tp_letter-U" class="summary-letter"><b>U</b></a>
38021
<table border="0" class="index-tp">
38022
<tr><td></td><th align="left">Index Entry</th><th align="left"> Section</th></tr>
38023
<tr><td colspan="3"> <hr></td></tr>
38024
<tr><th><a name="Function-Index-1_tp_letter-A">A</a></th><td></td><td></td></tr>
38025
<tr><td></td><td valign="top"><a href="#index-assert_005fbool"><code>assert_bool</code></a></td><td valign="top"><a href="#assert_005fbool">5.14.1 assert_bool</a></td></tr>
38026
<tr><td></td><td valign="top"><a href="#index-assert_005ftype"><code>assert_type</code></a></td><td valign="top"><a href="#assert_005ftype">5.14.2 assert_type</a></td></tr>
38027
<tr><td colspan="3"> <hr></td></tr>
38028
<tr><th><a name="Function-Index-1_tp_letter-C">C</a></th><td></td><td></td></tr>
38029
<tr><td></td><td valign="top"><a href="#index-Callback-Function"><code>Callback Function</code></a></td><td valign="top"><a href="#Callback-Function">4.3.3 Callback Function</a></td></tr>
38030
<tr><td></td><td valign="top"><a href="#index-custom-resolver"><code>custom resolver</code></a></td><td valign="top"><a href="#Custom-Resolver">13.1.2 Custom Resolver</a></td></tr>
38031
<tr><td colspan="3"> <hr></td></tr>
38032
<tr><th><a name="Function-Index-1_tp_letter-E">E</a></th><td></td><td></td></tr>
38033
<tr><td></td><td valign="top"><a href="#index-etype"><code>etype</code></a></td><td valign="top"><a href="#etype">5.14.4 etype</a></td></tr>
38034
<tr><td colspan="3"> <hr></td></tr>
38035
<tr><th><a name="Function-Index-1_tp_letter-F">F</a></th><td></td><td></td></tr>
38036
<tr><td></td><td valign="top"><a href="#index-fl"><code>fl</code></a></td><td valign="top"><a href="#fl">5.14.5 fl</a></td></tr>
38037
<tr><td colspan="3"> <hr></td></tr>
38038
<tr><th><a name="Function-Index-1_tp_letter-G">G</a></th><td></td><td></td></tr>
38039
<tr><td></td><td valign="top"><a href="#index-grp"><code>grp</code></a></td><td valign="top"><a href="#grp">5.14.6 grp</a></td></tr>
38040
<tr><td colspan="3"> <hr></td></tr>
38041
<tr><th><a name="Function-Index-1_tp_letter-I">I</a></th><td></td><td></td></tr>
38042
<tr><td></td><td valign="top"><a href="#index-it"><code>it</code></a></td><td valign="top"><a href="#it">5.14.7 it</a></td></tr>
38043
<tr><td colspan="3"> <hr></td></tr>
38044
<tr><th><a name="Function-Index-1_tp_letter-L">L</a></th><td></td><td></td></tr>
38045
<tr><td></td><td valign="top"><a href="#index-lib_002eimport"><code>lib.import</code></a></td><td valign="top"><a href="#libimport">12.5 libimport</a></td></tr>
38046
<tr><td></td><td valign="top"><a href="#index-lib_002eimport_002elevel_005fto_005fmap"><code>lib.import.level_to_map</code></a></td><td valign="top"><a href="#lib_002eimport_002elevel_005fto_005fmap">12.5.3 lib.import.level_to_map</a></td></tr>
38047
<tr><td></td><td valign="top"><a href="#index-lib_002eimport_002emap_005fsokoban"><code>lib.import.map_sokoban</code></a></td><td valign="top"><a href="#lib_002eimport_002emap_005fsokoban">12.5.4 lib.import.map_sokoban</a></td></tr>
38048
<tr><td></td><td valign="top"><a href="#index-lib_002eimport_002emap_005fwanderer"><code>lib.import.map_wanderer</code></a></td><td valign="top"><a href="#lib_002eimport_002emap_005fwanderer">12.5.5 lib.import.map_wanderer</a></td></tr>
38049
<tr><td></td><td valign="top"><a href="#index-lib_002eimport_002euncompress_005frle"><code>lib.import.uncompress_rle</code></a></td><td valign="top"><a href="#lib_002eimport_002euncompress_005frle">12.5.2 lib.import.uncompress_rle</a></td></tr>
38050
<tr><td></td><td valign="top"><a href="#index-lib_002eimport_002eunpack_005fmultilevel"><code>lib.import.unpack_multilevel</code></a></td><td valign="top"><a href="#lib_002eimport_002eunpack_005fmultilevel">12.5.1 lib.import.unpack_multilevel</a></td></tr>
38051
<tr><td></td><td valign="top"><a href="#index-lib_002elua_002ecombine_005ftables"><code>lib.lua.combine_tables</code></a></td><td valign="top"><a href="#lib_002elua_002ecombine_005ftables">12.2.1 lib.lua.combine_tables</a></td></tr>
38052
<tr><td></td><td valign="top"><a href="#index-lib_002elua_002edeep_005fcopy"><code>lib.lua.deep_copy</code></a></td><td valign="top"><a href="#lib_002elua_002edeep_005fcopy">12.2.2 lib.lua.deep_copy</a></td></tr>
38053
<tr><td></td><td valign="top"><a href="#index-lib_002elua_002emod"><code>lib.lua.mod</code></a></td><td valign="top"><a href="#lib_002elua_002emod">12.2.3 lib.lua.mod</a></td></tr>
38054
<tr><td></td><td valign="top"><a href="#index-lib_002elua_002eprint_005ftable"><code>lib.lua.print_table</code></a></td><td valign="top"><a href="#lib_002elua_002eprint_005ftable">12.2.4 lib.lua.print_table</a></td></tr>
38055
<tr><td></td><td valign="top"><a href="#index-lib_002elua_002eshuffle"><code>lib.lua.shuffle</code></a></td><td valign="top"><a href="#lib_002elua_002eshuffle">12.2.5 lib.lua.shuffle</a></td></tr>
38056
<tr><td></td><td valign="top"><a href="#index-lib_002elua_002eto_005fstring"><code>lib.lua.to_string</code></a></td><td valign="top"><a href="#lib_002elua_002eto_005fstring">12.2.6 lib.lua.to_string</a></td></tr>
38057
<tr><td></td><td valign="top"><a href="#index-lib_002emap_002econcat_005fhorizontally"><code>lib.map.concat_horizontally</code></a></td><td valign="top"><a href="#Map-Horizontal-Concatenation">12.4.10 Map Horizontal Concatenation</a></td></tr>
38058
<tr><td></td><td valign="top"><a href="#index-lib_002emap_002econcat_005fvertically"><code>lib.map.concat_vertically</code></a></td><td valign="top"><a href="#Map-Vertical-Concatenation">12.4.11 Map Vertical Concatenation</a></td></tr>
38059
<tr><td></td><td valign="top"><a href="#index-lib_002emap_002ecovers"><code>lib.map.covers</code></a></td><td valign="top"><a href="#lib_002emap_002ecovers">12.4.15 lib.map.covers</a></td></tr>
38060
<tr><td></td><td valign="top"><a href="#index-lib_002emap_002edefuse"><code>lib.map.defuse</code></a></td><td valign="top"><a href="#lib_002emap_002edefuse">12.4.16 lib.map.defuse</a></td></tr>
38061
<tr><td></td><td valign="top"><a href="#index-lib_002emap_002eextend"><code>lib.map.extend</code></a></td><td valign="top"><a href="#lib_002emap_002eextend">12.4.17 lib.map.extend</a></td></tr>
38062
<tr><td></td><td valign="top"><a href="#index-lib_002emap_002efuse"><code>lib.map.fuse</code></a></td><td valign="top"><a href="#Map-Fusing">12.4.12 Map Fusing</a></td></tr>
38063
<tr><td></td><td valign="top"><a href="#index-lib_002emap_002eget"><code>lib.map.get</code></a></td><td valign="top"><a href="#Map-Entry-Request">12.4.8 Map Entry Request</a></td></tr>
38064
<tr><td></td><td valign="top"><a href="#index-lib_002emap_002ematch"><code>lib.map.match</code></a></td><td valign="top"><a href="#lib_002emap_002ematch">12.4.18 lib.map.match</a></td></tr>
38065
<tr><td></td><td valign="top"><a href="#index-lib_002emap_002enewMap"><code>lib.map.newMap</code></a></td><td valign="top"><a href="#newMap">12.4.7 newMap</a></td></tr>
38066
<tr><td></td><td valign="top"><a href="#index-lib_002emap_002epaste"><code>lib.map.paste</code></a></td><td valign="top"><a href="#lib_002emap_002epaste">12.4.19 lib.map.paste</a></td></tr>
38067
<tr><td></td><td valign="top"><a href="#index-lib_002emap_002eprint"><code>lib.map.print</code></a></td><td valign="top"><a href="#lib_002emap_002eprint">12.4.20 lib.map.print</a></td></tr>
38068
<tr><td></td><td valign="top"><a href="#index-lib_002emap_002erandom_005ftransformation"><code>lib.map.random_transformation</code></a></td><td valign="top"><a href="#Random-Map-Transformations">12.4.28 Random Map Transformations</a></td></tr>
38069
<tr><td></td><td valign="top"><a href="#index-lib_002emap_002ereplace"><code>lib.map.replace</code></a></td><td valign="top"><a href="#lib_002emap_002ereplace">12.4.21 lib.map.replace</a></td></tr>
38070
<tr><td></td><td valign="top"><a href="#index-lib_002emap_002ereplace_005foutside"><code>lib.map.replace_outside</code></a></td><td valign="top"><a href="#lib_002emap_002ereplace_005foutside">12.4.22 lib.map.replace_outside</a></td></tr>
38071
<tr><td></td><td valign="top"><a href="#index-lib_002emap_002eset"><code>lib.map.set</code></a></td><td valign="top"><a href="#Map-Entry-Request">12.4.8 Map Entry Request</a></td></tr>
38072
<tr><td></td><td valign="top"><a href="#index-lib_002emap_002eset_005fdefault_005fkey"><code>lib.map.set_default_key</code></a></td><td valign="top"><a href="#Map-Default-Keys">12.4.13 Map Default Keys</a></td></tr>
38073
<tr><td></td><td valign="top"><a href="#index-lib_002emap_002esub"><code>lib.map.sub</code></a></td><td valign="top"><a href="#lib_002emap_002esub">12.4.23 lib.map.sub</a></td></tr>
38074
<tr><td></td><td valign="top"><a href="#index-lib_002emap_002etransform"><code>lib.map.transform</code></a></td><td valign="top"><a href="#Map-Transformation">12.4.9 Map Transformation</a></td></tr>
38075
<tr><td></td><td valign="top"><a href="#index-lib_002emap_002etransformation_005fcompose"><code>lib.map.transformation_compose</code></a></td><td valign="top"><a href="#Map-Transformation-Composition-and-Powers">12.4.26 Map Transformation Composition and Powers</a></td></tr>
38076
<tr><td></td><td valign="top"><a href="#index-lib_002emap_002etransformation_005fpower"><code>lib.map.transformation_power</code></a></td><td valign="top"><a href="#Map-Transformation-Composition-and-Powers">12.4.26 Map Transformation Composition and Powers</a></td></tr>
38077
<tr><td></td><td valign="top"><a href="#index-lib_002emap_002etrim"><code>lib.map.trim</code></a></td><td valign="top"><a href="#lib_002emap_002etrim">12.4.24 lib.map.trim</a></td></tr>
38078
<tr><td></td><td valign="top"><a href="#index-lib_002emath_002ecombinations"><code>lib.math.combinations</code></a></td><td valign="top"><a href="#lib_002emath_002ecombinations">12.3.1 lib.math.combinations</a></td></tr>
38079
<tr><td></td><td valign="top"><a href="#index-lib_002emath_002ecubic_005fpolynomial"><code>lib.math.cubic_polynomial</code></a></td><td valign="top"><a href="#lib_002emath_002ecubic_005fpolynomial">12.3.2 lib.math.cubic_polynomial</a></td></tr>
38080
<tr><td></td><td valign="top"><a href="#index-lib_002emath_002ecyclic_005fpermutation"><code>lib.math.cyclic_permutation</code></a></td><td valign="top"><a href="#lib_002emath_002ecyclic_005fpermutation">12.3.3 lib.math.cyclic_permutation</a></td></tr>
38081
<tr><td></td><td valign="top"><a href="#index-lib_002emath_002edigits"><code>lib.math.digits</code></a></td><td valign="top"><a href="#lib_002emath_002edigits">12.3.4 lib.math.digits</a></td></tr>
38082
<tr><td></td><td valign="top"><a href="#index-lib_002emath_002emanhattan_005fdistance"><code>lib.math.manhattan_distance</code></a></td><td valign="top"><a href="#lib_002emath_002emanhattan_005fdistance">12.3.5 lib.math.manhattan_distance</a></td></tr>
38083
<tr><td></td><td valign="top"><a href="#index-lib_002emath_002emark_005fcomponents"><code>lib.math.mark_components</code></a></td><td valign="top"><a href="#lib_002emath_002emark_005fcomponents">12.3.6 lib.math.mark_components</a></td></tr>
38084
<tr><td></td><td valign="top"><a href="#index-lib_002emath_002epermutation"><code>lib.math.permutation</code></a></td><td valign="top"><a href="#lib_002emath_002epermutation">12.3.7 lib.math.permutation</a></td></tr>
38085
<tr><td></td><td valign="top"><a href="#index-lib_002emath_002erandom_005fvector"><code>lib.math.random_vector</code></a></td><td valign="top"><a href="#lib_002emath_002erandom_005fvector">12.3.8 lib.math.random_vector</a></td></tr>
38086
<tr><td></td><td valign="top"><a href="#index-lib_002emath_002esteps"><code>lib.math.steps</code></a></td><td valign="top"><a href="#lib_002emath_002esteps">12.3.9 lib.math.steps</a></td></tr>
38087
<tr><td></td><td valign="top"><a href="#index-lib_002emaze_002erenderer_005fstandard"><code>lib.maze.renderer_standard</code></a></td><td valign="top"><a href="#res_002emaze">13.1.5 res.maze</a></td></tr>
38088
<tr><td></td><td valign="top"><a href="#index-lib_002emaze_002erenderer_005fstrip"><code>lib.maze.renderer_strip</code></a></td><td valign="top"><a href="#res_002emaze">13.1.5 res.maze</a></td></tr>
38089
<tr><td></td><td valign="top"><a href="#index-lib_002emaze_002erenderer_005fwindow"><code>lib.maze.renderer_window</code></a></td><td valign="top"><a href="#res_002emaze">13.1.5 res.maze</a></td></tr>
38090
<tr><td></td><td valign="top"><a href="#index-lib_002esoko_002ecreate_005fsokoball"><code>lib.soko.create_sokoball</code></a></td><td valign="top"><a href="#libsoko">12.6 libsoko</a></td></tr>
38091
<tr><td colspan="3"> <hr></td></tr>
38092
<tr><th><a name="Function-Index-1_tp_letter-R">R</a></th><td></td><td></td></tr>
38093
<tr><td></td><td valign="top"><a href="#index-random"><code>random</code></a></td><td valign="top"><a href="#random">5.14.9 random</a></td></tr>
38094
<tr><td></td><td valign="top"><a href="#index-res_002eautotile"><code>res.autotile</code></a></td><td valign="top"><a href="#res_002eautotile">13.1.3 res.autotile</a></td></tr>
38095
<tr><td></td><td valign="top"><a href="#index-res_002ecomposer"><code>res.composer</code></a></td><td valign="top"><a href="#res_002ecomposer">13.1.4 res.composer</a></td></tr>
38096
<tr><td></td><td valign="top"><a href="#index-res_002ecomposer_005fimplementation"><code>res.composer_implementation</code></a></td><td valign="top"><a href="#Resolver-Implementation">14.1.2 Resolver Implementation</a></td></tr>
38097
<tr><td></td><td valign="top"><a href="#index-res_002emaze"><code>res.maze</code></a></td><td valign="top"><a href="#res_002emaze">13.1.5 res.maze</a></td></tr>
38098
<tr><td></td><td valign="top"><a href="#index-res_002epuzzle"><code>res.puzzle</code></a></td><td valign="top"><a href="#res_002epuzzle">13.1.6 res.puzzle</a></td></tr>
38099
<tr><td></td><td valign="top"><a href="#index-res_002erandom"><code>res.random</code></a></td><td valign="top"><a href="#res_002erandom">13.1.7 res.random</a></td></tr>
38100
<tr><td></td><td valign="top"><a href="#index-res_002eresolvername"><code>res.resolvername</code></a></td><td valign="top"><a href="#Resolver-Configurator">14.1.1 Resolver Configurator</a></td></tr>
38101
<tr><td></td><td valign="top"><a href="#index-res_002eresolver_005ffinalization"><code>res.resolver_finalization</code></a></td><td valign="top"><a href="#Resolver-Finalizer">14.1.3 Resolver Finalizer</a></td></tr>
38102
<tr><td></td><td valign="top"><a href="#index-res_002etrain"><code>res.train</code></a></td><td valign="top"><a href="#res_002etrain">13.1.8 res.train</a></td></tr>
38103
<tr><td colspan="3"> <hr></td></tr>
38104
<tr><th><a name="Function-Index-1_tp_letter-S">S</a></th><td></td><td></td></tr>
38105
<tr><td></td><td valign="top"><a href="#index-st"><code>st</code></a></td><td valign="top"><a href="#st">5.14.10 st</a></td></tr>
38106
<tr><td colspan="3"> <hr></td></tr>
38107
<tr><th><a name="Function-Index-1_tp_letter-U">U</a></th><td></td><td></td></tr>
38108
<tr><td></td><td valign="top"><a href="#index-usertype"><code>usertype</code></a></td><td valign="top"><a href="#usertype">5.14.11 usertype</a></td></tr>
38109
<tr><td colspan="3"> <hr></td></tr>
38111
<table><tr><th valign="top">Jump to: </th><td><a href="#Function-Index-1_tp_letter-A" class="summary-letter"><b>A</b></a>
38113
<a href="#Function-Index-1_tp_letter-C" class="summary-letter"><b>C</b></a>
38115
<a href="#Function-Index-1_tp_letter-E" class="summary-letter"><b>E</b></a>
38117
<a href="#Function-Index-1_tp_letter-F" class="summary-letter"><b>F</b></a>
38119
<a href="#Function-Index-1_tp_letter-G" class="summary-letter"><b>G</b></a>
38121
<a href="#Function-Index-1_tp_letter-I" class="summary-letter"><b>I</b></a>
38123
<a href="#Function-Index-1_tp_letter-L" class="summary-letter"><b>L</b></a>
38125
<a href="#Function-Index-1_tp_letter-R" class="summary-letter"><b>R</b></a>
38127
<a href="#Function-Index-1_tp_letter-S" class="summary-letter"><b>S</b></a>
38129
<a href="#Function-Index-1_tp_letter-U" class="summary-letter"><b>U</b></a>
38134
<a name="Concept-Index"></a>
38135
<table cellpadding="1" cellspacing="1" border="0">
38136
<tr><td valign="middle" align="left">[<a href="#Function-Index" title="Previous section in reading order"> < </a>]</td>
38137
<td valign="middle" align="left">[<a href="#Renaming-Index" title="Next section in reading order"> > </a>]</td>
38138
<td valign="middle" align="left"> </td>
38139
<td valign="middle" align="left">[<a href="#Function-Index" title="Beginning of this chapter or previous chapter"> << </a>]</td>
38140
<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up </a>]</td>
38141
<td valign="middle" align="left">[<a href="#Renaming-Index" title="Next chapter"> >> </a>]</td>
38142
<td valign="middle" align="left"> </td>
38143
<td valign="middle" align="left"> </td>
38144
<td valign="middle" align="left"> </td>
38145
<td valign="middle" align="left"> </td>
38146
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
38147
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
38148
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
38149
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
38151
<a name="Concept-Index-1"></a>
38152
<h1 class="unnumbered">Concept Index</h1>
38154
<table><tr><th valign="top">Jump to: </th><td><a href="#Concept-Index-1_cp_letter-A" class="summary-letter"><b>A</b></a>
38156
<a href="#Concept-Index-1_cp_letter-C" class="summary-letter"><b>C</b></a>
38158
<a href="#Concept-Index-1_cp_letter-D" class="summary-letter"><b>D</b></a>
38160
<a href="#Concept-Index-1_cp_letter-F" class="summary-letter"><b>F</b></a>
38162
<a href="#Concept-Index-1_cp_letter-G" class="summary-letter"><b>G</b></a>
38164
<a href="#Concept-Index-1_cp_letter-I" class="summary-letter"><b>I</b></a>
38166
<a href="#Concept-Index-1_cp_letter-L" class="summary-letter"><b>L</b></a>
38168
<a href="#Concept-Index-1_cp_letter-N" class="summary-letter"><b>N</b></a>
38170
<a href="#Concept-Index-1_cp_letter-O" class="summary-letter"><b>O</b></a>
38172
<a href="#Concept-Index-1_cp_letter-P" class="summary-letter"><b>P</b></a>
38174
<a href="#Concept-Index-1_cp_letter-R" class="summary-letter"><b>R</b></a>
38176
<a href="#Concept-Index-1_cp_letter-S" class="summary-letter"><b>S</b></a>
38178
<a href="#Concept-Index-1_cp_letter-T" class="summary-letter"><b>T</b></a>
38180
<a href="#Concept-Index-1_cp_letter-U" class="summary-letter"><b>U</b></a>
38183
<table border="0" class="index-cp">
38184
<tr><td></td><th align="left">Index Entry</th><th align="left"> Section</th></tr>
38185
<tr><td colspan="3"> <hr></td></tr>
38186
<tr><th><a name="Concept-Index-1_cp_letter-A">A</a></th><td></td><td></td></tr>
38187
<tr><td></td><td valign="top"><a href="#index-abstract-kind">abstract kind</a></td><td valign="top"><a href="#Object-Kind">4.2.1 Object Kind</a></td></tr>
38188
<tr><td></td><td valign="top"><a href="#index-auto-naming">auto naming</a></td><td valign="top"><a href="#Object-Naming">4.2.3 Object Naming</a></td></tr>
38189
<tr><td colspan="3"> <hr></td></tr>
38190
<tr><th><a name="Concept-Index-1_cp_letter-C">C</a></th><td></td><td></td></tr>
38191
<tr><td></td><td valign="top"><a href="#index-callback-function">callback function</a></td><td valign="top"><a href="#Callback-Function">4.3.3 Callback Function</a></td></tr>
38192
<tr><td></td><td valign="top"><a href="#index-crossindex">crossindex</a></td><td valign="top"><a href="#Levelpack-Basics">2. Levelpack Basics</a></td></tr>
38193
<tr><td></td><td valign="top"><a href="#index-crossreference">crossreference</a></td><td valign="top"><a href="#Levelpack-Basics">2. Levelpack Basics</a></td></tr>
38194
<tr><td colspan="3"> <hr></td></tr>
38195
<tr><th><a name="Concept-Index-1_cp_letter-D">D</a></th><td></td><td></td></tr>
38196
<tr><td></td><td valign="top"><a href="#index-default-floor">default floor</a></td><td valign="top"><a href="#Object-Layers">4.1.2 Object Layers</a></td></tr>
38197
<tr><td colspan="3"> <hr></td></tr>
38198
<tr><th><a name="Concept-Index-1_cp_letter-F">F</a></th><td></td><td></td></tr>
38199
<tr><td></td><td valign="top"><a href="#index-flood">flood</a></td><td valign="top"><a href="#Flood-Spreading">13.2.2 Flood Spreading</a></td></tr>
38200
<tr><td colspan="3"> <hr></td></tr>
38201
<tr><th><a name="Concept-Index-1_cp_letter-G">G</a></th><td></td><td></td></tr>
38202
<tr><td></td><td valign="top"><a href="#index-grid-position">grid position</a></td><td valign="top"><a href="#World_0027s-Shape-and-Coordinates">4.1.1 World’s Shape and Coordinates</a></td></tr>
38203
<tr><td colspan="3"> <hr></td></tr>
38204
<tr><th><a name="Concept-Index-1_cp_letter-I">I</a></th><td></td><td></td></tr>
38205
<tr><td></td><td valign="top"><a href="#index-index">index</a></td><td valign="top"><a href="#Levelpack-Basics">2. Levelpack Basics</a></td></tr>
38206
<tr><td colspan="3"> <hr></td></tr>
38207
<tr><th><a name="Concept-Index-1_cp_letter-L">L</a></th><td></td><td></td></tr>
38208
<tr><td></td><td valign="top"><a href="#index-l10n-path">l10n path</a></td><td valign="top"><a href="#Locating-Resources">1.1 Locating Resources</a></td></tr>
38209
<tr><td></td><td valign="top"><a href="#index-layer">layer</a></td><td valign="top"><a href="#Object-Layers">4.1.2 Object Layers</a></td></tr>
38210
<tr><td></td><td valign="top"><a href="#index-levelinspector">levelinspector</a></td><td valign="top"><a href="#Level-Info">1.5 Level Info</a></td></tr>
38211
<tr><td></td><td valign="top"><a href="#index-levelpack">levelpack</a></td><td valign="top"><a href="#Levelpack-Basics">2. Levelpack Basics</a></td></tr>
38212
<tr><td></td><td valign="top"><a href="#index-localization-path">localization path</a></td><td valign="top"><a href="#Locating-Resources">1.1 Locating Resources</a></td></tr>
38213
<tr><td colspan="3"> <hr></td></tr>
38214
<tr><th><a name="Concept-Index-1_cp_letter-N">N</a></th><td></td><td></td></tr>
38215
<tr><td></td><td valign="top"><a href="#index-nearest-object">nearest object</a></td><td valign="top"><a href="#Object-Naming">4.2.3 Object Naming</a></td></tr>
38216
<tr><td colspan="3"> <hr></td></tr>
38217
<tr><th><a name="Concept-Index-1_cp_letter-O">O</a></th><td></td><td></td></tr>
38218
<tr><td></td><td valign="top"><a href="#index-onescreener">onescreener</a></td><td valign="top"><a href="#World_0027s-Shape-and-Coordinates">4.1.1 World’s Shape and Coordinates</a></td></tr>
38219
<tr><td></td><td valign="top"><a href="#index-overloading">overloading</a></td><td valign="top"><a href="#Polymorphism-and-Overloading">5.4.3 Polymorphism and Overloading</a></td></tr>
38220
<tr><td colspan="3"> <hr></td></tr>
38221
<tr><th><a name="Concept-Index-1_cp_letter-P">P</a></th><td></td><td></td></tr>
38222
<tr><td></td><td valign="top"><a href="#index-polymorphism">polymorphism</a></td><td valign="top"><a href="#Polymorphism-and-Overloading">5.4.3 Polymorphism and Overloading</a></td></tr>
38223
<tr><td></td><td valign="top"><a href="#index-position">position</a></td><td valign="top"><a href="#World_0027s-Shape-and-Coordinates">4.1.1 World’s Shape and Coordinates</a></td></tr>
38224
<tr><td></td><td valign="top"><a href="#index-preferences-path">preferences path</a></td><td valign="top"><a href="#Locating-Resources">1.1 Locating Resources</a></td></tr>
38225
<tr><td colspan="3"> <hr></td></tr>
38226
<tr><th><a name="Concept-Index-1_cp_letter-R">R</a></th><td></td><td></td></tr>
38227
<tr><td></td><td valign="top"><a href="#index-resource-paths">resource paths</a></td><td valign="top"><a href="#Locating-Resources">1.1 Locating Resources</a></td></tr>
38228
<tr><td colspan="3"> <hr></td></tr>
38229
<tr><th><a name="Concept-Index-1_cp_letter-S">S</a></th><td></td><td></td></tr>
38230
<tr><td></td><td valign="top"><a href="#index-system-path">system path</a></td><td valign="top"><a href="#Locating-Resources">1.1 Locating Resources</a></td></tr>
38231
<tr><td colspan="3"> <hr></td></tr>
38232
<tr><th><a name="Concept-Index-1_cp_letter-T">T</a></th><td></td><td></td></tr>
38233
<tr><td></td><td valign="top"><a href="#index-target-action-paradigm">target action paradigm</a></td><td valign="top"><a href="#Target-_002d-Action">4.3.2 Target - Action</a></td></tr>
38234
<tr><td></td><td valign="top"><a href="#index-tile">tile</a></td><td valign="top"><a href="#World_0027s-Shape-and-Coordinates">4.1.1 World’s Shape and Coordinates</a></td></tr>
38235
<tr><td colspan="3"> <hr></td></tr>
38236
<tr><th><a name="Concept-Index-1_cp_letter-U">U</a></th><td></td><td></td></tr>
38237
<tr><td></td><td valign="top"><a href="#index-user-image-path">user image path</a></td><td valign="top"><a href="#Locating-Resources">1.1 Locating Resources</a></td></tr>
38238
<tr><td></td><td valign="top"><a href="#index-user-path">user path</a></td><td valign="top"><a href="#Locating-Resources">1.1 Locating Resources</a></td></tr>
38239
<tr><td colspan="3"> <hr></td></tr>
38241
<table><tr><th valign="top">Jump to: </th><td><a href="#Concept-Index-1_cp_letter-A" class="summary-letter"><b>A</b></a>
38243
<a href="#Concept-Index-1_cp_letter-C" class="summary-letter"><b>C</b></a>
38245
<a href="#Concept-Index-1_cp_letter-D" class="summary-letter"><b>D</b></a>
38247
<a href="#Concept-Index-1_cp_letter-F" class="summary-letter"><b>F</b></a>
38249
<a href="#Concept-Index-1_cp_letter-G" class="summary-letter"><b>G</b></a>
38251
<a href="#Concept-Index-1_cp_letter-I" class="summary-letter"><b>I</b></a>
38253
<a href="#Concept-Index-1_cp_letter-L" class="summary-letter"><b>L</b></a>
38255
<a href="#Concept-Index-1_cp_letter-N" class="summary-letter"><b>N</b></a>
38257
<a href="#Concept-Index-1_cp_letter-O" class="summary-letter"><b>O</b></a>
38259
<a href="#Concept-Index-1_cp_letter-P" class="summary-letter"><b>P</b></a>
38261
<a href="#Concept-Index-1_cp_letter-R" class="summary-letter"><b>R</b></a>
38263
<a href="#Concept-Index-1_cp_letter-S" class="summary-letter"><b>S</b></a>
38265
<a href="#Concept-Index-1_cp_letter-T" class="summary-letter"><b>T</b></a>
38267
<a href="#Concept-Index-1_cp_letter-U" class="summary-letter"><b>U</b></a>
38272
<a name="Renaming-Index"></a>
38273
<table cellpadding="1" cellspacing="1" border="0">
38274
<tr><td valign="middle" align="left">[<a href="#Concept-Index" title="Previous section in reading order"> < </a>]</td>
38275
<td valign="middle" align="left">[ > ]</td>
38276
<td valign="middle" align="left"> </td>
38277
<td valign="middle" align="left">[<a href="#Concept-Index" title="Beginning of this chapter or previous chapter"> << </a>]</td>
38278
<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up </a>]</td>
38279
<td valign="middle" align="left">[ >> ]</td>
38280
<td valign="middle" align="left"> </td>
38281
<td valign="middle" align="left"> </td>
38282
<td valign="middle" align="left"> </td>
38283
<td valign="middle" align="left"> </td>
38284
<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
38285
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
38286
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
38287
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
38289
<a name="Renaming-Index-1"></a>
38290
<h1 class="unnumbered">Renaming Index</h1>
38292
<dl compact="compact">
38293
<dt> <b>ac-blackball</b> → <code>ac_marble_black</code>, see section <a href="#ac_005fmarble">ac_marble</a></dt>
38294
<dt> <b>ac-bug</b> → <a href="#ac_005fbug">ac_bug</a></dt>
38295
<dt> <b>ac-horse</b> → <a href="#ac_005fhorse">ac_horse</a></dt>
38296
<dt> <b>ac-killerball</b> → <a href="#ac_005fkiller">ac_killer</a></dt>
38297
<dt> <b>ac-rotor</b> → <a href="#ac_005frotor">ac_rotor</a></dt>
38298
<dt> <b>ac-top</b> → <a href="#ac_005ftop">ac_top</a></dt>
38299
<dt> <b>ac-whiteball</b> → <code>ac_marble_white</code>, see section <a href="#ac_005fmarble">ac_marble</a></dt>
38300
<dt> <b>ac-whiteball-small</b> → <code>ac_pearl_white, owner=DEFAULT</code>, see section <a href="#ac_005fpearl">ac_pearl</a></dt>
38301
<dt> <b>fl-abyss</b> → <a href="#fl_005fabyss">fl_abyss</a></dt>
38302
<dt> <b>fl-abyss_fake</b> → <code>fl_fake_abyss</code>, see section <a href="#fl_005ffake">fl_fake</a></dt>
38303
<dt> <b>fl-acblack</b> → <code>fl_yinyang_yin</code>, see section <a href="#fl_005fyinyang">fl_yinyang</a></dt>
38304
<dt> <b>fl-acwhite</b> → <code>fl_yinyang_yang</code>, see section <a href="#fl_005fyinyang">fl_yinyang</a></dt>
38305
<dt> <b>fl-black</b> → <a href="#fl_005fdark">fl_dark</a></dt>
38306
<dt> <b>fl-bluegray</b> → <a href="#fl_005fbluegray">fl_bluegray</a></dt>
38307
<dt> <b>fl-bluegreen</b> → <a href="#fl_005fbluegreen">fl_bluegreen</a></dt>
38308
<dt> <b>fl-bluegreenx</b> → <a href="#fl_005faquamarine">fl_aquamarine</a></dt>
38309
<dt> <b>fl-brick</b> → <a href="#fl_005fbrick">fl_brick</a></dt>
38310
<dt> <b>fl-bridge</b> → <a href="#fl_005fbridge">fl_bridge</a></dt>
38311
<dt> <b>fl-bridge-closed</b> → <code>fl_bridge, state=CLOSED</code>, see section <a href="#fl_005fbridge">fl_bridge</a></dt>
38312
<dt> <b>fl-bridge-open</b> → <a href="#fl_005fbridge">fl_bridge</a></dt>
38313
<dt> <b>fl-bumps</b> → <a href="#fl_005fpinkbumps">fl_pinkbumps</a></dt>
38314
<dt> <b>fl-concrete</b> → <a href="#fl_005fconcrete">fl_concrete</a></dt>
38315
<dt> <b>fl-darkgray</b> → <a href="#fl_005fdarkgray">fl_darkgray</a></dt>
38316
<dt> <b>fl-dunes</b> → <a href="#fl_005fdunes">fl_dunes</a></dt>
38317
<dt> <b>fl-floor_001</b> → <a href="#fl_005fbast">fl_bast</a></dt>
38318
<dt> <b>fl-gradient</b> → <code>fl_slope_ps</code>, see section <a href="#fl_005fslope">fl_slope</a></dt>
38319
<dt> <b>fl-gradient1</b> → <code>fl_slope_ps</code>, see section <a href="#fl_005fslope">fl_slope</a></dt>
38320
<dt> <b>fl-gradient2</b> → <code>fl_slope_pn</code>, see section <a href="#fl_005fslope">fl_slope</a></dt>
38321
<dt> <b>fl-gradient3</b> → <code>fl_slope_pe</code>, see section <a href="#fl_005fslope">fl_slope</a></dt>
38322
<dt> <b>fl-gradient4</b> → <code>fl_slope_pw</code>, see section <a href="#fl_005fslope">fl_slope</a></dt>
38323
<dt> <b>fl-gradient5</b> → <code>fl_slope_ose</code>, see section <a href="#fl_005fslope">fl_slope</a></dt>
38324
<dt> <b>fl-gradient6</b> → <code>fl_slope_osw</code>, see section <a href="#fl_005fslope">fl_slope</a></dt>
38325
<dt> <b>fl-gradient7</b> → <code>fl_slope_one</code>, see section <a href="#fl_005fslope">fl_slope</a></dt>
38326
<dt> <b>fl-gradient8</b> → <code>fl_slope_onw</code>, see section <a href="#fl_005fslope">fl_slope</a></dt>
38327
<dt> <b>fl-gradient9</b> → <code>fl_slope_ise</code>, see section <a href="#fl_005fslope">fl_slope</a></dt>
38328
<dt> <b>fl-gradient10</b> → <code>fl_slope_ine</code>, see section <a href="#fl_005fslope">fl_slope</a></dt>
38329
<dt> <b>fl-gradient11</b> → <code>fl_slope_isw</code>, see section <a href="#fl_005fslope">fl_slope</a></dt>
38330
<dt> <b>fl-gradient12</b> → <code>fl_slope_inw</code>, see section <a href="#fl_005fslope">fl_slope</a></dt>
38331
<dt> <b>fl-gradient13</b> → <code>fl_slope_tn</code>, see section <a href="#fl_005fslope">fl_slope</a></dt>
38332
<dt> <b>fl-gradient14</b> → <code>fl_slope_ts</code>, see section <a href="#fl_005fslope">fl_slope</a></dt>
38333
<dt> <b>fl-gradient15</b> → <code>fl_slope_tw</code>, see section <a href="#fl_005fslope">fl_slope</a></dt>
38334
<dt> <b>fl-gradient16</b> → <code>fl_slope_te</code>, see section <a href="#fl_005fslope">fl_slope</a></dt>
38335
<dt> <b>fl-gravel</b> → <a href="#fl_005fgravel">fl_gravel</a></dt>
38336
<dt> <b>fl-gray</b> → <a href="#fl_005fgray">fl_gray</a></dt>
38337
<dt> <b>fl-hay</b> → <a href="#fl_005fhay">fl_hay</a></dt>
38338
<dt> <b>fl-himalaya</b> → <a href="#fl_005fhimalaya">fl_himalaya</a></dt>
38339
<dt> <b>fl-ice</b> → <a href="#fl_005fice">fl_ice</a></dt>
38340
<dt> <b>fl-inverse</b> → <code>fl_inverse_white</code>, see section <a href="#fl_005finverse">fl_inverse</a></dt>
38341
<dt> <b>fl-inverse2</b> → <code>fl_inverse_gray</code>, see section <a href="#fl_005finverse">fl_inverse</a></dt>
38342
<dt> <b>fl-leaves</b> → <code>fl_lawn_a</code>, see section <a href="#fl_005flawn">fl_lawn</a></dt>
38343
<dt> <b>fl-leavesb</b> → <code>fl_lawn_b</code>, see section <a href="#fl_005flawn">fl_lawn</a></dt>
38344
<dt> <b>fl-leavesc1</b> → <code>fl_lawn_c1</code>, see section <a href="#fl_005flawn">fl_lawn</a></dt>
38345
<dt> <b>fl-leavesc2</b> → <code>fl_lawn_c2</code>, see section <a href="#fl_005flawn">fl_lawn</a></dt>
38346
<dt> <b>fl-leavesc3</b> → <code>fl_lawn_c3</code>, see section <a href="#fl_005flawn">fl_lawn</a></dt>
38347
<dt> <b>fl-leavesc4</b> → <code>fl_lawn_c4</code>, see section <a href="#fl_005flawn">fl_lawn</a></dt>
38348
<dt> <b>fl-leavesd1</b> → <code>fl_lawn_d1</code>, see section <a href="#fl_005flawn">fl_lawn</a></dt>
38349
<dt> <b>fl-leavesd2</b> → <code>fl_lawn_d2</code>, see section <a href="#fl_005flawn">fl_lawn</a></dt>
38350
<dt> <b>fl-leavesd3</b> → <code>fl_lawn_d3</code>, see section <a href="#fl_005flawn">fl_lawn</a></dt>
38351
<dt> <b>fl-leavesd4</b> → <code>fl_lawn_d4</code>, see section <a href="#fl_005flawn">fl_lawn</a></dt>
38352
<dt> <b>fl-leavese1</b> → <code>fl_lawn_e1</code>, see section <a href="#fl_005flawn">fl_lawn</a></dt>
38353
<dt> <b>fl-leavese2</b> → <code>fl_lawn_e2</code>, see section <a href="#fl_005flawn">fl_lawn</a></dt>
38354
<dt> <b>fl-leavese3</b> → <code>fl_lawn_e3</code>, see section <a href="#fl_005flawn">fl_lawn</a></dt>
38355
<dt> <b>fl-leavese4</b> → <code>fl_lawn_e4</code>, see section <a href="#fl_005flawn">fl_lawn</a></dt>
38356
<dt> <b>fl-light</b> → <a href="#fl_005fivory">fl_ivory</a></dt>
38357
<dt> <b>fl-lightgray</b> → <a href="#fl_005fplatinum">fl_platinum</a></dt>
38358
<dt> <b>fl-marble</b> → <a href="#fl_005fmarble">fl_marble</a></dt>
38359
<dt> <b>fl-metal</b> → <a href="#fl_005fmetal">fl_metal</a></dt>
38360
<dt> <b>fl-metal1</b> → <code>fl_metal_1</code>, see section <a href="#fl_005fmetal">fl_metal</a></dt>
38361
<dt> <b>fl-metal2</b> → <code>fl_metal_2</code>, see section <a href="#fl_005fmetal">fl_metal</a></dt>
38362
<dt> <b>fl-metal3</b> → <code>fl_metal_3</code>, see section <a href="#fl_005fmetal">fl_metal</a></dt>
38363
<dt> <b>fl-metal4</b> → <code>fl_metal_4</code>, see section <a href="#fl_005fmetal">fl_metal</a></dt>
38364
<dt> <b>fl-metal5</b> → <code>fl_metal_5</code>, see section <a href="#fl_005fmetal">fl_metal</a></dt>
38365
<dt> <b>fl-metal6</b> → <code>fl_metal_6</code>, see section <a href="#fl_005fmetal">fl_metal</a></dt>
38366
<dt> <b>fl-mortar</b> → <a href="#fl_005fmortar">fl_mortar</a></dt>
38367
<dt> <b>fl-nomouse</b> → <a href="#fl_005fadhesionless">fl_adhesionless</a></dt>
38368
<dt> <b>fl-normal_x</b> → <code>fl_metal_7</code>, see section <a href="#fl_005fmetal">fl_metal</a></dt>
38369
<dt> <b>fl-normal</b> → <code>fl_metal_7n</code>, see section <a href="#fl_005fmetal">fl_metal</a></dt>
38370
<dt> <b>fl-plank</b> → <a href="#fl_005fplank">fl_plank</a></dt>
38371
<dt> <b>fl-red</b> → <a href="#fl_005fred">fl_red</a></dt>
38372
<dt> <b>fl-rock</b> → <a href="#fl_005frock">fl_rock</a></dt>
38373
<dt> <b>fl-rough</b> → <a href="#fl_005frough">fl_rough</a></dt>
38374
<dt> <b>fl-rough_medium</b> → <code>fl_rough, friction=5.0, adhesion=1.2</code>, see section <a href="#fl_005frough">fl_rough</a></dt>
38375
<dt> <b>fl-rough_slow</b> → <code>fl_rough, friction=7.0, adhesion=0.5</code>, see section <a href="#fl_005frough">fl_rough</a></dt>
38376
<dt> <b>fl-rough-blue</b> → <a href="#fl_005fblueslab">fl_blueslab</a></dt>
38377
<dt> <b>fl-rough-red</b> → <a href="#fl_005fredslab">fl_redslab</a></dt>
38378
<dt> <b>fl-sahara</b> → <a href="#fl_005fsahara">fl_sahara</a></dt>
38379
<dt> <b>fl-samba</b> → <a href="#fl_005fsamba">fl_samba</a></dt>
38380
<dt> <b>fl-samba1</b> → <code>fl_samba_h</code>, see section <a href="#fl_005fsamba">fl_samba</a></dt>
38381
<dt> <b>fl-samba2</b> → <code>fl_samba_v</code>, see section <a href="#fl_005fsamba">fl_samba</a></dt>
38382
<dt> <b>fl-sand</b> → <a href="#fl_005fsand">fl_sand</a></dt>
38383
<dt> <b>fl-space</b> → <a href="#fl_005fspace">fl_space</a></dt>
38384
<dt> <b>fl-springboard</b> → <a href="#fl_005fwhite">fl_white</a></dt>
38385
<dt> <b>fl-stone</b> → <a href="#fl_005fstone">fl_stone</a></dt>
38386
<dt> <b>fl-stwood</b> → <code>fl_wood_framed</code>, see section <a href="#fl_005fwood">fl_wood</a></dt>
38387
<dt> <b>fl-stwood1</b> → <code>fl_wood_framed_h</code>, see section <a href="#fl_005fwood">fl_wood</a></dt>
38388
<dt> <b>fl-stwood2</b> → <code>fl_wood_framed_v</code>, see section <a href="#fl_005fwood">fl_wood</a></dt>
38389
<dt> <b>fl-swamp</b> → <a href="#fl_005fswamp">fl_swamp</a></dt>
38390
<dt> <b>fl-thief</b> → <a href="#fl_005fthief">fl_thief</a></dt>
38391
<dt> <b>fl-tigris</b> → <a href="#fl_005ftigris">fl_tigris</a></dt>
38392
<dt> <b>fl-trigger</b> → <code>fl_fake_trigger</code>, see section <a href="#fl_005ffake">fl_fake</a></dt>
38393
<dt> <b>fl-water</b> → <a href="#fl_005fwater">fl_water</a></dt>
38394
<dt> <b>fl-white</b> → <a href="#fl_005fbright">fl_bright</a></dt>
38395
<dt> <b>fl-wood</b> → <a href="#fl_005fwood">fl_wood</a></dt>
38396
<dt> <b>fl-wood1</b> → <code>fl_wood_h</code>, see section <a href="#fl_005fwood">fl_wood</a></dt>
38397
<dt> <b>fl-wood2</b> → <code>fl_wood_v</code>, see section <a href="#fl_005fwood">fl_wood</a></dt>
38398
<dt> <b>fl-woven</b> → <a href="#fl_005fwoven">fl_woven</a></dt>
38399
<dt> <b>it-abyss</b> → <a href="#it_005ftrap">it_trap</a></dt>
38400
<dt> <b>it-bag</b> → <a href="#it_005fbag">it_bag</a></dt>
38401
<dt> <b>it-banana</b> → <a href="#it_005fbanana">it_banana</a></dt>
38402
<dt> <b>it-blackbomb</b> → <code>it_bomb_black</code>, see section <a href="#it_005fbomb">it_bomb</a></dt>
38403
<dt> <b>it-blocker</b> → <a href="#it_005fblocker">it_blocker</a></dt>
38404
<dt> <b>it-blocker-new</b> → <code>it_blocker_new</code>, see section <a href="#it_005fblocker">it_blocker</a></dt>
38405
<dt> <b>it-booze</b> → <a href="#it_005fbottle">it_bottle</a></dt>
38406
<dt> <b>it-booze-broken</b> → <code>it_bottle_broken</code>, see section <a href="#it_005fbottle">it_bottle</a></dt>
38407
<dt> <b>it-brake</b> → <a href="#it_005fbrake">it_brake</a></dt>
38408
<dt> <b>it-brush</b> → <a href="#it_005fbrush">it_brush</a></dt>
38409
<dt> <b>it-burnable</b> → <a href="#it_005fburnable">it_burnable</a></dt>
38410
<dt> <b>it-burnable_ash</b> → <code>it_burnable_ash</code>, see section <a href="#it_005fburnable">it_burnable</a></dt>
38411
<dt> <b>it-burnable_burning</b> → <code>it_burnable_burning</code>, see section <a href="#it_005fburnable">it_burnable</a></dt>
38412
<dt> <b>it-burnable_fireproof</b> → <code>it_burnable_fireproof</code>, see section <a href="#it_005fburnable">it_burnable</a></dt>
38413
<dt> <b>it-burnable_ignited</b> → <code>it_burnable_ignited</code>, see section <a href="#it_005fburnable">it_burnable</a></dt>
38414
<dt> <b>it-burnable_oil</b> → <code>it_burnable_oil</code>, see section <a href="#it_005fburnable">it_burnable</a></dt>
38415
<dt> <b>it-cherry</b> → <a href="#it_005fcherry">it_cherry</a></dt>
38416
<dt> <b>it-coffee</b> → <a href="#it_005fcoffee">it_coffee</a></dt>
38417
<dt> <b>it-coin1</b> → <code>it_coin_s</code>, see section <a href="#it_005fcoin">it_coin</a></dt>
38418
<dt> <b>it-coin2</b> → <code>it_coin_m</code>, see section <a href="#it_005fcoin">it_coin</a></dt>
38419
<dt> <b>it-coin4</b> → <code>it_coin_l</code>, see section <a href="#it_005fcoin">it_coin</a></dt>
38420
<dt> <b>it-crack0</b> → <code>it_crack_i</code>, see section <a href="#it_005fcrack">it_crack</a></dt>
38421
<dt> <b>it-crack1</b> → <code>it_crack_s</code>, see section <a href="#it_005fcrack">it_crack</a></dt>
38422
<dt> <b>it-crack2</b> → <code>it_crack_m</code>, see section <a href="#it_005fcrack">it_crack</a></dt>
38423
<dt> <b>it-crack3</b> → <code>it_crack_l</code>, see section <a href="#it_005fcrack">it_crack</a></dt>
38424
<dt> <b>it-cross</b> → <a href="#it_005fcross">it_cross</a></dt>
38425
<dt> <b>it-death</b> → <a href="#it_005fdeath">it_death</a></dt>
38426
<dt> <b>it-document</b> → <a href="#it_005fdocument">it_document</a></dt>
38427
<dt> <b>it-drop</b> → <a href="#it_005fdrop">it_drop</a></dt>
38428
<dt> <b>it-dynamite</b> → <a href="#it_005fdynamite">it_dynamite</a></dt>
38429
<dt> <b>it-explosion1</b> → <code>it_explosion_nil</code>, see section <a href="#it_005fexplosion">it_explosion</a></dt>
38430
<dt> <b>it-explosion2</b> → <code>it_explosion_hollow</code>, see section <a href="#it_005fexplosion">it_explosion</a></dt>
38431
<dt> <b>it-explosion3</b> → <code>it_explosion_debris</code>, see section <a href="#it_005fexplosion">it_explosion</a></dt>
38432
<dt> <b>it-extinguisher</b> → <a href="#it_005fextinguisher">it_extinguisher</a></dt>
38433
<dt> <b>it-extinguisher_empty</b> → <code>it_extinguisher_empty</code>, see section <a href="#it_005fextinguisher">it_extinguisher</a></dt>
38434
<dt> <b>it-extinguisher_medium</b> → <code>it_extinguisher_medium</code>, see section <a href="#it_005fextinguisher">it_extinguisher</a></dt>
38435
<dt> <b>it-extralife</b> → <a href="#it_005fextralife">it_extralife</a></dt>
38436
<dt> <b>it-flagblack</b> → <code>it_flag_black</code>, see section <a href="#it_005fflag">it_flag</a></dt>
38437
<dt> <b>it-flagwhite</b> → <code>it_flag_white</code>, see section <a href="#it_005fflag">it_flag</a></dt>
38438
<dt> <b>it-floppy</b> → <a href="#it_005ffloppy">it_floppy</a></dt>
38439
<dt> <b>it-glasses</b> → <a href="#it_005fglasses">it_glasses</a></dt>
38440
<dt> <b>it-glasses-broken</b> → <code>it_glasses_broken</code>, see section <a href="#it_005fglasses">it_glasses</a></dt>
38441
<dt> <b>it-hammer</b> → <a href="#it_005fhammer">it_hammer</a></dt>
38442
<dt> <b>it-hollow</b> → <code>it_meditation_hollow</code>, see section <a href="#it_005fmeditation">it_meditation</a></dt>
38443
<dt> <b>it-hill</b> → <code>it_meditation_hill</code>, see section <a href="#it_005fmeditation">it_meditation</a></dt>
38444
<dt> <b>it-hstrip</b> → <code>it_strip_ew</code>, see section <a href="#it_005fstrip">it_strip</a></dt>
38445
<dt> <b>it-inversesensor</b> → <code>it_sensor, invisible=true, inverse=true</code>, see section <a href="#it_005fsensor">it_sensor</a></dt>
38446
<dt> <b>it-key</b> → <code>it_key, code=1</code>, see section <a href="#it_005fkey">it_key</a></dt>
38447
<dt> <b>it-key_a</b> → <code>it_key, code=1</code>, see section <a href="#it_005fkey">it_key</a></dt>
38448
<dt> <b>it-key_b</b> → <code>it_key, code=2</code>, see section <a href="#it_005fkey">it_key</a></dt>
38449
<dt> <b>it-key_c</b> → <code>it_key, code=3</code>, see section <a href="#it_005fkey">it_key</a></dt>
38450
<dt> <b>it-landmine</b> → <a href="#it_005flandmine">it_landmine</a></dt>
38451
<dt> <b>it-magicwand</b> → <a href="#it_005fmagicwand">it_magicwand</a></dt>
38452
<dt> <b>it-magnet</b> → <a href="#it_005fmagnet">it_magnet</a></dt>
38453
<dt> <b>it-magnet-on</b> → <code>it_magnet_on</code>, see section <a href="#it_005fmagnet">it_magnet</a></dt>
38454
<dt> <b>it-magnet-off</b> → <code>it_magnet_off</code>, see section <a href="#it_005fmagnet">it_magnet</a></dt>
38455
<dt> <b>it-pencil</b> → <a href="#it_005fpencil">it_pencil</a></dt>
38456
<dt> <b>it-pin</b> → <a href="#it_005fpin">it_pin</a></dt>
38457
<dt> <b>it-pipe-e</b> → <code>it_pipe_e</code>, see section <a href="#it_005fpipe">it_pipe</a></dt>
38458
<dt> <b>it-pipe-es</b> → <code>it_pipe_es</code>, see section <a href="#it_005fpipe">it_pipe</a></dt>
38459
<dt> <b>it-pipe-h</b> → <code>it_pipe_ew</code>, see section <a href="#it_005fpipe">it_pipe</a></dt>
38460
<dt> <b>it-pipe-n</b> → <code>it_pipe_n</code>, see section <a href="#it_005fpipe">it_pipe</a></dt>
38461
<dt> <b>it-pipe-ne</b> → <code>it_pipe_ne</code>, see section <a href="#it_005fpipe">it_pipe</a></dt>
38462
<dt> <b>it-pipe-s</b> → <code>it_pipe_s</code>, see section <a href="#it_005fpipe">it_pipe</a></dt>
38463
<dt> <b>it-pipe-sw</b> → <code>it_pipe_sw</code>, see section <a href="#it_005fpipe">it_pipe</a></dt>
38464
<dt> <b>it-pipe-v</b> → <code>it_pipe_ns</code>, see section <a href="#it_005fpipe">it_pipe</a></dt>
38465
<dt> <b>it-pipe-w</b> → <code>it_pipe_w</code>, see section <a href="#it_005fpipe">it_pipe</a></dt>
38466
<dt> <b>it-pipe-wn</b> → <code>it_pipe_nw</code>, see section <a href="#it_005fpipe">it_pipe</a></dt>
38467
<dt> <b>it-puller-e</b> → <code>it_puller_e</code>, see section <a href="#it_005fpuller">it_puller</a></dt>
38468
<dt> <b>it-puller-n</b> → <code>it_puller_n</code>, see section <a href="#it_005fpuller">it_puller</a></dt>
38469
<dt> <b>it-puller-s</b> → <code>it_puller_s</code>, see section <a href="#it_005fpuller">it_puller</a></dt>
38470
<dt> <b>it-puller-w</b> → <code>it_puller_w</code>, see section <a href="#it_005fpuller">it_puller</a></dt>
38471
<dt> <b>it-ring</b> → <a href="#it_005fring">it_ring</a></dt>
38472
<dt> <b>it-rubberband</b> → <a href="#it_005frubberband">it_rubberband</a></dt>
38473
<dt> <b>it-seed</b> → <code>it_seed_wood</code>, see section <a href="#it_005fseed">it_seed</a></dt>
38474
<dt> <b>it-seed_nowood</b> → <code>it_seed_fake</code>, see section <a href="#it_005fseed">it_seed</a></dt>
38475
<dt> <b>it-seed_volcano</b> → <code>it_seed_volcano</code>, see section <a href="#it_005fseed">it_seed</a></dt>
38476
<dt> <b>it-sensor</b> → <code>it_sensor, invisible=true</code>, see section <a href="#it_005fsensor">it_sensor</a></dt>
38477
<dt> <b>it-spade</b> → <a href="#it_005fspade">it_spade</a></dt>
38478
<dt> <b>it-spoon</b> → <a href="#it_005fspoon">it_spoon</a></dt>
38479
<dt> <b>it-spring1</b> → <code>it_spring_keep</code>, see section <a href="#it_005fspring">it_spring</a></dt>
38480
<dt> <b>it-spring2</b> → <code>it_spring_drop</code>, see section <a href="#it_005fspring">it_spring</a></dt>
38481
<dt> <b>it-springboard</b> → <a href="#it_005fspringboard">it_springboard</a></dt>
38482
<dt> <b>it-squashed</b> → <a href="#it_005fsquashed">it_squashed</a></dt>
38483
<dt> <b>it-shogun-s</b> → <code>it_shogun_s</code>, see section <a href="#it_005fshogun">it_shogun</a></dt>
38484
<dt> <b>it-shogun-m</b> → <code>it_shogun_m</code>, see section <a href="#it_005fshogun">it_shogun</a></dt>
38485
<dt> <b>it-shogun-l</b> → <code>it_shogun_l</code>, see section <a href="#it_005fshogun">it_shogun</a></dt>
38486
<dt> <b>it-surprise</b> → <a href="#it_005fsurprise">it_surprise</a></dt>
38487
<dt> <b>it-sword</b> → <a href="#it_005fsword">it_sword</a></dt>
38488
<dt> <b>it-tinyhollow</b> → <code>it_meditation_dent</code>, see section <a href="#it_005fmeditation">it_meditation</a></dt>
38489
<dt> <b>it-tinyhill</b> → <code>it_meditation_bump</code>, see section <a href="#it_005fmeditation">it_meditation</a></dt>
38490
<dt> <b>it-trigger</b> → <a href="#it_005ftrigger">it_trigger</a></dt>
38491
<dt> <b>it-umbrella</b> → <a href="#it_005fumbrella">it_umbrella</a></dt>
38492
<dt> <b>it-vortex-open</b> → <code>it_vortex_open, scissor=false</code>, see section <a href="#it_005fvortex">it_vortex</a></dt>
38493
<dt> <b>it-vortex-closed</b> → <code>it_vortex_closed, autoclose=true, scissor=false</code>, see section <a href="#it_005fvortex">it_vortex</a></dt>
38494
<dt> <b>it-vstrip</b> → <code>it_strip_ns</code>, see section <a href="#it_005fstrip">it_strip</a></dt>
38495
<dt> <b>it-weight</b> → <a href="#it_005fweight">it_weight</a></dt>
38496
<dt> <b>it-whitebomb</b> → <code>it_bomb_white</code>, see section <a href="#it_005fbomb">it_bomb</a></dt>
38497
<dt> <b>it-wormhole</b> → <code>it_wormhole_on, scissor=false</code>, see section <a href="#it_005fwormhole">it_wormhole</a></dt>
38498
<dt> <b>it-wormhole-off</b> → <code>it_wormhole_off, scissor=false</code>, see section <a href="#it_005fwormhole">it_wormhole</a></dt>
38499
<dt> <b>it-wrench</b> → <a href="#it_005fwrench">it_wrench</a></dt>
38500
<dt> <b>it-yinyang</b> → <a href="#it_005fyinyang">it_yinyang</a></dt>
38501
<dt> <b>st-actorimpulse</b> → <a href="#st_005factorimpulse">st_actorimpulse</a></dt>
38502
<dt> <b>st-actorimpulse_invisible</b> → <code>st_actorimpulse_invisible</code>, see section <a href="#st_005factorimpulse">st_actorimpulse</a></dt>
38503
<dt> <b>st-beads</b> → <a href="#st_005fbeads">st_beads</a></dt>
38504
<dt> <b>st-bigbluesand-e</b> → <code>st_bluesand_e</code>, see section <a href="#st_005fbluesand">st_bluesand</a></dt>
38505
<dt> <b>st-bigbluesand-es</b> → <code>st_bluesand_es</code>, see section <a href="#st_005fbluesand">st_bluesand</a></dt>
38506
<dt> <b>st-bigbluesand-esw</b> → <code>st_bluesand_esw</code>, see section <a href="#st_005fbluesand">st_bluesand</a></dt>
38507
<dt> <b>st-bigbluesand-ew</b> → <code>st_bluesand_ew</code>, see section <a href="#st_005fbluesand">st_bluesand</a></dt>
38508
<dt> <b>st-bigbluesand-n</b> → <code>st_bluesand_n</code>, see section <a href="#st_005fbluesand">st_bluesand</a></dt>
38509
<dt> <b>st-bigbluesand-ne</b> → <code>st_bluesand_ne</code>, see section <a href="#st_005fbluesand">st_bluesand</a></dt>
38510
<dt> <b>st-bigbluesand-nes</b> → <code>st_bluesand_nes</code>, see section <a href="#st_005fbluesand">st_bluesand</a></dt>
38511
<dt> <b>st-bigbluesand-nesw</b> → <code>st_bluesand_nesw</code>, see section <a href="#st_005fbluesand">st_bluesand</a></dt>
38512
<dt> <b>st-bigbluesand-new</b> → <code>st_bluesand_new</code>, see section <a href="#st_005fbluesand">st_bluesand</a></dt>
38513
<dt> <b>st-bigbluesand-ns</b> → <code>st_bluesand_ns</code>, see section <a href="#st_005fbluesand">st_bluesand</a></dt>
38514
<dt> <b>st-bigbluesand-nsw</b> → <code>st_bluesand_nsw</code>, see section <a href="#st_005fbluesand">st_bluesand</a></dt>
38515
<dt> <b>st-bigbluesand-nw</b> → <code>st_bluesand_nw</code>, see section <a href="#st_005fbluesand">st_bluesand</a></dt>
38516
<dt> <b>st-bigbluesand-s</b> → <code>st_bluesand_s</code>, see section <a href="#st_005fbluesand">st_bluesand</a></dt>
38517
<dt> <b>st-bigbluesand-sw</b> → <code>st_bluesand_sw</code>, see section <a href="#st_005fbluesand">st_bluesand</a></dt>
38518
<dt> <b>st-bigbluesand-w</b> → <code>st_bluesand_w</code>, see section <a href="#st_005fbluesand">st_bluesand</a></dt>
38519
<dt> <b>st-bigbrick-e</b> → <code>st_brick_e</code>, see section <a href="#st_005fbrick">st_brick</a></dt>
38520
<dt> <b>st-bigbrick-es</b> → <code>st_brick_es</code>, see section <a href="#st_005fbrick">st_brick</a></dt>
38521
<dt> <b>st-bigbrick-esw</b> → <code>st_brick_esw</code>, see section <a href="#st_005fbrick">st_brick</a></dt>
38522
<dt> <b>st-bigbrick-ew</b> → <code>st_brick_ew</code>, see section <a href="#st_005fbrick">st_brick</a></dt>
38523
<dt> <b>st-bigbrick-n</b> → <code>st_brick_n</code>, see section <a href="#st_005fbrick">st_brick</a></dt>
38524
<dt> <b>st-bigbrick-ne</b> → <code>st_brick_ne</code>, see section <a href="#st_005fbrick">st_brick</a></dt>
38525
<dt> <b>st-bigbrick-nes</b> → <code>st_brick_nes</code>, see section <a href="#st_005fbrick">st_brick</a></dt>
38526
<dt> <b>st-bigbrick-nesw</b> → <code>st_brick_nesw</code>, see section <a href="#st_005fbrick">st_brick</a></dt>
38527
<dt> <b>st-bigbrick-new</b> → <code>st_brick_new</code>, see section <a href="#st_005fbrick">st_brick</a></dt>
38528
<dt> <b>st-bigbrick-ns</b> → <code>st_brick_ns</code>, see section <a href="#st_005fbrick">st_brick</a></dt>
38529
<dt> <b>st-bigbrick-nsw</b> → <code>st_brick_nsw</code>, see section <a href="#st_005fbrick">st_brick</a></dt>
38530
<dt> <b>st-bigbrick-nw</b> → <code>st_brick_nw</code>, see section <a href="#st_005fbrick">st_brick</a></dt>
38531
<dt> <b>st-bigbrick-s</b> → <code>st_brick_s</code>, see section <a href="#st_005fbrick">st_brick</a></dt>
38532
<dt> <b>st-bigbrick-sw</b> → <code>st_brick_sw</code>, see section <a href="#st_005fbrick">st_brick</a></dt>
38533
<dt> <b>st-bigbrick-w</b> → <code>st_brick_w</code>, see section <a href="#st_005fbrick">st_brick</a></dt>
38534
<dt> <b>st-blackballs</b> → <code>st_jamb_black</code>, see section <a href="#st_005fjamb">st_jamb</a></dt>
38535
<dt> <b>st-black1</b> → <code>st_passage_black_square</code>, see section <a href="#st_005fpassage">st_passage</a></dt>
38536
<dt> <b>st-black2</b> → <code>st_passage_black_slash</code>, see section <a href="#st_005fpassage">st_passage</a></dt>
38537
<dt> <b>st-black3</b> → <code>st_passage_black_cross</code>, see section <a href="#st_005fpassage">st_passage</a></dt>
38538
<dt> <b>st-black4</b> → <code>st_passage_black_frame</code>, see section <a href="#st_005fpassage">st_passage</a></dt>
38539
<dt> <b>st-block</b> → <a href="#st_005fplop">st_plop</a></dt>
38540
<dt> <b>st-blocker</b> → <a href="#st_005fblocker">st_blocker</a></dt>
38541
<dt> <b>st-blocker-growing</b> → <code>st_blocker_new</code>, see section <a href="#st_005fblocker">st_blocker</a></dt>
38542
<dt> <b>st-bluegray</b> → <a href="#st_005fbluegray">st_bluegray</a></dt>
38543
<dt> <b>st-bluegray_hole</b> → <code>st_bluegray_hollow</code>, see section <a href="#st_005fbluegray">st_bluegray</a></dt>
38544
<dt> <b>st-blue-sand</b> → <a href="#st_005fbluesand">st_bluesand</a></dt>
38545
<dt> <b>st-bolder</b> → <a href="#st_005fboulder">st_boulder</a></dt>
38546
<dt> <b>st-bolder-e</b> → <code>st_boulder_e</code>, see section <a href="#st_005fboulder">st_boulder</a></dt>
38547
<dt> <b>st-bolder-n</b> → <code>st_boulder_n</code>, see section <a href="#st_005fboulder">st_boulder</a></dt>
38548
<dt> <b>st-bolder-s</b> → <code>st_boulder_s</code>, see section <a href="#st_005fboulder">st_boulder</a></dt>
38549
<dt> <b>st-bolder-w</b> → <code>st_boulder_w</code>, see section <a href="#st_005fboulder">st_boulder</a></dt>
38550
<dt> <b>st-bombs</b> → <code>st_dispenser_bombblack</code>, see section <a href="#st_005fdispenser">st_dispenser</a></dt>
38551
<dt> <b>st-brake</b> → <a href="#st_005fbrake">st_brake</a></dt>
38552
<dt> <b>st-break_acblack</b> → <code>st_break_black</code>, see section <a href="#st_005fbreak">st_break</a></dt>
38553
<dt> <b>st-break_acwhite</b> → <code>st_break_white</code>, see section <a href="#st_005fbreak">st_break</a></dt>
38554
<dt> <b>st-break_bolder</b> → <code>st_break_boulder</code>, see section <a href="#st_005fbreak">st_break</a></dt>
38555
<dt> <b>st-break_gray</b> → <code>st_break_plain</code>, see section <a href="#st_005fbreak">st_break</a></dt>
38556
<dt> <b>st-break_invisible</b> → <code>st_ghost_break</code>, see section <a href="#st_005fghost">st_ghost</a></dt>
38557
<dt> <b>st-brick</b> → <a href="#st_005fbrick">st_brick</a></dt>
38558
<dt> <b>st-brick_magic</b> → <code>st_magic_brick</code>, see section <a href="#st_005fmagic">st_magic</a></dt>
38559
<dt> <b>st-brownie</b> → <a href="#st_005fbrownie">st_brownie</a></dt>
38560
<dt> <b>st-bug</b> → <code>st_break_bug</code>, see section <a href="#st_005fbreak">st_break</a></dt>
38561
<dt> <b>st-bumps</b> → <a href="#st_005fpinkbumps">st_pinkbumps</a></dt>
38562
<dt> <b>st-camouflage</b> → <a href="#st_005fcamouflage">st_camouflage</a></dt>
38563
<dt> <b>st-camouflage_hole</b> → <code>st_camouflage_hollow</code>, see section <a href="#st_005fcamouflage">st_camouflage</a></dt>
38564
<dt> <b>st-camouflage_move</b> → <code>st_camouflage_movable</code>, see section <a href="#st_005fcamouflage">st_camouflage</a></dt>
38565
<dt> <b>st-chameleon</b> → <a href="#st_005fchameleon">st_chameleon</a></dt>
38566
<dt> <b>st-chargeminus</b> → <code>st_charge_minus</code>, see section <a href="#st_005fcharge">st_charge</a></dt>
38567
<dt> <b>st-chargeplus</b> → <code>st_charge_plus</code>, see section <a href="#st_005fcharge">st_charge</a></dt>
38568
<dt> <b>st-chargezero</b> → <code>st_charge_zero</code>, see section <a href="#st_005fcharge">st_charge</a></dt>
38569
<dt> <b>st-chess</b> → <a href="#st_005fchess">st_chess</a></dt>
38570
<dt> <b>st-chess_black</b> → <code>st_chess_black</code>, see section <a href="#st_005fchess">st_chess</a></dt>
38571
<dt> <b>st-chess_white</b> → <code>st_chess_white</code>, see section <a href="#st_005fchess">st_chess</a></dt>
38572
<dt> <b>st-coffee</b> → <code>st_magic_oxydc</code>, see section <a href="#st_005fmagic">st_magic</a></dt>
38573
<dt> <b>st-coinslot</b> → <a href="#st_005fcoinslot">st_coinslot</a></dt>
38574
<dt> <b>st-death</b> → <a href="#st_005fdeath">st_death</a></dt>
38575
<dt> <b>st-death_invisible</b> → <code>st_death_invisible</code>, see section <a href="#st_005fdeath">st_death</a></dt>
38576
<dt> <b>st-disco-dark</b> → <code>st_disco_dark</code>, see section <a href="#st_005fdisco">st_disco</a></dt>
38577
<dt> <b>st-disco-light</b> → <code>st_disco_light</code>, see section <a href="#st_005fdisco">st_disco</a></dt>
38578
<dt> <b>st-disco-medium</b> → <code>st_disco_medium</code>, see section <a href="#st_005fdisco">st_disco</a></dt>
38579
<dt> <b>st-door_a</b> → <code>st_door_a</code>, see section <a href="#st_005fdoor">st_door</a></dt>
38580
<dt> <b>st-door_b</b> → <code>st_door_b</code>, see section <a href="#st_005fdoor">st_door</a></dt>
38581
<dt> <b>st-door_c</b> → <code>st_door_c</code>, see section <a href="#st_005fdoor">st_door</a></dt>
38582
<dt> <b>st-door-h</b> → <code>st_door_d, faces="ns"</code>, see section <a href="#st_005fdoor">st_door</a></dt>
38583
<dt> <b>st-door-h-open</b> → <code>st_door_d, faces="ns", state=OPEN</code>, see section <a href="#st_005fdoor">st_door</a></dt>
38584
<dt> <b>st-door-v</b> → <code>st_door_d, faces="ew"</code>, see section <a href="#st_005fdoor">st_door</a></dt>
38585
<dt> <b>st-door-v-open</b> → <code>st_door_d, faces="ew", state=OPEN</code>, see section <a href="#st_005fdoor">st_door</a></dt>
38586
<dt> <b>st-fakeoxyd</b> → <code>st_fake_quake</code>, see section <a href="#st_005ffake">st_fake</a></dt>
38587
<dt> <b>st-fakeoxyda</b> → <code>st_magic_oxyda</code>, see section <a href="#st_005fmagic">st_magic</a></dt>
38588
<dt> <b>st-fart</b> → <a href="#st_005fquake">st_quake</a></dt>
38589
<dt> <b>st-firebreak</b> → <code>st_flat_burnable</code>, see section <a href="#st_005fflat">st_flat</a></dt>
38590
<dt> <b>st-firebreak_move</b> → <code>st_flat_moveburnable</code>, see section <a href="#st_005fflat">st_flat</a></dt>
38591
<dt> <b>st-flash</b> → <a href="#st_005fflash">st_flash</a></dt>
38592
<dt> <b>st-flhay</b> → <code>st_box_hay</code>, see section <a href="#st_005fbox">st_box</a></dt>
38593
<dt> <b>st-floppy</b> → <a href="#st_005ffloppy">st_floppy</a></dt>
38594
<dt> <b>st-flrock</b> → <code>st_box_rock</code>, see section <a href="#st_005fbox">st_box</a></dt>
38595
<dt> <b>st-fourswitch</b> → <a href="#st_005ffourswitch">st_fourswitch</a></dt>
38596
<dt> <b>st-glass</b> → <a href="#st_005frawglass">st_rawglass</a></dt>
38597
<dt> <b>st-glass_move</b> → <code>st_rawglass_movable</code>, see section <a href="#st_005frawglass">st_rawglass</a></dt>
38598
<dt> <b>st-glass1</b> → <a href="#st_005flightglass">st_lightglass</a></dt>
38599
<dt> <b>st-glass1_hole</b> → <code>st_lightglass_hollow</code>, see section <a href="#st_005flightglass">st_lightglass</a></dt>
38600
<dt> <b>st-glass1_move</b> → <code>st_lightglass_movable</code>, see section <a href="#st_005flightglass">st_lightglass</a></dt>
38601
<dt> <b>st-glass2</b> → <a href="#st_005fdarkglass">st_darkglass</a></dt>
38602
<dt> <b>st-glass2_hole</b> → <code>st_darkglass_hollow</code>, see section <a href="#st_005fdarkglass">st_darkglass</a></dt>
38603
<dt> <b>st-glass2_move</b> → <code>st_darkglass_movable</code>, see section <a href="#st_005fdarkglass">st_darkglass</a></dt>
38604
<dt> <b>st-glass3</b> → <a href="#st_005fredfiber">st_redfiber</a></dt>
38605
<dt> <b>st-grate1</b> → <code>st_grate_cross</code>, see section <a href="#st_005fgrate">st_grate</a></dt>
38606
<dt> <b>st-grate2</b> → <code>st_grate_framed</code>, see section <a href="#st_005fgrate">st_grate</a></dt>
38607
<dt> <b>st-grate3</b> → <code>st_portal_horse</code>, see section <a href="#st_005fportal">st_portal</a></dt>
38608
<dt> <b>st-greenbrown</b> → <a href="#st_005fgreenbrown">st_greenbrown</a></dt>
38609
<dt> <b>st-greenbrown_hole</b> → <code>st_greenbrown_hollow</code>, see section <a href="#st_005fgreenbrown">st_greenbrown</a></dt>
38610
<dt> <b>st-greenbrown_move</b> → <code>st_greenbrown_movable</code>, see section <a href="#st_005fgreenbrown">st_greenbrown</a></dt>
38611
<dt> <b>st-invisible</b> → <a href="#st_005finvisible">st_invisible</a></dt>
38612
<dt> <b>st-invisible_hole</b> → <code>st_invisible_hollow</code>, see section <a href="#st_005finvisible">st_invisible</a></dt>
38613
<dt> <b>st-invisible_magic</b> → <code>st_ghost_greenbrown</code>, see section <a href="#st_005fghost">st_ghost</a></dt>
38614
<dt> <b>st-invisible_move</b> → <code>st_invisible_movable</code>, see section <a href="#st_005finvisible">st_invisible</a></dt>
38615
<dt> <b>st-key</b> → <code>st_key, code=0</code>, see section <a href="#st_005fkey">st_key</a></dt>
38616
<dt> <b>st-key_a</b> → <code>st_key, code=1</code>, see section <a href="#st_005fkey">st_key</a></dt>
38617
<dt> <b>st-key_b</b> → <code>st_key, code=2</code>, see section <a href="#st_005fkey">st_key</a></dt>
38618
<dt> <b>st-key_c</b> → <code>st_key, code=3</code>, see section <a href="#st_005fkey">st_key</a></dt>
38619
<dt> <b>st-knight</b> → <a href="#st_005fknight">st_knight</a></dt>
38620
<dt> <b>st-laserbreak</b> → <code>st_break_laser</code>, see section <a href="#st_005fbreak">st_break</a></dt>
38621
<dt> <b>st-laserswitch</b> → <a href="#st_005flaserswitch">st_laserswitch</a></dt>
38622
<dt> <b>st-lasertimeswitch</b> → <a href="#st_005flaserflop">st_laserflop</a></dt>
38623
<dt> <b>st-laser</b> → <code>st_laser_e</code>, see section <a href="#st_005flaser">st_laser</a></dt>
38624
<dt> <b>st-laser-e</b> → <code>st_laser_e</code>, see section <a href="#st_005flaser">st_laser</a></dt>
38625
<dt> <b>st-laser-n</b> → <code>st_laser_n</code>, see section <a href="#st_005flaser">st_laser</a></dt>
38626
<dt> <b>st-laser-s</b> → <code>st_laser_s</code>, see section <a href="#st_005flaser">st_laser</a></dt>
38627
<dt> <b>st-laser-w</b> → <code>st_laser_w</code>, see section <a href="#st_005flaser">st_laser</a></dt>
38628
<dt> <b>st-lightpassenger</b> → <a href="#st_005flightpassenger">st_lightpassenger</a></dt>
38629
<dt> <b>st-lightpassenger_off</b> → <code>st_lightpassenger_off</code>, see section <a href="#st_005flightpassenger">st_lightpassenger</a></dt>
38630
<dt> <b>st-likeoxyda</b> → <code>st_fake_oxyda</code>, see section <a href="#st_005ffake">st_fake</a></dt>
38631
<dt> <b>st-likeoxyda-open</b> → <code>st_fake_oxyda, state=OPEN</code>, see section <a href="#st_005ffake">st_fake</a></dt>
38632
<dt> <b>st-likeoxydb</b> → <code>st_fake_oxydb</code>, see section <a href="#st_005ffake">st_fake</a></dt>
38633
<dt> <b>st-likeoxydb-open</b> → <code>st_fake_oxydb, state=OPEN</code>, see section <a href="#st_005ffake">st_fake</a></dt>
38634
<dt> <b>st-likeoxydc</b> → <code>st_fake_oxydc</code>, see section <a href="#st_005ffake">st_fake</a></dt>
38635
<dt> <b>st-likeoxydc-open</b> → <code>st_fake_oxydc, state=OPEN</code>, see section <a href="#st_005ffake">st_fake</a></dt>
38636
<dt> <b>st-likeoxydd</b> → <code>st_fake_oxydd</code>, see section <a href="#st_005ffake">st_fake</a></dt>
38637
<dt> <b>st-likeoxydd-open</b> → <code>st_fake_oxydd, state=OPEN</code>, see section <a href="#st_005ffake">st_fake</a></dt>
38638
<dt> <b>st-mail-e</b> → <code>st_mail_e</code>, see section <a href="#st_005fmail">st_mail</a></dt>
38639
<dt> <b>st-mail-n</b> → <code>st_mail_n</code>, see section <a href="#st_005fmail">st_mail</a></dt>
38640
<dt> <b>st-mail-s</b> → <code>st_mail_s</code>, see section <a href="#st_005fmail">st_mail</a></dt>
38641
<dt> <b>st-mail-w</b> → <code>st_mail_w</code>, see section <a href="#st_005fmail">st_mail</a></dt>
38642
<dt> <b>st-marble</b> → <a href="#st_005fredbrown">st_redbrown</a></dt>
38643
<dt> <b>st-marble_hole</b> → <code>st_redbrown_hollow</code>, see section <a href="#st_005fredbrown">st_redbrown</a></dt>
38644
<dt> <b>st-marble_move</b> → <code>st_redbrown_movable</code>, see section <a href="#st_005fredbrown">st_redbrown</a></dt>
38645
<dt> <b>st-metal</b> → <a href="#st_005fmetal">st_metal</a></dt>
38646
<dt> <b>st-metal_hole</b> → <code>st_metal_hollow</code>, see section <a href="#st_005fmetal">st_metal</a></dt>
38647
<dt> <b>st-mirror-p|</b> → <code>st_mirror_slab_n</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38648
<dt> <b>st-mirror-p/</b> → <code>st_mirror_slab_e</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38649
<dt> <b>st-mirror-p-</b> → <code>st_mirror_slab_s</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38650
<dt> <b>st-mirror-p\\</b> → <code>st_mirror_slab_w</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38651
<dt> <b>st-mirror-p|t</b> → <code>st_mirror_slab_nt</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38652
<dt> <b>st-mirror-p/t</b> → <code>st_mirror_slab_et</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38653
<dt> <b>st-mirror-p-t</b> → <code>st_mirror_slab_st</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38654
<dt> <b>st-mirror-p\\t</b> → <code>st_mirror_slab_wt</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38655
<dt> <b>st-mirror-p|m</b> → <code>st_mirror_slab_nm</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38656
<dt> <b>st-mirror-p/m</b> → <code>st_mirror_slab_em</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38657
<dt> <b>st-mirror-p-m</b> → <code>st_mirror_slab_sm</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38658
<dt> <b>st-mirror-p\\m</b> → <code>st_mirror_slab_wm</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38659
<dt> <b>st-mirror-p|tm</b> → <code>st_mirror_slab_ntm</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38660
<dt> <b>st-mirror-p/tm</b> → <code>st_mirror_slab_etm</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38661
<dt> <b>st-mirror-p-tm</b> → <code>st_mirror_slab_stm</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38662
<dt> <b>st-mirror-p\\tm</b> → <code>st_mirror_slab_wtm</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38663
<dt> <b>st-mirror-3^</b> → <code>st_mirror_triangle_n</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38664
<dt> <b>st-mirror-3></b> → <code>st_mirror_triangle_e</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38665
<dt> <b>st-mirror-3v</b> → <code>st_mirror_triangle_s</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38666
<dt> <b>st-mirror-3<</b> → <code>st_mirror_triangle_w</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38667
<dt> <b>st-mirror-3^t</b> → <code>st_mirror_triangle_nt</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38668
<dt> <b>st-mirror-3>t</b> → <code>st_mirror_triangle_et</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38669
<dt> <b>st-mirror-3vt</b> → <code>st_mirror_triangle_st</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38670
<dt> <b>st-mirror-3<t</b> → <code>st_mirror_triangle_wt</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38671
<dt> <b>st-mirror-3^m</b> → <code>st_mirror_triangle_nm</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38672
<dt> <b>st-mirror-3>m</b> → <code>st_mirror_triangle_em</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38673
<dt> <b>st-mirror-3vm</b> → <code>st_mirror_triangle_sm</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38674
<dt> <b>st-mirror-3<m</b> → <code>st_mirror_triangle_wm</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38675
<dt> <b>st-mirror-3^tm</b> → <code>st_mirror_triangle_ntm</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38676
<dt> <b>st-mirror-3>tm</b> → <code>st_mirror_triangle_etm</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38677
<dt> <b>st-mirror-3vtm</b> → <code>st_mirror_triangle_stm</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38678
<dt> <b>st-mirror-3<tm</b> → <code>st_mirror_triangle_wtm</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38679
<dt> <b>st-oneway</b> → <a href="#st_005foneway">st_oneway</a></dt>
38680
<dt> <b>st-oneway_black"</b> → <code>st_oneway_black</code>, see section <a href="#st_005foneway">st_oneway</a></dt>
38681
<dt> <b>st-oneway_black-e"</b> → <code>st_oneway_black_e</code>, see section <a href="#st_005foneway">st_oneway</a></dt>
38682
<dt> <b>st-oneway_black-n"</b> → <code>st_oneway_black_n</code>, see section <a href="#st_005foneway">st_oneway</a></dt>
38683
<dt> <b>st-oneway_black-s"</b> → <code>st_oneway_black_s</code>, see section <a href="#st_005foneway">st_oneway</a></dt>
38684
<dt> <b>st-oneway_black-w"</b> → <code>st_oneway_black_w</code>, see section <a href="#st_005foneway">st_oneway</a></dt>
38685
<dt> <b>st-oneway-e"</b> → <code>st_oneway_e</code>, see section <a href="#st_005foneway">st_oneway</a></dt>
38686
<dt> <b>st-oneway-n"</b> → <code>st_oneway_n</code>, see section <a href="#st_005foneway">st_oneway</a></dt>
38687
<dt> <b>st-oneway-s"</b> → <code>st_oneway_s</code>, see section <a href="#st_005foneway">st_oneway</a></dt>
38688
<dt> <b>st-oneway-w"</b> → <code>st_oneway_w</code>, see section <a href="#st_005foneway">st_oneway</a></dt>
38689
<dt> <b>st-oneway_white"</b> → <code>st_oneway_white</code>, see section <a href="#st_005foneway">st_oneway</a></dt>
38690
<dt> <b>st-oneway_white-e"</b> → <code>st_oneway_white_e</code>, see section <a href="#st_005foneway">st_oneway</a></dt>
38691
<dt> <b>st-oneway_white-n"</b> → <code>st_oneway_white_n</code>, see section <a href="#st_005foneway">st_oneway</a></dt>
38692
<dt> <b>st-oneway_white-s"</b> → <code>st_oneway_white_s</code>, see section <a href="#st_005foneway">st_oneway</a></dt>
38693
<dt> <b>st-oneway_white-w"</b> → <code>st_oneway_white_w</code>, see section <a href="#st_005foneway">st_oneway</a></dt>
38694
<dt> <b>st-oxyd</b> → <a href="#st_005foxyd">st_oxyd</a></dt>
38695
<dt> <b>st-plain</b> → <a href="#st_005fflat">st_flat</a></dt>
38696
<dt> <b>st-plain_break</b> → <code>st_flat_breakable</code>, see section <a href="#st_005fflat">st_flat</a></dt>
38697
<dt> <b>st-plain_cracked</b> → <code>st_flat_cracked</code>, see section <a href="#st_005fflat">st_flat</a></dt>
38698
<dt> <b>st-plain_hole</b> → <code>st_flat_hollow</code>, see section <a href="#st_005fflat">st_flat</a></dt>
38699
<dt> <b>st-plain_move</b> → <code>st_flat_movable</code>, see section <a href="#st_005fflat">st_flat</a></dt>
38700
<dt> <b>st-pmirror</b> → <code>st_mirror_slab_e</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38701
<dt> <b>st-polarswitch</b> → <a href="#st_005fpolarswitch">st_polarswitch</a></dt>
38702
<dt> <b>st-pull</b> → <a href="#st_005fpull">st_pull</a></dt>
38703
<dt> <b>st-puzzle</b> → <a href="#st_005fpuzzle">st_puzzle</a></dt>
38704
<dt> <b>st-puzzle-e</b> → <code>st_puzzle_blue_e</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38705
<dt> <b>st-puzzle-es</b> → <code>st_puzzle_blue_es</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38706
<dt> <b>st-puzzle-esw</b> → <code>st_puzzle_blue_esw</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38707
<dt> <b>st-puzzle-ew</b> → <code>st_puzzle_blue_ew</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38708
<dt> <b>st-puzzle-hollow</b> → <code>st_puzzle_blue_nesw_hollow</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38709
<dt> <b>st-puzzle-n</b> → <code>st_puzzle_blue_n</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38710
<dt> <b>st-puzzle-ne</b> → <code>st_puzzle_blue_ne</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38711
<dt> <b>st-puzzle-nes</b> → <code>st_puzzle_blue_nes</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38712
<dt> <b>st-puzzle-nesw</b> → <code>st_puzzle_blue_nesw</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38713
<dt> <b>st-puzzle-new</b> → <code>st_puzzle_blue_new</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38714
<dt> <b>st-puzzle-ns</b> → <code>st_puzzle_blue_ns</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38715
<dt> <b>st-puzzle-nsw</b> → <code>st_puzzle_blue_nsw</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38716
<dt> <b>st-puzzle-nw</b> → <code>st_puzzle_blue_nw</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38717
<dt> <b>st-puzzle-s</b> → <code>st_puzzle_blue_s</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38718
<dt> <b>st-puzzle-sw</b> → <code>st_puzzle_blue_sw</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38719
<dt> <b>st-puzzle-w</b> → <code>st_puzzle_blue_w</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38720
<dt> <b>st-puzzle2-e</b> → <code>st_puzzle_yellow_e</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38721
<dt> <b>st-puzzle2-es</b> → <code>st_puzzle_yellow_es</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38722
<dt> <b>st-puzzle2-esw</b> → <code>st_puzzle_yellow_esw</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38723
<dt> <b>st-puzzle2-ew</b> → <code>st_puzzle_yellow_ew</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38724
<dt> <b>st-puzzle2-hollow</b> → <code>st_puzzle_yellow_nesw_hollow</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38725
<dt> <b>st-puzzle2-n</b> → <code>st_puzzle_yellow_n</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38726
<dt> <b>st-puzzle2-ne</b> → <code>st_puzzle_yellow_ne</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38727
<dt> <b>st-puzzle2-nes</b> → <code>st_puzzle_yellow_nes</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38728
<dt> <b>st-puzzle2-nesw</b> → <code>st_puzzle_yellow_nesw</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38729
<dt> <b>st-puzzle2-new</b> → <code>st_puzzle_yellow_new</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38730
<dt> <b>st-puzzle2-ns</b> → <code>st_puzzle_yellow_ns</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38731
<dt> <b>st-puzzle2-nsw</b> → <code>st_puzzle_yellow_nsw</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38732
<dt> <b>st-puzzle2-nw</b> → <code>st_puzzle_yellow_nw</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38733
<dt> <b>st-puzzle2-s</b> → <code>st_puzzle_yellow_s</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38734
<dt> <b>st-puzzle2-sw</b> → <code>st_puzzle_yellow_sw</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38735
<dt> <b>st-puzzle2-w</b> → <code>st_puzzle_yellow_w</code>, see section <a href="#st_005fpuzzle">st_puzzle</a></dt>
38736
<dt> <b>st-redrock</b> → <a href="#st_005fredrock">st_redrock</a></dt>
38737
<dt> <b>st-rock1</b> → <a href="#st_005fgranite">st_granite</a></dt>
38738
<dt> <b>st-rock1_hole</b> → <code>st_granite_hollow</code>, see section <a href="#st_005fgranite">st_granite</a></dt>
38739
<dt> <b>st-rock1_move</b> → <code>st_granite_movable</code>, see section <a href="#st_005fgranite">st_granite</a></dt>
38740
<dt> <b>st-rock2</b> → <a href="#st_005fdarkgray">st_darkgray</a></dt>
38741
<dt> <b>st-rock2_hole</b> → <code>st_darkgray_hollow</code>, see section <a href="#st_005fdarkgray">st_darkgray</a></dt>
38742
<dt> <b>st-rock3</b> → <a href="#st_005fplaster">st_plaster</a></dt>
38743
<dt> <b>st-rock3_break</b> → <code>st_plaster_breakable</code>, see section <a href="#st_005fplaster">st_plaster</a></dt>
38744
<dt> <b>st-rock3_hole</b> → <code>st_plaster_hollow</code>, see section <a href="#st_005fplaster">st_plaster</a></dt>
38745
<dt> <b>st-rock3_move</b> → <code>st_plaster_movable</code>, see section <a href="#st_005fplaster">st_plaster</a></dt>
38746
<dt> <b>st-rock3_movebreak</b> → <code>st_plaster_movebreakable</code>, see section <a href="#st_005fplaster">st_plaster</a></dt>
38747
<dt> <b>st-rock4</b> → <a href="#st_005fpurplemarble">st_purplemarble</a></dt>
38748
<dt> <b>st-rock5</b> → <a href="#st_005ftigris">st_tigris</a></dt>
38749
<dt> <b>st-rock6</b> → <a href="#st_005fpurplegray">st_purplegray</a></dt>
38750
<dt> <b>st-rock7</b> → <a href="#st_005fgreengray">st_greengray</a></dt>
38751
<dt> <b>st-rock8</b> → <a href="#st_005fconcrete">st_concrete</a></dt>
38752
<dt> <b>st-rock9</b> → <a href="#st_005fancient">st_ancient</a></dt>
38753
<dt> <b>st-rock10</b> → <a href="#st_005fbrownmarble">st_brownmarble</a></dt>
38754
<dt> <b>st-rotator-left</b> → <code>st_rotator_ccw</code>, see section <a href="#st_005frotator">st_rotator</a></dt>
38755
<dt> <b>st-rotator_move-left</b> → <code>st_rotator_ccw_movable</code>, see section <a href="#st_005frotator">st_rotator</a></dt>
38756
<dt> <b>st-rotator_move-right</b> → <code>st_rotator_cw_movable</code>, see section <a href="#st_005frotator">st_rotator</a></dt>
38757
<dt> <b>st-rotator-right</b> → <code>st_rotator_cw</code>, see section <a href="#st_005frotator">st_rotator</a></dt>
38758
<dt> <b>st-rubberband</b> → <a href="#st_005frubberband">st_rubberband</a></dt>
38759
<dt> <b>st-scissors</b> → <code>st_scissors, inverse=true</code>, see section <a href="#st_005fscissors">st_scissors</a></dt>
38760
<dt> <b>st-shogun</b> → <a href="#st_005fshogun">st_shogun</a></dt>
38761
<dt> <b>st-shogun-l</b> → <code>st_shogun_l</code>, see section <a href="#st_005fshogun">st_shogun</a></dt>
38762
<dt> <b>st-shogun-m</b> → <code>st_shogun_m</code>, see section <a href="#st_005fshogun">st_shogun</a></dt>
38763
<dt> <b>st-shogun-ml</b> → <code>st_shogun_ml</code>, see section <a href="#st_005fshogun">st_shogun</a></dt>
38764
<dt> <b>st-shogun-s</b> → <code>st_shogun_s</code>, see section <a href="#st_005fshogun">st_shogun</a></dt>
38765
<dt> <b>st-shogun-sl</b> → <code>st_shogun_sl</code>, see section <a href="#st_005fshogun">st_shogun</a></dt>
38766
<dt> <b>st-shogun-sm</b> → <code>st_shogun_sm</code>, see section <a href="#st_005fshogun">st_shogun</a></dt>
38767
<dt> <b>st-shogun-sml</b> → <code>st_shogun_sml</code>, see section <a href="#st_005fshogun">st_shogun</a></dt>
38768
<dt> <b>st-spitter</b> → <a href="#st_005fspitter">st_spitter</a></dt>
38769
<dt> <b>st-stonebrush</b> → <code>st_ghost_purplemarble</code>, see section <a href="#st_005fghost">st_ghost</a></dt>
38770
<dt> <b>st-stoneimpulse</b> → <a href="#st_005fstoneimpulse">st_stoneimpulse</a></dt>
38771
<dt> <b>st-stoneimpulse-hollow</b> → <code>st_stoneimpulse_hollow</code>, see section <a href="#st_005fstoneimpulse">st_stoneimpulse</a></dt>
38772
<dt> <b>st-stoneimpulse_movable</b> → <code>st_stoneimpulse_movable</code>, see section <a href="#st_005fstoneimpulse">st_stoneimpulse</a></dt>
38773
<dt> <b>st-stone1</b> → <a href="#st_005fbrownpyramid">st_brownpyramid</a></dt>
38774
<dt> <b>st-stone2</b> → <a href="#st_005fredmarble">st_redmarble</a></dt>
38775
<dt> <b>st-stone_break</b> → <code>st_break_oxydc</code>, see section <a href="#st_005fbreak">st_break</a></dt>
38776
<dt> <b>st-surprise</b> → <a href="#st_005fsurprise">st_surprise</a></dt>
38777
<dt> <b>st-swap</b> → <a href="#st_005fswap">st_swap</a></dt>
38778
<dt> <b>st-switch</b> → <code>st_switch, instant=true</code>, see section <a href="#st_005fswitch">st_switch</a></dt>
38779
<dt> <b>st-switch_black</b> → <code>st_switch_black, instant=true</code>, see section <a href="#st_005fswitch">st_switch</a></dt>
38780
<dt> <b>st-switch_white</b> → <code>st_switch_white, instant=true</code>, see section <a href="#st_005fswitch">st_switch</a></dt>
38781
<dt> <b>st-thief</b> → <a href="#st_005fthief">st_thief</a></dt>
38782
<dt> <b>st-timer</b> → <a href="#st_005ftimer">st_timer</a></dt>
38783
<dt> <b>st-timeswitch</b> → <a href="#st_005fmonoflop">st_monoflop</a></dt>
38784
<dt> <b>st-turnstile</b> → <code>st_turnstile_red</code>, see section <a href="#st_005fturnstile">st_turnstile</a></dt>
38785
<dt> <b>st-turnstile-green</b> → <code>st_turnstile_green</code>, see section <a href="#st_005fturnstile">st_turnstile</a></dt>
38786
<dt> <b>st-turnstile-e</b> → <code>st_turnstilearm_e</code>, see section <a href="#st_005fturnstilearm">st_turnstilearm</a></dt>
38787
<dt> <b>st-turnstile-n</b> → <code>st_turnstilearm_n</code>, see section <a href="#st_005fturnstilearm">st_turnstilearm</a></dt>
38788
<dt> <b>st-turnstile-s</b> → <code>st_turnstilearm_s</code>, see section <a href="#st_005fturnstilearm">st_turnstilearm</a></dt>
38789
<dt> <b>st-turnstile-w</b> → <code>st_turnstilearm_w</code>, see section <a href="#st_005fturnstilearm">st_turnstilearm</a></dt>
38790
<dt> <b>st-volcano</b> → <a href="#st_005fvolcano">st_volcano</a></dt>
38791
<dt> <b>st-volcano_active</b> → <code>st_volcano_active</code>, see section <a href="#st_005fvolcano">st_volcano</a></dt>
38792
<dt> <b>st-volcano-growing</b> → <code>st_volcano_new</code>, see section <a href="#st_005fvolcano">st_volcano</a></dt>
38793
<dt> <b>st-volcano_inactive</b> → <code>st_volcano_idle</code>, see section <a href="#st_005fvolcano">st_volcano</a></dt>
38794
<dt> <b>st-whiteballs</b> → <code>st_jamb_white</code>, see section <a href="#st_005fjamb">st_jamb</a></dt>
38795
<dt> <b>st-white1</b> → <code>st_passage_white_square</code>, see section <a href="#st_005fpassage">st_passage</a></dt>
38796
<dt> <b>st-white2</b> → <code>st_passage_white_slash</code>, see section <a href="#st_005fpassage">st_passage</a></dt>
38797
<dt> <b>st-white3</b> → <code>st_passage_white_cross</code>, see section <a href="#st_005fpassage">st_passage</a></dt>
38798
<dt> <b>st-white4</b> → <code>st_passage_white_frame</code>, see section <a href="#st_005fpassage">st_passage</a></dt>
38799
<dt> <b>st-window</b> → <a href="#st_005fwindow">st_window</a></dt>
38800
<dt> <b>st-wood</b> → <code>st_box_wood</code>, see section <a href="#st_005fbox">st_box</a></dt>
38801
<dt> <b>st-wood1</b> → <code>st_box_wood_h</code>, see section <a href="#st_005fbox">st_box</a></dt>
38802
<dt> <b>st-wood2</b> → <code>st_box_wood_v</code>, see section <a href="#st_005fbox">st_box</a></dt>
38803
<dt> <b>st-wood-growing</b> → <code>st_box_wood_growing</code>, see section <a href="#st_005fbox">st_box</a></dt>
38804
<dt> <b>st-wood_001</b> → <a href="#st_005fpanel">st_panel</a></dt>
38805
<dt> <b>st-woven</b> → <a href="#st_005fwoven">st_woven</a></dt>
38806
<dt> <b>st-yellow</b> → <a href="#st_005fyellow">st_yellow</a></dt>
38807
<dt> <b>st-yinyang1</b> → <code>st_blur_cross</code>, see section <a href="#st_005fblur">st_blur</a></dt>
38808
<dt> <b>st-yinyang2</b> → <code>st_blur_straight</code>, see section <a href="#st_005fblur">st_blur</a></dt>
38809
<dt> <b>st-yinyang3</b> → <code>st_blur_magic</code>, see section <a href="#st_005fblur">st_blur</a></dt>
38810
<dt> <b>st-3mirror</b> → <code>st_mirror_triangle_s</code>, see section <a href="#st_005fmirror">st_mirror</a></dt>
38813
<a name="SEC_Contents"></a>
38814
<table cellpadding="1" cellspacing="1" border="0">
38815
<tr><td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
38816
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
38817
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
38818
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
38820
<h1>Table of Contents</h1>
38821
<div class="contents">
38824
<li><a name="toc-Running-Enigma-1" href="#Running-Enigma">1. Running Enigma</a>
38826
<li><a name="toc-Locating-Resources-1" href="#Locating-Resources">1.1 Locating Resources</a></li>
38827
<li><a name="toc-Startup-Switches-1" href="#Startup-Switches">1.2 Startup Switches</a></li>
38828
<li><a name="toc-User-Options-1" href="#User-Options">1.3 User Options</a></li>
38829
<li><a name="toc-Inventory-Console-1" href="#Inventory-Console">1.4 Inventory Console</a></li>
38830
<li><a name="toc-Level-Info-1" href="#Level-Info">1.5 Level Info</a>
38832
<li><a name="toc-Public-Ratings-1" href="#Public-Ratings">1.5.1 Public Ratings</a></li>
38833
<li><a name="toc-Scores-1" href="#Scores">1.5.2 Scores</a></li>
38834
<li><a name="toc-Versions-1" href="#Versions">1.5.3 Versions</a></li>
38835
<li><a name="toc-Private-Annotations-and-Ratings-1" href="#Private-Annotations-and-Ratings">1.5.4 Private Annotations and Ratings</a></li>
38836
<li><a name="toc-Screenshots-1" href="#Screenshots">1.5.5 Screenshots</a></li>
38838
<li><a name="toc-Handicap-and-PAR-1" href="#Handicap-and-PAR">1.6 Handicap and PAR</a></li>
38839
<li><a name="toc-User-Sound-Sets-1" href="#User-Sound-Sets">1.7 User Sound Sets</a></li>
38841
<li><a name="toc-Levelpack-Basics-1" href="#Levelpack-Basics">2. Levelpack Basics</a>
38843
<li><a name="toc-Getting-Started-with-Levelpacks-1" href="#Getting-Started-with-Levelpacks">2.1 Getting Started with Levelpacks</a></li>
38844
<li><a name="toc-Converting-0_002e92-Levelpacks-1" href="#Converting-0_002e92-Levelpacks">2.2 Converting 0.92 Levelpacks</a></li>
38845
<li><a name="toc-Zip-Levelpacks-1" href="#Zip-Levelpacks">2.3 Zip Levelpacks</a></li>
38846
<li><a name="toc-Grouping-and-Sorting-Levelpacks-1" href="#Grouping-and-Sorting-Levelpacks">2.4 Grouping and Sorting Levelpacks</a></li>
38847
<li><a name="toc-Creating-New-Levelpacks-1" href="#Creating-New-Levelpacks">2.5 Creating New Levelpacks</a></li>
38848
<li><a name="toc-Modifying-and-Deleting-Levelpacks-1" href="#Modifying-and-Deleting-Levelpacks">2.6 Modifying and Deleting Levelpacks</a></li>
38849
<li><a name="toc-Composing-Levelpacks-1" href="#Composing-Levelpacks">2.7 Composing Levelpacks</a></li>
38851
<li><a name="toc-Level-Basics-1" href="#Level-Basics">3. Level Basics</a>
38853
<li><a name="toc-Getting-Started-with-Levels-1" href="#Getting-Started-with-Levels">3.1 Getting Started with Levels</a></li>
38854
<li><a name="toc-XML-Level-structure-1" href="#XML-Level-structure">3.2 XML Level structure</a></li>
38855
<li><a name="toc-Info-metadata-1" href="#Info-metadata">3.3 Info metadata</a>
38857
<li><a name="toc-_003cidentity_003e-1" href="#g_t_003cidentity_003e">3.3.1 <identity></a></li>
38858
<li><a name="toc-_003cversion_003e-1" href="#g_t_003cversion_003e">3.3.2 <version></a></li>
38859
<li><a name="toc-_003cauthor_003e-1" href="#g_t_003cauthor_003e">3.3.3 <author></a></li>
38860
<li><a name="toc-_003ccopyright_003e-1" href="#g_t_003ccopyright_003e">3.3.4 <copyright></a></li>
38861
<li><a name="toc-_003clicense_003e-1" href="#g_t_003clicense_003e">3.3.5 <license></a></li>
38862
<li><a name="toc-_003ccompatibility_003e-1" href="#g_t_003ccompatibility_003e">3.3.6 <compatibility></a></li>
38863
<li><a name="toc-_003cmodes_003e-1" href="#g_t_003cmodes_003e">3.3.7 <modes></a></li>
38864
<li><a name="toc-_003ccomments_003e-1" href="#g_t_003ccomments_003e">3.3.8 <comments></a></li>
38865
<li><a name="toc-_003cscore_003e-1" href="#g_t_003cscore_003e">3.3.9 <score></a></li>
38867
<li><a name="toc-LUA-code-1" href="#LUA-code">3.4 LUA code</a></li>
38868
<li><a name="toc-Internationalization-_0028i18n_0029-1" href="#Internationalization-_0028i18n_0029">3.5 Internationalization (i18n)</a></li>
38869
<li><a name="toc-Usage-1" href="#Usage">3.6 Usage</a></li>
38870
<li><a name="toc-Update-and-Upgrade-1" href="#Update-and-Upgrade">3.7 Update and Upgrade</a></li>
38871
<li><a name="toc-Library-Files-1" href="#Library-Files">3.8 Library Files</a>
38873
<li><a name="toc-Writing-a-Library-1" href="#Writing-a-Library">3.8.1 Writing a Library</a></li>
38874
<li><a name="toc-Maintaining-a-Library-1" href="#Maintaining-a-Library">3.8.2 Maintaining a Library</a></li>
38876
<li><a name="toc-Multilevel-Files-1" href="#Multilevel-Files">3.9 Multilevel Files</a></li>
38878
<li><a name="toc-Enigma-Paradigm-1" href="#Enigma-Paradigm">4. Enigma Paradigm</a>
38880
<li><a name="toc-The-World_0027s-Structure-1" href="#The-World_0027s-Structure">4.1 The World’s Structure</a>
38882
<li><a name="toc-World_0027s-Shape-and-Coordinates-1" href="#World_0027s-Shape-and-Coordinates">4.1.1 World’s Shape and Coordinates</a></li>
38883
<li><a name="toc-Object-Layers-1" href="#Object-Layers">4.1.2 Object Layers</a></li>
38884
<li><a name="toc-World-as-an-Object-1" href="#World-as-an-Object">4.1.3 World as an Object</a></li>
38885
<li><a name="toc-Unpositioned-Objects-1" href="#Unpositioned-Objects">4.1.4 Unpositioned Objects</a></li>
38886
<li><a name="toc-Player-and-Inventory-1" href="#Player-and-Inventory">4.1.5 Player and Inventory</a></li>
38887
<li><a name="toc-Owned-Objects-1" href="#Owned-Objects">4.1.6 Owned Objects</a></li>
38889
<li><a name="toc-Object-Description-1" href="#Object-Description">4.2 Object Description</a>
38891
<li><a name="toc-Object-Kind-1" href="#Object-Kind">4.2.1 Object Kind</a></li>
38892
<li><a name="toc-Object-Reference-1" href="#Object-Reference">4.2.2 Object Reference</a></li>
38893
<li><a name="toc-Object-Naming-1" href="#Object-Naming">4.2.3 Object Naming</a></li>
38894
<li><a name="toc-Object-Attributes-1" href="#Object-Attributes">4.2.4 Object Attributes</a></li>
38896
<li><a name="toc-Methods-of-Interaction-1" href="#Methods-of-Interaction">4.3 Methods of Interaction</a>
38898
<li><a name="toc-Messages-1" href="#Messages">4.3.1 Messages</a></li>
38899
<li><a name="toc-Target-_002d-Action-1" href="#Target-_002d-Action">4.3.2 Target - Action</a></li>
38900
<li><a name="toc-Callback-Function-1" href="#Callback-Function">4.3.3 Callback Function</a></li>
38901
<li><a name="toc-Object-State-1" href="#Object-State">4.3.4 Object State</a></li>
38903
<li><a name="toc-The-Lifecycle-of-a-Level-1" href="#The-Lifecycle-of-a-Level">4.4 The Lifecycle of a Level</a>
38905
<li><a name="toc-Library-Preloading-1" href="#Library-Preloading">4.4.1 Library Preloading</a></li>
38906
<li><a name="toc-Snapshot-Principle-1" href="#Snapshot-Principle">4.4.2 Snapshot Principle</a></li>
38907
<li><a name="toc-Level-Initialization-1" href="#Level-Initialization">4.4.3 Level Initialization</a></li>
38908
<li><a name="toc-Object-Transformation-1" href="#Object-Transformation">4.4.4 Object Transformation</a></li>
38909
<li><a name="toc-Named-Positions-1" href="#Named-Positions">4.4.5 Named Positions</a></li>
38910
<li><a name="toc-Callbacks-and-Load-Balancing-1" href="#Callbacks-and-Load-Balancing">4.4.6 Callbacks and Load Balancing</a></li>
38911
<li><a name="toc-Level-Restart-1" href="#Level-Restart">4.4.7 Level Restart</a></li>
38912
<li><a name="toc-Ending-Conditions-1" href="#Ending-Conditions">4.4.8 Ending Conditions</a></li>
38916
<li><a name="toc-Lua-API-1" href="#Lua-API">5. Lua API</a>
38918
<li><a name="toc-Basic-Lua-Examples-1" href="#Basic-Lua-Examples">5.1 Basic Lua Examples</a>
38920
<li><a name="toc-Basic-Example-1" href="#Basic-Example">5.1.1 Basic Example</a></li>
38921
<li><a name="toc-Colored-Turnstiles-1" href="#Colored-Turnstiles">5.1.2 Colored Turnstiles</a></li>
38923
<li><a name="toc-API-2-Overview-1" href="#API-2-Overview">5.2 API 2 Overview</a>
38925
<li><a name="toc-Types-Overview-1" href="#Types-Overview">5.2.1 Types Overview</a></li>
38926
<li><a name="toc-Position-Tasks-1" href="#Position-Tasks">5.2.2 Position Tasks</a></li>
38927
<li><a name="toc-Attribute-Tasks-1" href="#Attribute-Tasks">5.2.3 Attribute Tasks</a></li>
38928
<li><a name="toc-Object-Tasks-1" href="#Object-Tasks">5.2.4 Object Tasks</a></li>
38929
<li><a name="toc-Group-Tasks-1" href="#Group-Tasks">5.2.5 Group Tasks</a></li>
38930
<li><a name="toc-Tiles-and-World-Tasks-1" href="#Tiles-and-World-Tasks">5.2.6 Tiles and World Tasks</a></li>
38931
<li><a name="toc-Named-Positions-Tasks-1" href="#Named-Positions-Tasks">5.2.7 Named Positions Tasks</a></li>
38933
<li><a name="toc-Advanced-Lua-Examples-1" href="#Advanced-Lua-Examples">5.3 Advanced Lua Examples</a>
38935
<li><a name="toc-Color-Maze-1" href="#Color-Maze">5.3.1 Color Maze</a></li>
38936
<li><a name="toc-Weirdly-Wired-1" href="#Weirdly-Wired">5.3.2 Weirdly Wired</a></li>
38938
<li><a name="toc-Introduction-to-Datatypes-1" href="#Introduction-to-Datatypes">5.4 Introduction to Datatypes</a>
38940
<li><a name="toc-Syntax-and-Conventions-1" href="#Syntax-and-Conventions">5.4.1 Syntax and Conventions</a></li>
38941
<li><a name="toc-Value-and-Reference-1" href="#Value-and-Reference">5.4.2 Value and Reference</a></li>
38942
<li><a name="toc-Polymorphism-and-Overloading-1" href="#Polymorphism-and-Overloading">5.4.3 Polymorphism and Overloading</a></li>
38943
<li><a name="toc-Pseudo-Datatypes-1" href="#Pseudo-Datatypes">5.4.4 Pseudo Datatypes</a></li>
38945
<li><a name="toc-Position-1" href="#Position">5.5 Position</a>
38947
<li><a name="toc-Position-Addition-and-Subtraction-1" href="#Position-Addition-and-Subtraction">5.5.1 Position Addition and Subtraction</a></li>
38948
<li><a name="toc-Position-Multiplication-and-Division-1" href="#Position-Multiplication-and-Division">5.5.2 Position Multiplication and Division</a></li>
38949
<li><a name="toc-Position-Sign-1" href="#Position-Sign">5.5.3 Position Sign</a></li>
38950
<li><a name="toc-Position-Center-1" href="#Position-Center">5.5.4 Position Center</a></li>
38951
<li><a name="toc-Position-Comparison-1" href="#Position-Comparison">5.5.5 Position Comparison</a></li>
38952
<li><a name="toc-Position-Concatenation-1" href="#Position-Concatenation">5.5.6 Position Concatenation</a></li>
38953
<li><a name="toc-Position-Coordinate-Access-1" href="#Position-Coordinate-Access">5.5.7 Position Coordinate Access</a></li>
38954
<li><a name="toc-Position-Grid-Rounding-1" href="#Position-Grid-Rounding">5.5.8 Position Grid Rounding</a></li>
38955
<li><a name="toc-Position-Existence-1" href="#Position-Existence">5.5.9 Position Existence</a></li>
38957
<li><a name="toc-Object-1" href="#Object">5.6 Object</a>
38959
<li><a name="toc-Object-Attribute-Access-1" href="#Object-Attribute-Access">5.6.1 Object Attribute Access</a></li>
38960
<li><a name="toc-Object-Messaging-1" href="#Object-Messaging">5.6.2 Object Messaging</a></li>
38961
<li><a name="toc-Object-Comparison-1" href="#Object-Comparison">5.6.3 Object Comparison</a></li>
38962
<li><a name="toc-Object-Existence-1" href="#Object-Existence">5.6.4 Object Existence</a></li>
38963
<li><a name="toc-Object-Kill-1" href="#Object-Kill">5.6.5 Object Kill</a></li>
38964
<li><a name="toc-Object-Kind-Check-1" href="#Object-Kind-Check">5.6.6 Object Kind Check</a></li>
38965
<li><a name="toc-Object-Coordinate-Access-1" href="#Object-Coordinate-Access">5.6.7 Object Coordinate Access</a></li>
38966
<li><a name="toc-Object-Addition-and-Subtraction-1" href="#Object-Addition-and-Subtraction">5.6.8 Object Addition and Subtraction</a></li>
38967
<li><a name="toc-Object-Center-1" href="#Object-Center">5.6.9 Object Center</a></li>
38968
<li><a name="toc-Object-Join-1" href="#Object-Join">5.6.10 Object Join</a></li>
38969
<li><a name="toc-Object-Intersection-1" href="#Object-Intersection">5.6.11 Object Intersection</a></li>
38970
<li><a name="toc-Object-Difference-1" href="#Object-Difference">5.6.12 Object Difference</a></li>
38971
<li><a name="toc-Object-Sound-1" href="#Object-Sound">5.6.13 Object Sound</a></li>
38973
<li><a name="toc-Group-1" href="#Group">5.7 Group</a>
38975
<li><a name="toc-Group-Messaging-1" href="#Group-Messaging">5.7.1 Group Messaging</a></li>
38976
<li><a name="toc-Group-Attribute-Write-1" href="#Group-Attribute-Write">5.7.2 Group Attribute Write</a></li>
38977
<li><a name="toc-Group-Comparison-1" href="#Group-Comparison">5.7.3 Group Comparison</a></li>
38978
<li><a name="toc-Group-Length-1" href="#Group-Length">5.7.4 Group Length</a></li>
38979
<li><a name="toc-Group-Member-Access-1" href="#Group-Member-Access">5.7.5 Group Member Access</a></li>
38980
<li><a name="toc-Group-Loop-1" href="#Group-Loop">5.7.6 Group Loop</a></li>
38981
<li><a name="toc-Group-Join-1" href="#Group-Join">5.7.7 Group Join</a></li>
38982
<li><a name="toc-Group-Intersection-1" href="#Group-Intersection">5.7.8 Group Intersection</a></li>
38983
<li><a name="toc-Group-Difference-1" href="#Group-Difference">5.7.9 Group Difference</a></li>
38984
<li><a name="toc-Group-Shuffle-1" href="#Group-Shuffle">5.7.10 Group Shuffle</a></li>
38985
<li><a name="toc-Group-Sorting-1" href="#Group-Sorting">5.7.11 Group Sorting</a></li>
38986
<li><a name="toc-Group-Subset-1" href="#Group-Subset">5.7.12 Group Subset</a></li>
38987
<li><a name="toc-Group-Nearest-Object-1" href="#Group-Nearest-Object">5.7.13 Group Nearest Object</a></li>
38989
<li><a name="toc-NamedObjects-1" href="#NamedObjects">5.8 NamedObjects</a>
38991
<li><a name="toc-NamedObjects-Repository-Request-1" href="#NamedObjects-Repository-Request">5.8.1 NamedObjects Repository Request</a></li>
38992
<li><a name="toc-NamedObjects-Object-Naming-1" href="#NamedObjects-Object-Naming">5.8.2 NamedObjects Object Naming</a></li>
38994
<li><a name="toc-PositionList-1" href="#PositionList">5.9 PositionList</a>
38996
<li><a name="toc-PositionList-Comparison-1" href="#PositionList-Comparison">5.9.1 PositionList Comparison</a></li>
38997
<li><a name="toc-PositionList-Length-1" href="#PositionList-Length">5.9.2 PositionList Length</a></li>
38998
<li><a name="toc-PositionList-Member-Access-1" href="#PositionList-Member-Access">5.9.3 PositionList Member Access</a></li>
38999
<li><a name="toc-PositionList-Concatenation-1" href="#PositionList-Concatenation">5.9.4 PositionList Concatenation</a></li>
39000
<li><a name="toc-PositionList-Translation-1" href="#PositionList-Translation">5.9.5 PositionList Translation</a></li>
39001
<li><a name="toc-PositionList-Stretching-1" href="#PositionList-Stretching">5.9.6 PositionList Stretching</a></li>
39003
<li><a name="toc-Positions-Repository-1" href="#Positions-Repository">5.10 Positions Repository</a>
39005
<li><a name="toc-Positions-Repository-Request-1" href="#Positions-Repository-Request">5.10.1 Positions Repository Request</a></li>
39006
<li><a name="toc-Positions-Repository-Storage-1" href="#Positions-Repository-Storage">5.10.2 Positions Repository Storage</a></li>
39007
<li><a name="toc-Position-Conversion-1" href="#Position-Conversion">5.10.3 Position Conversion</a></li>
39008
<li><a name="toc-PositionList-Conversion-1" href="#PositionList-Conversion">5.10.4 PositionList Conversion</a></li>
39010
<li><a name="toc-Tile-and-Object-Declaration-1" href="#Tile-and-Object-Declaration">5.11 Tile and Object Declaration</a>
39012
<li><a name="toc-Tile-concat-1" href="#Tile-concat">5.11.1 Tile concat</a></li>
39014
<li><a name="toc-Tiles-Repository-1" href="#Tiles-Repository">5.12 Tiles Repository</a>
39016
<li><a name="toc-Tiles-Storage-1" href="#Tiles-Storage">5.12.1 Tiles Storage</a></li>
39017
<li><a name="toc-Tiles-Request-1" href="#Tiles-Request">5.12.2 Tiles Request</a></li>
39018
<li><a name="toc-Tile-Conversion-1" href="#Tile-Conversion">5.12.3 Tile Conversion</a></li>
39020
<li><a name="toc-World-1" href="#World">5.13 World</a>
39022
<li><a name="toc-World-Creation-1" href="#World-Creation">5.13.1 World Creation</a></li>
39023
<li><a name="toc-World-Tile-Set-1" href="#World-Tile-Set">5.13.2 World Tile Set</a></li>
39024
<li><a name="toc-Global-Attribute-Set-1" href="#Global-Attribute-Set">5.13.3 Global Attribute Set</a></li>
39025
<li><a name="toc-Global-Attribute-Get-1" href="#Global-Attribute-Get">5.13.4 Global Attribute Get</a></li>
39026
<li><a name="toc-add-1" href="#add">5.13.5 add</a></li>
39027
<li><a name="toc-drawBorder-1" href="#drawBorder">5.13.6 drawBorder</a></li>
39028
<li><a name="toc-drawMap-1" href="#drawMap">5.13.7 drawMap</a></li>
39029
<li><a name="toc-drawRect-1" href="#drawRect">5.13.8 drawRect</a></li>
39030
<li><a name="toc-world-floor-1" href="#world-floor">5.13.9 world floor</a></li>
39031
<li><a name="toc-world-item-1" href="#world-item">5.13.10 world item</a></li>
39032
<li><a name="toc-shuffleOxyd-1" href="#shuffleOxyd">5.13.11 shuffleOxyd</a></li>
39033
<li><a name="toc-world-stone-1" href="#world-stone">5.13.12 world stone</a></li>
39035
<li><a name="toc-Functions-1" href="#Functions">5.14 Functions</a>
39037
<li><a name="toc-assert_005fbool-1" href="#assert_005fbool">5.14.1 assert_bool</a></li>
39038
<li><a name="toc-assert_005ftype-1" href="#assert_005ftype">5.14.2 assert_type</a></li>
39039
<li><a name="toc-cond-1" href="#cond">5.14.3 cond</a></li>
39040
<li><a name="toc-etype-1" href="#etype">5.14.4 etype</a></li>
39041
<li><a name="toc-fl-1" href="#fl">5.14.5 fl</a></li>
39042
<li><a name="toc-grp-1" href="#grp">5.14.6 grp</a></li>
39043
<li><a name="toc-it-1" href="#it">5.14.7 it</a></li>
39044
<li><a name="toc-ORI2DIR-1" href="#ORI2DIR">5.14.8 ORI2DIR</a></li>
39045
<li><a name="toc-random-1" href="#random">5.14.9 random</a></li>
39046
<li><a name="toc-st-1" href="#st">5.14.10 st</a></li>
39047
<li><a name="toc-usertype-1" href="#usertype">5.14.11 usertype</a></li>
39051
<li><a name="toc-Common-Attributes-and-Messages-1" href="#Common-Attributes-and-Messages">6. Common Attributes and Messages</a>
39053
<li><a name="toc-Common-Attributes-1" href="#Common-Attributes">6.1 Common Attributes</a>
39055
<li><a name="toc-name-1" href="#name">6.1.1 name</a></li>
39056
<li><a name="toc-state-1" href="#state">6.1.2 state</a></li>
39057
<li><a name="toc-target-1" href="#target">6.1.3 target</a></li>
39058
<li><a name="toc-action-1" href="#action">6.1.4 action</a></li>
39059
<li><a name="toc-nopaction-1" href="#nopaction">6.1.5 nopaction</a></li>
39060
<li><a name="toc-safeaction-1" href="#safeaction">6.1.6 safeaction</a></li>
39061
<li><a name="toc-inverse-1" href="#inverse">6.1.7 inverse</a></li>
39062
<li><a name="toc-destination-1" href="#destination">6.1.8 destination</a></li>
39063
<li><a name="toc-friction-1" href="#friction">6.1.9 friction</a></li>
39064
<li><a name="toc-adhesion-1" href="#adhesion">6.1.10 adhesion</a></li>
39065
<li><a name="toc-checkerboard-1" href="#checkerboard">6.1.11 checkerboard</a></li>
39066
<li><a name="toc-rubbers-1" href="#rubbers">6.1.12 rubbers</a></li>
39067
<li><a name="toc-wires-1" href="#wires">6.1.13 wires</a></li>
39068
<li><a name="toc-fellows-1" href="#fellows">6.1.14 fellows</a></li>
39070
<li><a name="toc-Common-Messages-1" href="#Common-Messages">6.2 Common Messages</a>
39072
<li><a name="toc-toggle-1" href="#toggle">6.2.1 toggle</a></li>
39073
<li><a name="toc-nop-1" href="#nop">6.2.2 nop</a></li>
39074
<li><a name="toc-signal-1" href="#signal">6.2.3 signal</a></li>
39075
<li><a name="toc-on-1" href="#on">6.2.4 on</a></li>
39076
<li><a name="toc-off-1" href="#off">6.2.5 off</a></li>
39077
<li><a name="toc-open-1" href="#open">6.2.6 open</a></li>
39078
<li><a name="toc-close-1" href="#close">6.2.7 close</a></li>
39079
<li><a name="toc-ignite-1" href="#ignite">6.2.8 ignite</a></li>
39080
<li><a name="toc-heat-1" href="#heat">6.2.9 heat</a></li>
39081
<li><a name="toc-setfire-1" href="#setfire">6.2.10 setfire</a></li>
39082
<li><a name="toc-kill-1" href="#kill">6.2.11 kill</a></li>
39083
<li><a name="toc-sound-1" href="#sound">6.2.12 sound</a></li>
39084
<li><a name="toc-disconnect-1" href="#disconnect">6.2.13 disconnect</a></li>
39086
<li><a name="toc-Common-Constants-1" href="#Common-Constants">6.3 Common Constants</a>
39088
<li><a name="toc-state-values-1" href="#state-values">6.3.1 state values</a></li>
39089
<li><a name="toc-color-values-1" href="#color-values">6.3.2 color values</a></li>
39090
<li><a name="toc-actor-controllers-1" href="#actor-controllers">6.3.3 actor controllers</a></li>
39091
<li><a name="toc-oxyd-colors-1" href="#oxyd-colors">6.3.4 oxyd colors</a></li>
39092
<li><a name="toc-orientations-1" href="#orientations">6.3.5 orientations</a></li>
39093
<li><a name="toc-direction-offsets-1" href="#direction-offsets">6.3.6 direction offsets</a></li>
39094
<li><a name="toc-position-lists-1" href="#position-lists">6.3.7 position lists</a></li>
39095
<li><a name="toc-essentialness-1" href="#essentialness">6.3.8 essentialness</a></li>
39096
<li><a name="toc-meditation-types-1" href="#meditation-types">6.3.9 meditation types</a></li>
39097
<li><a name="toc-glasses-abilities-1" href="#glasses-abilities">6.3.10 glasses abilities</a></li>
39098
<li><a name="toc-coinslot-acceptance-1" href="#coinslot-acceptance">6.3.11 coinslot acceptance</a></li>
39099
<li><a name="toc-rubberband-length-1" href="#rubberband-length">6.3.12 rubberband length</a></li>
39100
<li><a name="toc-subsoil-kind-1" href="#subsoil-kind">6.3.13 subsoil kind</a></li>
39101
<li><a name="toc-screen-scrolling-1" href="#screen-scrolling">6.3.14 screen scrolling</a></li>
39102
<li><a name="toc-map-read-directions-1" href="#map-read-directions">6.3.15 map read directions</a></li>
39104
<li><a name="toc-Global-Attributes-1" href="#Global-Attributes">6.4 Global Attributes</a>
39106
<li><a name="toc-ActorimpulseStrength-1" href="#ActorimpulseStrength">6.4.1 ActorimpulseStrength</a></li>
39107
<li><a name="toc-AllowSingleOxyds-1" href="#AllowSingleOxyds">6.4.2 AllowSingleOxyds</a></li>
39108
<li><a name="toc-AllowSuicide-1" href="#AllowSuicide">6.4.3 AllowSuicide</a></li>
39109
<li><a name="toc-AutoRespawn-1" href="#AutoRespawn">6.4.4 AutoRespawn</a></li>
39110
<li><a name="toc-ConserveLevel-1" href="#ConserveLevel">6.4.5 ConserveLevel</a></li>
39111
<li><a name="toc-CrackSpreading-1" href="#CrackSpreading">6.4.6 CrackSpreading</a></li>
39112
<li><a name="toc-CreatingPreview-1" href="#CreatingPreview">6.4.7 CreatingPreview</a></li>
39113
<li><a name="toc-ElectricStrength-1" href="#ElectricStrength">6.4.8 ElectricStrength</a></li>
39114
<li><a name="toc-ExtralifeGlasses-1" href="#ExtralifeGlasses">6.4.9 ExtralifeGlasses</a></li>
39115
<li><a name="toc-FallenPuzzle-1" href="#FallenPuzzle">6.4.10 FallenPuzzle</a></li>
39116
<li><a name="toc-FollowAction-1" href="#FollowAction">6.4.11 FollowAction</a></li>
39117
<li><a name="toc-FollowGrid-1" href="#FollowGrid">6.4.12 FollowGrid</a></li>
39118
<li><a name="toc-FollowMethod-1" href="#FollowMethod">6.4.13 FollowMethod</a></li>
39119
<li><a name="toc-FollowThreshold-1" href="#FollowThreshold">6.4.14 FollowThreshold</a></li>
39120
<li><a name="toc-Fragility-1" href="#Fragility">6.4.15 Fragility</a></li>
39121
<li><a name="toc-FrictionStrength-1" href="#FrictionStrength">6.4.16 FrictionStrength</a></li>
39122
<li><a name="toc-GlobalForce-1" href="#GlobalForce">6.4.17 GlobalForce</a></li>
39123
<li><a name="toc-Height-1" href="#Height">6.4.18 Height</a></li>
39124
<li><a name="toc-InfiniteReincarnation-1" href="#InfiniteReincarnation">6.4.19 InfiniteReincarnation</a></li>
39125
<li><a name="toc-IsDifficult-1" href="#IsDifficult">6.4.20 IsDifficult</a></li>
39126
<li><a name="toc-MagnetRange-1" href="#MagnetRange">6.4.21 MagnetRange</a></li>
39127
<li><a name="toc-MagnetStrength-1" href="#MagnetStrength">6.4.22 MagnetStrength</a></li>
39128
<li><a name="toc-MaxOxydColor-1" href="#MaxOxydColor">6.4.23 MaxOxydColor</a></li>
39129
<li><a name="toc-MeditationStrength-1" href="#MeditationStrength">6.4.24 MeditationStrength</a></li>
39130
<li><a name="toc-ProvideExtralifes-1" href="#ProvideExtralifes">6.4.25 ProvideExtralifes</a></li>
39131
<li><a name="toc-RubberViolationStrength-1" href="#RubberViolationStrength">6.4.26 RubberViolationStrength</a></li>
39132
<li><a name="toc-ShowMoves-1" href="#ShowMoves">6.4.27 ShowMoves</a></li>
39133
<li><a name="toc-SlopeStrength-1" href="#SlopeStrength">6.4.28 SlopeStrength</a></li>
39134
<li><a name="toc-SublevelNumber-1" href="#SublevelNumber">6.4.29 SublevelNumber</a></li>
39135
<li><a name="toc-SublevelTitle-1" href="#SublevelTitle">6.4.30 SublevelTitle</a></li>
39136
<li><a name="toc-SubSoil-1" href="#SubSoil">6.4.31 SubSoil</a></li>
39137
<li><a name="toc-SurviveFinish-1" href="#SurviveFinish">6.4.32 SurviveFinish</a></li>
39138
<li><a name="toc-SwampSinkTime-1" href="#SwampSinkTime">6.4.33 SwampSinkTime</a></li>
39139
<li><a name="toc-WaterSinkTime-1" href="#WaterSinkTime">6.4.34 WaterSinkTime</a></li>
39140
<li><a name="toc-Width-1" href="#Width">6.4.35 Width</a></li>
39141
<li><a name="toc-WormholeRange-1" href="#WormholeRange">6.4.36 WormholeRange</a></li>
39142
<li><a name="toc-WormholeStrength-1" href="#WormholeStrength">6.4.37 WormholeStrength</a></li>
39146
<li><a name="toc-Floor-Objects-1" href="#Floor-Objects">7. Floor Objects</a>
39148
<li><a name="toc-Floor-Overview-1" href="#Floor-Overview">7.1 Floor Overview</a></li>
39149
<li><a name="toc-Floor-Attributes-1" href="#Floor-Attributes">7.2 Floor Attributes</a>
39151
<li><a name="toc-adhesion-_0028floor_0029-1" href="#adhesion-_0028floor_0029">7.2.1 adhesion (floor)</a></li>
39152
<li><a name="toc-burnable-1" href="#burnable">7.2.2 burnable</a></li>
39153
<li><a name="toc-eternal-1" href="#eternal">7.2.3 eternal</a></li>
39154
<li><a name="toc-faces-_0028floor_0029-1" href="#faces-_0028floor_0029">7.2.4 faces (floor)</a></li>
39155
<li><a name="toc-fastfire-1" href="#fastfire">7.2.5 fastfire</a></li>
39156
<li><a name="toc-floodable-1" href="#floodable">7.2.6 floodable</a></li>
39157
<li><a name="toc-force_005fx-1" href="#force_005fx">7.2.7 force_x</a></li>
39158
<li><a name="toc-force_005fy-1" href="#force_005fy">7.2.8 force_y</a></li>
39159
<li><a name="toc-fragility-_0028floor_0029-1" href="#fragility-_0028floor_0029">7.2.9 fragility (floor)</a></li>
39160
<li><a name="toc-freeze_005fcheck-_0028floor_0029-1" href="#freeze_005fcheck-_0028floor_0029">7.2.10 freeze_check (floor)</a></li>
39161
<li><a name="toc-friction-_0028floor_0029-1" href="#friction-_0028floor_0029">7.2.11 friction (floor)</a></li>
39162
<li><a name="toc-ignitable-1" href="#ignitable">7.2.12 ignitable</a></li>
39163
<li><a name="toc-indestructible-1" href="#indestructible">7.2.13 indestructible</a></li>
39164
<li><a name="toc-initfire-1" href="#initfire">7.2.14 initfire</a></li>
39165
<li><a name="toc-noash-1" href="#noash">7.2.15 noash</a></li>
39166
<li><a name="toc-push_005fdirections-1" href="#push_005fdirections">7.2.16 push_directions</a></li>
39167
<li><a name="toc-secure-1" href="#secure">7.2.17 secure</a></li>
39168
<li><a name="toc-texture-1" href="#texture">7.2.18 texture</a></li>
39170
<li><a name="toc-Standard-Floors-1" href="#Standard-Floors">7.3 Standard Floors</a>
39172
<li><a name="toc-fl_005fadhesionless-1" href="#fl_005fadhesionless">7.3.1 fl_adhesionless</a></li>
39173
<li><a name="toc-fl_005faquamarine-1" href="#fl_005faquamarine">7.3.2 fl_aquamarine</a></li>
39174
<li><a name="toc-fl_005fbast-1" href="#fl_005fbast">7.3.3 fl_bast</a></li>
39175
<li><a name="toc-fl_005fbluegray-1" href="#fl_005fbluegray">7.3.4 fl_bluegray</a></li>
39176
<li><a name="toc-fl_005fbluegreen-1" href="#fl_005fbluegreen">7.3.5 fl_bluegreen</a></li>
39177
<li><a name="toc-fl_005fblueslab-1" href="#fl_005fblueslab">7.3.6 fl_blueslab</a></li>
39178
<li><a name="toc-fl_005fbrick-1" href="#fl_005fbrick">7.3.7 fl_brick</a></li>
39179
<li><a name="toc-fl_005fbright-1" href="#fl_005fbright">7.3.8 fl_bright</a></li>
39180
<li><a name="toc-fl_005fconcrete-1" href="#fl_005fconcrete">7.3.9 fl_concrete</a></li>
39181
<li><a name="toc-fl_005fdark-1" href="#fl_005fdark">7.3.10 fl_dark</a></li>
39182
<li><a name="toc-fl_005fdarkgray-1" href="#fl_005fdarkgray">7.3.11 fl_darkgray</a></li>
39183
<li><a name="toc-fl_005fdunes-1" href="#fl_005fdunes">7.3.12 fl_dunes</a></li>
39184
<li><a name="toc-fl_005fgravel-1" href="#fl_005fgravel">7.3.13 fl_gravel</a></li>
39185
<li><a name="toc-fl_005fgray-1" href="#fl_005fgray">7.3.14 fl_gray</a></li>
39186
<li><a name="toc-fl_005fhimalaya-1" href="#fl_005fhimalaya">7.3.15 fl_himalaya</a></li>
39187
<li><a name="toc-fl_005fivory-1" href="#fl_005fivory">7.3.16 fl_ivory</a></li>
39188
<li><a name="toc-fl_005flawn-1" href="#fl_005flawn">7.3.17 fl_lawn</a></li>
39189
<li><a name="toc-fl_005fmarble-1" href="#fl_005fmarble">7.3.18 fl_marble</a></li>
39190
<li><a name="toc-fl_005fmetal-1" href="#fl_005fmetal">7.3.19 fl_metal</a></li>
39191
<li><a name="toc-fl_005fmortar-1" href="#fl_005fmortar">7.3.20 fl_mortar</a></li>
39192
<li><a name="toc-fl_005fpinkbumps-1" href="#fl_005fpinkbumps">7.3.21 fl_pinkbumps</a></li>
39193
<li><a name="toc-fl_005fplank-1" href="#fl_005fplank">7.3.22 fl_plank</a></li>
39194
<li><a name="toc-fl_005fplatinum-1" href="#fl_005fplatinum">7.3.23 fl_platinum</a></li>
39195
<li><a name="toc-fl_005fred-1" href="#fl_005fred">7.3.24 fl_red</a></li>
39196
<li><a name="toc-fl_005fredslab-1" href="#fl_005fredslab">7.3.25 fl_redslab</a></li>
39197
<li><a name="toc-fl_005frough-1" href="#fl_005frough">7.3.26 fl_rough</a></li>
39198
<li><a name="toc-fl_005fsahara-1" href="#fl_005fsahara">7.3.27 fl_sahara</a></li>
39199
<li><a name="toc-fl_005fsamba-1" href="#fl_005fsamba">7.3.28 fl_samba</a></li>
39200
<li><a name="toc-fl_005fsand-1" href="#fl_005fsand">7.3.29 fl_sand</a></li>
39201
<li><a name="toc-fl_005fspace-1" href="#fl_005fspace">7.3.30 fl_space</a></li>
39202
<li><a name="toc-fl_005fstone-1" href="#fl_005fstone">7.3.31 fl_stone</a></li>
39203
<li><a name="toc-fl_005ftigris-1" href="#fl_005ftigris">7.3.32 fl_tigris</a></li>
39204
<li><a name="toc-fl_005fwhite-1" href="#fl_005fwhite">7.3.33 fl_white</a></li>
39205
<li><a name="toc-fl_005fwoven-1" href="#fl_005fwoven">7.3.34 fl_woven</a></li>
39207
<li><a name="toc-Special-Floors-1" href="#Special-Floors">7.4 Special Floors</a>
39209
<li><a name="toc-fl_005fabyss-1" href="#fl_005fabyss">7.4.1 fl_abyss</a></li>
39210
<li><a name="toc-fl_005fbridge-1" href="#fl_005fbridge">7.4.2 fl_bridge</a></li>
39211
<li><a name="toc-fl_005ffake-1" href="#fl_005ffake">7.4.3 fl_fake</a></li>
39212
<li><a name="toc-fl_005fhay-1" href="#fl_005fhay">7.4.4 fl_hay</a></li>
39213
<li><a name="toc-fl_005fice-1" href="#fl_005fice">7.4.5 fl_ice</a></li>
39214
<li><a name="toc-fl_005finverse-1" href="#fl_005finverse">7.4.6 fl_inverse</a></li>
39215
<li><a name="toc-fl_005frock-1" href="#fl_005frock">7.4.7 fl_rock</a></li>
39216
<li><a name="toc-fl_005fscales-1" href="#fl_005fscales">7.4.8 fl_scales</a></li>
39217
<li><a name="toc-fl_005fslope-1" href="#fl_005fslope">7.4.9 fl_slope</a></li>
39218
<li><a name="toc-fl_005fswamp-1" href="#fl_005fswamp">7.4.10 fl_swamp</a></li>
39219
<li><a name="toc-fl_005fthief-1" href="#fl_005fthief">7.4.11 fl_thief</a></li>
39220
<li><a name="toc-fl_005fwater-1" href="#fl_005fwater">7.4.12 fl_water</a></li>
39221
<li><a name="toc-fl_005fwood-1" href="#fl_005fwood">7.4.13 fl_wood</a></li>
39222
<li><a name="toc-fl_005fyinyang-1" href="#fl_005fyinyang">7.4.14 fl_yinyang</a></li>
39226
<li><a name="toc-Item-Objects-1" href="#Item-Objects">8. Item Objects</a>
39228
<li><a name="toc-Item-Overview-1" href="#Item-Overview">8.1 Item Overview</a></li>
39229
<li><a name="toc-Item-Attributes-1" href="#Item-Attributes">8.2 Item Attributes</a>
39231
<li><a name="toc-fireproof-1" href="#fireproof">8.2.1 fireproof</a></li>
39232
<li><a name="toc-freezable-1" href="#freezable">8.2.2 freezable</a></li>
39233
<li><a name="toc-liftable-1" href="#liftable">8.2.3 liftable</a></li>
39234
<li><a name="toc-portable-1" href="#portable">8.2.4 portable</a></li>
39236
<li><a name="toc-Liftable-Items-1" href="#Liftable-Items">8.3 Liftable Items</a>
39238
<li><a name="toc-it_005fbag-1" href="#it_005fbag">8.3.1 it_bag</a></li>
39239
<li><a name="toc-it_005fbanana-1" href="#it_005fbanana">8.3.2 it_banana</a></li>
39240
<li><a name="toc-it_005fbottle-1" href="#it_005fbottle">8.3.3 it_bottle</a></li>
39241
<li><a name="toc-it_005fbrake-1" href="#it_005fbrake">8.3.4 it_brake</a></li>
39242
<li><a name="toc-it_005fbrush-1" href="#it_005fbrush">8.3.5 it_brush</a></li>
39243
<li><a name="toc-it_005fcherry-1" href="#it_005fcherry">8.3.6 it_cherry</a></li>
39244
<li><a name="toc-it_005fcoffee-1" href="#it_005fcoffee">8.3.7 it_coffee</a></li>
39245
<li><a name="toc-it_005fcoin-1" href="#it_005fcoin">8.3.8 it_coin</a></li>
39246
<li><a name="toc-it_005fdocument-1" href="#it_005fdocument">8.3.9 it_document</a></li>
39247
<li><a name="toc-it_005fdrop-1" href="#it_005fdrop">8.3.10 it_drop</a></li>
39248
<li><a name="toc-it_005fdynamite-1" href="#it_005fdynamite">8.3.11 it_dynamite</a></li>
39249
<li><a name="toc-it_005fextinguisher-1" href="#it_005fextinguisher">8.3.12 it_extinguisher</a></li>
39250
<li><a name="toc-it_005fextralife-1" href="#it_005fextralife">8.3.13 it_extralife</a></li>
39251
<li><a name="toc-it_005fflag-1" href="#it_005fflag">8.3.14 it_flag</a></li>
39252
<li><a name="toc-it_005ffloppy-1" href="#it_005ffloppy">8.3.15 it_floppy</a></li>
39253
<li><a name="toc-it_005fglasses-1" href="#it_005fglasses">8.3.16 it_glasses</a></li>
39254
<li><a name="toc-it_005fhammer-1" href="#it_005fhammer">8.3.17 it_hammer</a></li>
39255
<li><a name="toc-it_005fkey-1" href="#it_005fkey">8.3.18 it_key</a></li>
39256
<li><a name="toc-it_005fmagicwand-1" href="#it_005fmagicwand">8.3.19 it_magicwand</a></li>
39257
<li><a name="toc-it_005fpencil-1" href="#it_005fpencil">8.3.20 it_pencil</a></li>
39258
<li><a name="toc-it_005fpin-1" href="#it_005fpin">8.3.21 it_pin</a></li>
39259
<li><a name="toc-it_005fpipe-1" href="#it_005fpipe">8.3.22 it_pipe</a></li>
39260
<li><a name="toc-it_005fpuller-1" href="#it_005fpuller">8.3.23 it_puller</a></li>
39261
<li><a name="toc-it_005fring-1" href="#it_005fring">8.3.24 it_ring</a></li>
39262
<li><a name="toc-it_005frubberband-1" href="#it_005frubberband">8.3.25 it_rubberband</a></li>
39263
<li><a name="toc-it_005fseed-1" href="#it_005fseed">8.3.26 it_seed</a></li>
39264
<li><a name="toc-it_005fspade-1" href="#it_005fspade">8.3.27 it_spade</a></li>
39265
<li><a name="toc-it_005fspoon-1" href="#it_005fspoon">8.3.28 it_spoon</a></li>
39266
<li><a name="toc-it_005fspring-1" href="#it_005fspring">8.3.29 it_spring</a></li>
39267
<li><a name="toc-it_005fsurprise-1" href="#it_005fsurprise">8.3.30 it_surprise</a></li>
39268
<li><a name="toc-it_005fsword-1" href="#it_005fsword">8.3.31 it_sword</a></li>
39269
<li><a name="toc-it_005fumbrella-1" href="#it_005fumbrella">8.3.32 it_umbrella</a></li>
39270
<li><a name="toc-it_005fweight-1" href="#it_005fweight">8.3.33 it_weight</a></li>
39271
<li><a name="toc-it_005fwrench-1" href="#it_005fwrench">8.3.34 it_wrench</a></li>
39272
<li><a name="toc-it_005fyinyang-1" href="#it_005fyinyang">8.3.35 it_yinyang</a></li>
39274
<li><a name="toc-Static-Items-1" href="#Static-Items">8.4 Static Items</a>
39276
<li><a name="toc-it_005fblocker-1" href="#it_005fblocker">8.4.1 it_blocker</a></li>
39277
<li><a name="toc-it_005fbomb-1" href="#it_005fbomb">8.4.2 it_bomb</a></li>
39278
<li><a name="toc-it_005fburnable-1" href="#it_005fburnable">8.4.3 it_burnable</a></li>
39279
<li><a name="toc-it_005fcrack-1" href="#it_005fcrack">8.4.4 it_crack</a></li>
39280
<li><a name="toc-it_005fcross-1" href="#it_005fcross">8.4.5 it_cross</a></li>
39281
<li><a name="toc-it_005fdeath-1" href="#it_005fdeath">8.4.6 it_death</a></li>
39282
<li><a name="toc-it_005fexplosion-1" href="#it_005fexplosion">8.4.7 it_explosion</a></li>
39283
<li><a name="toc-it_005flandmine-1" href="#it_005flandmine">8.4.8 it_landmine</a></li>
39284
<li><a name="toc-it_005flaserbeam-1" href="#it_005flaserbeam">8.4.9 it_laserbeam</a></li>
39285
<li><a name="toc-it_005fmagnet-1" href="#it_005fmagnet">8.4.10 it_magnet</a></li>
39286
<li><a name="toc-it_005fmeditation-1" href="#it_005fmeditation">8.4.11 it_meditation</a></li>
39287
<li><a name="toc-it_005fsensor-1" href="#it_005fsensor">8.4.12 it_sensor</a></li>
39288
<li><a name="toc-it_005fshogun-1" href="#it_005fshogun">8.4.13 it_shogun</a></li>
39289
<li><a name="toc-it_005fspringboard-1" href="#it_005fspringboard">8.4.14 it_springboard</a></li>
39290
<li><a name="toc-it_005fsquashed-1" href="#it_005fsquashed">8.4.15 it_squashed</a></li>
39291
<li><a name="toc-it_005fstrip-1" href="#it_005fstrip">8.4.16 it_strip</a></li>
39292
<li><a name="toc-it_005ftrap-1" href="#it_005ftrap">8.4.17 it_trap</a></li>
39293
<li><a name="toc-it_005ftrigger-1" href="#it_005ftrigger">8.4.18 it_trigger</a></li>
39294
<li><a name="toc-it_005fvortex-1" href="#it_005fvortex">8.4.19 it_vortex</a></li>
39295
<li><a name="toc-it_005fwormhole-1" href="#it_005fwormhole">8.4.20 it_wormhole</a></li>
39299
<li><a name="toc-Stone-Objects-1" href="#Stone-Objects">9. Stone Objects</a>
39301
<li><a name="toc-Stone-Overview-1" href="#Stone-Overview">9.1 Stone Overview</a></li>
39302
<li><a name="toc-Stone-Attributes-1" href="#Stone-Attributes">9.2 Stone Attributes</a>
39304
<li><a name="toc-breakable-1" href="#breakable">9.2.1 breakable</a></li>
39305
<li><a name="toc-freeze_005fcheck-_0028stone_0029-1" href="#freeze_005fcheck-_0028stone_0029">9.2.2 freeze_check (stone)</a></li>
39306
<li><a name="toc-hit_005f_002a-1" href="#hit_005f_002a">9.2.3 hit_*</a></li>
39307
<li><a name="toc-hollow-1" href="#hollow">9.2.4 hollow</a></li>
39308
<li><a name="toc-hovering-1" href="#hovering">9.2.5 hovering</a></li>
39309
<li><a name="toc-movable-1" href="#movable">9.2.6 movable</a></li>
39310
<li><a name="toc-transparent-1" href="#transparent">9.2.7 transparent</a></li>
39312
<li><a name="toc-Standard-Stones-1" href="#Standard-Stones">9.3 Standard Stones</a>
39314
<li><a name="toc-st_005fancient-1" href="#st_005fancient">9.3.1 st_ancient</a></li>
39315
<li><a name="toc-st_005fbluegray-1" href="#st_005fbluegray">9.3.2 st_bluegray</a></li>
39316
<li><a name="toc-st_005fbrownie-1" href="#st_005fbrownie">9.3.3 st_brownie</a></li>
39317
<li><a name="toc-st_005fbrownmarble-1" href="#st_005fbrownmarble">9.3.4 st_brownmarble</a></li>
39318
<li><a name="toc-st_005fcamouflage-1" href="#st_005fcamouflage">9.3.5 st_camouflage</a></li>
39319
<li><a name="toc-st_005fconcrete-1" href="#st_005fconcrete">9.3.6 st_concrete</a></li>
39320
<li><a name="toc-st_005fdarkgray-1" href="#st_005fdarkgray">9.3.7 st_darkgray</a></li>
39321
<li><a name="toc-st_005fgranite-1" href="#st_005fgranite">9.3.8 st_granite</a></li>
39322
<li><a name="toc-st_005fgreengray-1" href="#st_005fgreengray">9.3.9 st_greengray</a></li>
39323
<li><a name="toc-st_005finvisible-1" href="#st_005finvisible">9.3.10 st_invisible</a></li>
39324
<li><a name="toc-st_005fmetal-1" href="#st_005fmetal">9.3.11 st_metal</a></li>
39325
<li><a name="toc-st_005fpinkbumps-1" href="#st_005fpinkbumps">9.3.12 st_pinkbumps</a></li>
39326
<li><a name="toc-st_005fpurplegray-1" href="#st_005fpurplegray">9.3.13 st_purplegray</a></li>
39327
<li><a name="toc-st_005fpurplemarble-1" href="#st_005fpurplemarble">9.3.14 st_purplemarble</a></li>
39328
<li><a name="toc-st_005fredbrown-1" href="#st_005fredbrown">9.3.15 st_redbrown</a></li>
39329
<li><a name="toc-st_005fredmarble-1" href="#st_005fredmarble">9.3.16 st_redmarble</a></li>
39330
<li><a name="toc-st_005fredrock-1" href="#st_005fredrock">9.3.17 st_redrock</a></li>
39331
<li><a name="toc-st_005ftigris-1" href="#st_005ftigris">9.3.18 st_tigris</a></li>
39332
<li><a name="toc-st_005fwoven-1" href="#st_005fwoven">9.3.19 st_woven</a></li>
39333
<li><a name="toc-st_005fyellow-1" href="#st_005fyellow">9.3.20 st_yellow</a></li>
39335
<li><a name="toc-Cluster-Stones-1" href="#Cluster-Stones">9.4 Cluster Stones</a>
39337
<li><a name="toc-Cluster-Features-1" href="#Cluster-Features">9.4.1 Cluster Features</a></li>
39338
<li><a name="toc-st_005fbluesand-1" href="#st_005fbluesand">9.4.2 st_bluesand</a></li>
39339
<li><a name="toc-st_005fbrick-1" href="#st_005fbrick">9.4.3 st_brick</a></li>
39340
<li><a name="toc-st_005fpanel-1" href="#st_005fpanel">9.4.4 st_panel</a></li>
39342
<li><a name="toc-Special-Stones-1" href="#Special-Stones">9.5 Special Stones</a>
39344
<li><a name="toc-st_005factorimpulse-1" href="#st_005factorimpulse">9.5.1 st_actorimpulse</a></li>
39345
<li><a name="toc-st_005fbarrier-1" href="#st_005fbarrier">9.5.2 st_barrier</a></li>
39346
<li><a name="toc-st_005fbeads-1" href="#st_005fbeads">9.5.3 st_beads</a></li>
39347
<li><a name="toc-st_005fblocker-1" href="#st_005fblocker">9.5.4 st_blocker</a></li>
39348
<li><a name="toc-st_005fblur-1" href="#st_005fblur">9.5.5 st_blur</a></li>
39349
<li><a name="toc-st_005fboulder-1" href="#st_005fboulder">9.5.6 st_boulder</a></li>
39350
<li><a name="toc-st_005fbox-1" href="#st_005fbox">9.5.7 st_box</a></li>
39351
<li><a name="toc-st_005fbrake-1" href="#st_005fbrake">9.5.8 st_brake</a></li>
39352
<li><a name="toc-st_005fbreak-1" href="#st_005fbreak">9.5.9 st_break</a></li>
39353
<li><a name="toc-st_005fbrownpyramid-1" href="#st_005fbrownpyramid">9.5.10 st_brownpyramid</a></li>
39354
<li><a name="toc-st_005fchameleon-1" href="#st_005fchameleon">9.5.11 st_chameleon</a></li>
39355
<li><a name="toc-st_005fcharge-1" href="#st_005fcharge">9.5.12 st_charge</a></li>
39356
<li><a name="toc-st_005fchess-1" href="#st_005fchess">9.5.13 st_chess</a></li>
39357
<li><a name="toc-st_005fcoinslot-1" href="#st_005fcoinslot">9.5.14 st_coinslot</a></li>
39358
<li><a name="toc-st_005fdarkglass-1" href="#st_005fdarkglass">9.5.15 st_darkglass</a></li>
39359
<li><a name="toc-st_005fdeath-1" href="#st_005fdeath">9.5.16 st_death</a></li>
39360
<li><a name="toc-st_005fdisco-1" href="#st_005fdisco">9.5.17 st_disco</a></li>
39361
<li><a name="toc-st_005fdispenser-1" href="#st_005fdispenser">9.5.18 st_dispenser</a></li>
39362
<li><a name="toc-st_005fdoor-1" href="#st_005fdoor">9.5.19 st_door</a></li>
39363
<li><a name="toc-st_005ffake-1" href="#st_005ffake">9.5.20 st_fake</a></li>
39364
<li><a name="toc-st_005fflash-1" href="#st_005fflash">9.5.21 st_flash</a></li>
39365
<li><a name="toc-st_005fflat-1" href="#st_005fflat">9.5.22 st_flat</a></li>
39366
<li><a name="toc-st_005ffloppy-1" href="#st_005ffloppy">9.5.23 st_floppy</a></li>
39367
<li><a name="toc-st_005ffourswitch-1" href="#st_005ffourswitch">9.5.24 st_fourswitch</a></li>
39368
<li><a name="toc-st_005fghost-1" href="#st_005fghost">9.5.25 st_ghost</a></li>
39369
<li><a name="toc-st_005fgrate-1" href="#st_005fgrate">9.5.26 st_grate</a></li>
39370
<li><a name="toc-st_005fgreenbrown-1" href="#st_005fgreenbrown">9.5.27 st_greenbrown</a></li>
39371
<li><a name="toc-st_005fice-1" href="#st_005fice">9.5.28 st_ice</a></li>
39372
<li><a name="toc-st_005fjamb-1" href="#st_005fjamb">9.5.29 st_jamb</a></li>
39373
<li><a name="toc-st_005fkey-1" href="#st_005fkey">9.5.30 st_key</a></li>
39374
<li><a name="toc-st_005fknight-1" href="#st_005fknight">9.5.31 st_knight</a></li>
39375
<li><a name="toc-st_005flaser-1" href="#st_005flaser">9.5.32 st_laser</a></li>
39376
<li><a name="toc-st_005flaserflop-1" href="#st_005flaserflop">9.5.33 st_laserflop</a></li>
39377
<li><a name="toc-st_005flaserswitch-1" href="#st_005flaserswitch">9.5.34 st_laserswitch</a></li>
39378
<li><a name="toc-st_005flightglass-1" href="#st_005flightglass">9.5.35 st_lightglass</a></li>
39379
<li><a name="toc-st_005flightpassenger-1" href="#st_005flightpassenger">9.5.36 st_lightpassenger</a></li>
39380
<li><a name="toc-st_005fmagic-1" href="#st_005fmagic">9.5.37 st_magic</a></li>
39381
<li><a name="toc-st_005fmail-1" href="#st_005fmail">9.5.38 st_mail</a></li>
39382
<li><a name="toc-st_005fmirror-1" href="#st_005fmirror">9.5.39 st_mirror</a></li>
39383
<li><a name="toc-st_005fmonoflop-1" href="#st_005fmonoflop">9.5.40 st_monoflop</a></li>
39384
<li><a name="toc-st_005foneway-1" href="#st_005foneway">9.5.41 st_oneway</a></li>
39385
<li><a name="toc-st_005foxyd-1" href="#st_005foxyd">9.5.42 st_oxyd</a></li>
39386
<li><a name="toc-st_005fpassage-1" href="#st_005fpassage">9.5.43 st_passage</a></li>
39387
<li><a name="toc-st_005fplaster-1" href="#st_005fplaster">9.5.44 st_plaster</a></li>
39388
<li><a name="toc-st_005fplop-1" href="#st_005fplop">9.5.45 st_plop</a></li>
39389
<li><a name="toc-st_005fpolarswitch-1" href="#st_005fpolarswitch">9.5.46 st_polarswitch</a></li>
39390
<li><a name="toc-st_005fportal-1" href="#st_005fportal">9.5.47 st_portal</a></li>
39391
<li><a name="toc-st_005fpull-1" href="#st_005fpull">9.5.48 st_pull</a></li>
39392
<li><a name="toc-st_005fpuzzle-1" href="#st_005fpuzzle">9.5.49 st_puzzle</a></li>
39393
<li><a name="toc-st_005fquake-1" href="#st_005fquake">9.5.50 st_quake</a></li>
39394
<li><a name="toc-st_005frawglass-1" href="#st_005frawglass">9.5.51 st_rawglass</a></li>
39395
<li><a name="toc-st_005fredfiber-1" href="#st_005fredfiber">9.5.52 st_redfiber</a></li>
39396
<li><a name="toc-st_005frotator-1" href="#st_005frotator">9.5.53 st_rotator</a></li>
39397
<li><a name="toc-st_005frubberband-1" href="#st_005frubberband">9.5.54 st_rubberband</a></li>
39398
<li><a name="toc-st_005fscissors-1" href="#st_005fscissors">9.5.55 st_scissors</a></li>
39399
<li><a name="toc-st_005fshogun-1" href="#st_005fshogun">9.5.56 st_shogun</a></li>
39400
<li><a name="toc-st_005fspitter-1" href="#st_005fspitter">9.5.57 st_spitter</a></li>
39401
<li><a name="toc-st_005fstoneimpulse-1" href="#st_005fstoneimpulse">9.5.58 st_stoneimpulse</a></li>
39402
<li><a name="toc-st_005fsurprise-1" href="#st_005fsurprise">9.5.59 st_surprise</a></li>
39403
<li><a name="toc-st_005fswap-1" href="#st_005fswap">9.5.60 st_swap</a></li>
39404
<li><a name="toc-st_005fswitch-1" href="#st_005fswitch">9.5.61 st_switch</a></li>
39405
<li><a name="toc-st_005fthief-1" href="#st_005fthief">9.5.62 st_thief</a></li>
39406
<li><a name="toc-st_005ftimer-1" href="#st_005ftimer">9.5.63 st_timer</a></li>
39407
<li><a name="toc-st_005fturnstile-1" href="#st_005fturnstile">9.5.64 st_turnstile</a></li>
39408
<li><a name="toc-st_005fturnstilearm-1" href="#st_005fturnstilearm">9.5.65 st_turnstilearm</a></li>
39409
<li><a name="toc-st_005fvolcano-1" href="#st_005fvolcano">9.5.66 st_volcano</a></li>
39410
<li><a name="toc-st_005fwindow-1" href="#st_005fwindow">9.5.67 st_window</a></li>
39411
<li><a name="toc-st_005fyinyang-1" href="#st_005fyinyang">9.5.68 st_yinyang</a></li>
39413
<li><a name="toc-Stone-Feature-Summaries-1" href="#Stone-Feature-Summaries">9.6 Stone Feature Summaries</a>
39415
<li><a name="toc-Transparent-Stones-1" href="#Transparent-Stones">9.6.1 Transparent Stones</a></li>
39416
<li><a name="toc-Breakable-Stones-1" href="#Breakable-Stones">9.6.2 Breakable Stones</a></li>
39420
<li><a name="toc-Actor-Objects-1" href="#Actor-Objects">10. Actor Objects</a>
39422
<li><a name="toc-Actor-Attributes-1" href="#Actor-Attributes">10.1 Actor Attributes</a>
39424
<li><a name="toc-adhesion-_0028actor_0029-1" href="#adhesion-_0028actor_0029">10.1.1 adhesion (actor)</a></li>
39425
<li><a name="toc-charge-1" href="#charge">10.1.2 charge</a></li>
39426
<li><a name="toc-controllers-1" href="#controllers">10.1.3 controllers</a></li>
39427
<li><a name="toc-color-1" href="#color">10.1.4 color</a></li>
39428
<li><a name="toc-essential-1" href="#essential">10.1.5 essential</a></li>
39429
<li><a name="toc-essential_005fid-1" href="#essential_005fid">10.1.6 essential_id</a></li>
39430
<li><a name="toc-owner-1" href="#owner">10.1.7 owner</a></li>
39431
<li><a name="toc-velocity_005fx-1" href="#velocity_005fx">10.1.8 velocity_x</a></li>
39432
<li><a name="toc-velocity_005fy-1" href="#velocity_005fy">10.1.9 velocity_y</a></li>
39434
<li><a name="toc-Actors-1" href="#Actors">10.2 Actors</a>
39436
<li><a name="toc-ac_005fbug-1" href="#ac_005fbug">10.2.1 ac_bug</a></li>
39437
<li><a name="toc-ac_005fhorse-1" href="#ac_005fhorse">10.2.2 ac_horse</a></li>
39438
<li><a name="toc-ac_005fkiller-1" href="#ac_005fkiller">10.2.3 ac_killer</a></li>
39439
<li><a name="toc-ac_005fmarble-1" href="#ac_005fmarble">10.2.4 ac_marble</a></li>
39440
<li><a name="toc-ac_005fpearl-1" href="#ac_005fpearl">10.2.5 ac_pearl</a></li>
39441
<li><a name="toc-ac_005frotor-1" href="#ac_005frotor">10.2.6 ac_rotor</a></li>
39442
<li><a name="toc-ac_005ftop-1" href="#ac_005ftop">10.2.7 ac_top</a></li>
39444
<li><a name="toc-Actor-Features-1" href="#Actor-Features">10.3 Actor Features</a>
39446
<li><a name="toc-Flying-Actors-1" href="#Flying-Actors">10.3.1 Flying Actors</a></li>
39450
<li><a name="toc-Other-Objects-1" href="#Other-Objects">11. Other Objects</a>
39452
<li><a name="toc-Visible-Others-1" href="#Visible-Others">11.1 Visible Others</a>
39454
<li><a name="toc-ot_005fcannonball-1" href="#ot_005fcannonball">11.1.1 ot_cannonball</a></li>
39455
<li><a name="toc-ot_005frubberband-1" href="#ot_005frubberband">11.1.2 ot_rubberband</a></li>
39456
<li><a name="toc-ot_005fwire-1" href="#ot_005fwire">11.1.3 ot_wire</a></li>
39458
<li><a name="toc-Gadgets-1" href="#Gadgets">11.2 Gadgets</a>
39460
<li><a name="toc-ot_005fcounter-1" href="#ot_005fcounter">11.2.1 ot_counter</a></li>
39461
<li><a name="toc-ot_005ftimer-1" href="#ot_005ftimer">11.2.2 ot_timer</a></li>
39465
<li><a name="toc-Libraries-1" href="#Libraries">12. Libraries</a>
39467
<li><a name="toc-Basic-Functions-1" href="#Basic-Functions">12.1 Basic Functions</a></li>
39468
<li><a name="toc-liblua-1" href="#liblua">12.2 liblua</a>
39470
<li><a name="toc-lib_002elua_002ecombine_005ftables-1" href="#lib_002elua_002ecombine_005ftables">12.2.1 lib.lua.combine_tables</a></li>
39471
<li><a name="toc-lib_002elua_002edeep_005fcopy-1" href="#lib_002elua_002edeep_005fcopy">12.2.2 lib.lua.deep_copy</a></li>
39472
<li><a name="toc-lib_002elua_002emod-1" href="#lib_002elua_002emod">12.2.3 lib.lua.mod</a></li>
39473
<li><a name="toc-lib_002elua_002eprint_005ftable-1" href="#lib_002elua_002eprint_005ftable">12.2.4 lib.lua.print_table</a></li>
39474
<li><a name="toc-lib_002elua_002eshuffle-1" href="#lib_002elua_002eshuffle">12.2.5 lib.lua.shuffle</a></li>
39475
<li><a name="toc-lib_002elua_002eto_005fstring-1" href="#lib_002elua_002eto_005fstring">12.2.6 lib.lua.to_string</a></li>
39477
<li><a name="toc-libmath-1" href="#libmath">12.3 libmath</a>
39479
<li><a name="toc-lib_002emath_002ecombinations-1" href="#lib_002emath_002ecombinations">12.3.1 lib.math.combinations</a></li>
39480
<li><a name="toc-lib_002emath_002ecubic_005fpolynomial-1" href="#lib_002emath_002ecubic_005fpolynomial">12.3.2 lib.math.cubic_polynomial</a></li>
39481
<li><a name="toc-lib_002emath_002ecyclic_005fpermutation-1" href="#lib_002emath_002ecyclic_005fpermutation">12.3.3 lib.math.cyclic_permutation</a></li>
39482
<li><a name="toc-lib_002emath_002edigits-1" href="#lib_002emath_002edigits">12.3.4 lib.math.digits</a></li>
39483
<li><a name="toc-lib_002emath_002emanhattan_005fdistance-1" href="#lib_002emath_002emanhattan_005fdistance">12.3.5 lib.math.manhattan_distance</a></li>
39484
<li><a name="toc-lib_002emath_002emark_005fcomponents-1" href="#lib_002emath_002emark_005fcomponents">12.3.6 lib.math.mark_components</a></li>
39485
<li><a name="toc-lib_002emath_002epermutation-1" href="#lib_002emath_002epermutation">12.3.7 lib.math.permutation</a></li>
39486
<li><a name="toc-lib_002emath_002erandom_005fvector-1" href="#lib_002emath_002erandom_005fvector">12.3.8 lib.math.random_vector</a></li>
39487
<li><a name="toc-lib_002emath_002esteps-1" href="#lib_002emath_002esteps">12.3.9 lib.math.steps</a></li>
39489
<li><a name="toc-libmap-1" href="#libmap">12.4 libmap</a>
39491
<li><a name="toc-Creating-Maps-1" href="#Creating-Maps">12.4.1 Creating Maps</a></li>
39492
<li><a name="toc-Drawing-Maps-1" href="#Drawing-Maps">12.4.2 Drawing Maps</a></li>
39493
<li><a name="toc-Rotating-and-Mirroring-Maps-1" href="#Rotating-and-Mirroring-Maps">12.4.3 Rotating and Mirroring Maps</a></li>
39494
<li><a name="toc-Requesting-and-Changing-Single-Map-Entries-1" href="#Requesting-and-Changing-Single-Map-Entries">12.4.4 Requesting and Changing Single Map Entries</a></li>
39495
<li><a name="toc-Connecting-Two-Maps-1" href="#Connecting-Two-Maps">12.4.5 Connecting Two Maps</a></li>
39496
<li><a name="toc-Other-Map-Tasks-1" href="#Other-Map-Tasks">12.4.6 Other Map Tasks</a></li>
39497
<li><a name="toc-newMap-1" href="#newMap">12.4.7 newMap</a></li>
39498
<li><a name="toc-Map-Entry-Request-1" href="#Map-Entry-Request">12.4.8 Map Entry Request</a></li>
39499
<li><a name="toc-Map-Transformation-1" href="#Map-Transformation">12.4.9 Map Transformation</a></li>
39500
<li><a name="toc-Map-Horizontal-Concatenation-1" href="#Map-Horizontal-Concatenation">12.4.10 Map Horizontal Concatenation</a></li>
39501
<li><a name="toc-Map-Vertical-Concatenation-1" href="#Map-Vertical-Concatenation">12.4.11 Map Vertical Concatenation</a></li>
39502
<li><a name="toc-Map-Fusing-1" href="#Map-Fusing">12.4.12 Map Fusing</a></li>
39503
<li><a name="toc-Map-Default-Keys-1" href="#Map-Default-Keys">12.4.13 Map Default Keys</a></li>
39504
<li><a name="toc-Map-Width-and-Height-1" href="#Map-Width-and-Height">12.4.14 Map Width and Height</a></li>
39505
<li><a name="toc-lib_002emap_002ecovers-1" href="#lib_002emap_002ecovers">12.4.15 lib.map.covers</a></li>
39506
<li><a name="toc-lib_002emap_002edefuse-1" href="#lib_002emap_002edefuse">12.4.16 lib.map.defuse</a></li>
39507
<li><a name="toc-lib_002emap_002eextend-1" href="#lib_002emap_002eextend">12.4.17 lib.map.extend</a></li>
39508
<li><a name="toc-lib_002emap_002ematch-1" href="#lib_002emap_002ematch">12.4.18 lib.map.match</a></li>
39509
<li><a name="toc-lib_002emap_002epaste-1" href="#lib_002emap_002epaste">12.4.19 lib.map.paste</a></li>
39510
<li><a name="toc-lib_002emap_002eprint-1" href="#lib_002emap_002eprint">12.4.20 lib.map.print</a></li>
39511
<li><a name="toc-lib_002emap_002ereplace-1" href="#lib_002emap_002ereplace">12.4.21 lib.map.replace</a></li>
39512
<li><a name="toc-lib_002emap_002ereplace_005foutside-1" href="#lib_002emap_002ereplace_005foutside">12.4.22 lib.map.replace_outside</a></li>
39513
<li><a name="toc-lib_002emap_002esub-1" href="#lib_002emap_002esub">12.4.23 lib.map.sub</a></li>
39514
<li><a name="toc-lib_002emap_002etrim-1" href="#lib_002emap_002etrim">12.4.24 lib.map.trim</a></li>
39515
<li><a name="toc-Map-Transformation-Index-and-MAP_005fALL-1" href="#Map-Transformation-Index-and-MAP_005fALL">12.4.25 Map Transformation Index and MAP_ALL</a></li>
39516
<li><a name="toc-Map-Transformation-Composition-and-Powers-1" href="#Map-Transformation-Composition-and-Powers">12.4.26 Map Transformation Composition and Powers</a></li>
39517
<li><a name="toc-Map-Transformation-Inverse-1" href="#Map-Transformation-Inverse">12.4.27 Map Transformation Inverse</a></li>
39518
<li><a name="toc-Random-Map-Transformations-1" href="#Random-Map-Transformations">12.4.28 Random Map Transformations</a></li>
39520
<li><a name="toc-libimport-1" href="#libimport">12.5 libimport</a>
39522
<li><a name="toc-lib_002eimport_002eunpack_005fmultilevel-1" href="#lib_002eimport_002eunpack_005fmultilevel">12.5.1 lib.import.unpack_multilevel</a></li>
39523
<li><a name="toc-lib_002eimport_002euncompress_005frle-1" href="#lib_002eimport_002euncompress_005frle">12.5.2 lib.import.uncompress_rle</a></li>
39524
<li><a name="toc-lib_002eimport_002elevel_005fto_005fmap-1" href="#lib_002eimport_002elevel_005fto_005fmap">12.5.3 lib.import.level_to_map</a></li>
39525
<li><a name="toc-lib_002eimport_002emap_005fsokoban-1" href="#lib_002eimport_002emap_005fsokoban">12.5.4 lib.import.map_sokoban</a></li>
39526
<li><a name="toc-lib_002eimport_002emap_005fwanderer-1" href="#lib_002eimport_002emap_005fwanderer">12.5.5 lib.import.map_wanderer</a></li>
39528
<li><a name="toc-libsoko-1" href="#libsoko">12.6 libsoko</a></li>
39530
<li><a name="toc-Advanced-Features-1" href="#Advanced-Features">13. Advanced Features</a>
39532
<li><a name="toc-Resolvers-1" href="#Resolvers">13.1 Resolvers</a>
39534
<li><a name="toc-Resolver-Chaining-1" href="#Resolver-Chaining">13.1.1 Resolver Chaining</a></li>
39535
<li><a name="toc-Custom-Resolver-1" href="#Custom-Resolver">13.1.2 Custom Resolver</a></li>
39536
<li><a name="toc-res_002eautotile-1" href="#res_002eautotile">13.1.3 res.autotile</a></li>
39537
<li><a name="toc-res_002ecomposer-1" href="#res_002ecomposer">13.1.4 res.composer</a></li>
39538
<li><a name="toc-res_002emaze-1" href="#res_002emaze">13.1.5 res.maze</a></li>
39539
<li><a name="toc-res_002epuzzle-1" href="#res_002epuzzle">13.1.6 res.puzzle</a></li>
39540
<li><a name="toc-res_002erandom-1" href="#res_002erandom">13.1.7 res.random</a></li>
39541
<li><a name="toc-res_002etrain-1" href="#res_002etrain">13.1.8 res.train</a></li>
39543
<li><a name="toc-General-Features-1" href="#General-Features">13.2 General Features</a>
39545
<li><a name="toc-Display-Follow-Strategy-1" href="#Display-Follow-Strategy">13.2.1 Display Follow Strategy</a></li>
39546
<li><a name="toc-Flood-Spreading-1" href="#Flood-Spreading">13.2.2 Flood Spreading</a></li>
39547
<li><a name="toc-Fire-Spreading-1" href="#Fire-Spreading">13.2.3 Fire Spreading</a></li>
39548
<li><a name="toc-Heat_002dTransformation-1" href="#Heat_002dTransformation">13.2.4 Heat-Transformation</a></li>
39549
<li><a name="toc-Freeze-Checking-1" href="#Freeze-Checking">13.2.5 Freeze Checking</a></li>
39551
<li><a name="toc-Tips-and-Tricks-1" href="#Tips-and-Tricks">13.3 Tips and Tricks</a>
39553
<li><a name="toc-Nearest-Object-Clustering-1" href="#Nearest-Object-Clustering">13.3.1 Nearest Object Clustering</a></li>
39554
<li><a name="toc-Orthogonal-Autotiling-1" href="#Orthogonal-Autotiling">13.3.2 Orthogonal Autotiling</a></li>
39558
<li><a name="toc-Extension-Development-1" href="#Extension-Development">14. Extension Development</a>
39560
<li><a name="toc-Resolver-Development-1" href="#Resolver-Development">14.1 Resolver Development</a>
39562
<li><a name="toc-Resolver-Configurator-1" href="#Resolver-Configurator">14.1.1 Resolver Configurator</a></li>
39563
<li><a name="toc-Resolver-Implementation-1" href="#Resolver-Implementation">14.1.2 Resolver Implementation</a></li>
39564
<li><a name="toc-Resolver-Finalizer-1" href="#Resolver-Finalizer">14.1.3 Resolver Finalizer</a></li>
39568
<li><a name="toc-Guidelines-and-Hints-1" href="#Guidelines-and-Hints">15. Guidelines and Hints</a>
39570
<li><a name="toc-Filename-Recommendation-1" href="#Filename-Recommendation">15.1 Filename Recommendation</a></li>
39571
<li><a name="toc-Title-Recommendation-1" href="#Title-Recommendation">15.2 Title Recommendation</a></li>
39572
<li><a name="toc-Tile-Key-Recommendation-1" href="#Tile-Key-Recommendation">15.3 Tile Key Recommendation</a></li>
39573
<li><a name="toc-Easy-Mode-Hints-1" href="#Easy-Mode-Hints">15.4 Easy Mode Hints</a></li>
39575
<li><a name="toc-Compatibility-1" href="#Compatibility">16. Compatibility</a>
39577
<li><a name="toc-Engine-Compatibility-1" href="#Engine-Compatibility">16.1 Engine Compatibility</a></li>
39579
<li><a name="toc-Object-Index-1" href="#Object-Index">Object Index</a></li>
39580
<li><a name="toc-Attribute-Index-1" href="#Attribute-Index">Attribute Index</a></li>
39581
<li><a name="toc-Message-Index-1" href="#Message-Index">Message Index</a></li>
39582
<li><a name="toc-Function-Index-1" href="#Function-Index">Function Index</a></li>
39583
<li><a name="toc-Concept-Index-1" href="#Concept-Index">Concept Index</a></li>
39584
<li><a name="toc-Renaming-Index-1" href="#Renaming-Index">Renaming Index</a></li>
39588
<a name="SEC_About"></a>
39589
<table cellpadding="1" cellspacing="1" border="0">
39590
<tr><td valign="middle" align="left">[<a href="#Top" title="Cover (top) of document">Top</a>]</td>
39591
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
39592
<td valign="middle" align="left">[<a href="#Object-Index" title="Index">Index</a>]</td>
39593
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
39595
<h1>About This Document</h1>
39597
This document was generated by <em>Andreas Lochmann</em> on <em>April 1, 2013</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.
39600
The buttons in the navigation panels have the following meaning:
39607
<th> From 1.2.3 go to</th>
39610
<td align="center"> [ < ] </td>
39611
<td align="center">Back</td>
39612
<td>Previous section in reading order</td>
39616
<td align="center"> [ > ] </td>
39617
<td align="center">Forward</td>
39618
<td>Next section in reading order</td>
39622
<td align="center"> [ << ] </td>
39623
<td align="center">FastBack</td>
39624
<td>Beginning of this chapter or previous chapter</td>
39628
<td align="center"> [ Up ] </td>
39629
<td align="center">Up</td>
39630
<td>Up section</td>
39634
<td align="center"> [ >> ] </td>
39635
<td align="center">FastForward</td>
39636
<td>Next chapter</td>
39640
<td align="center"> [Top] </td>
39641
<td align="center">Top</td>
39642
<td>Cover (top) of document</td>
39646
<td align="center"> [Contents] </td>
39647
<td align="center">Contents</td>
39648
<td>Table of contents</td>
39652
<td align="center"> [Index] </td>
39653
<td align="center">Index</td>
39658
<td align="center"> [ ? ] </td>
39659
<td align="center">About</td>
39660
<td>About (help)</td>
39666
where the <strong> Example </strong> assumes that the current position is at <strong> Subsubsection One-Two-Three </strong> of a document of the following structure:
39670
<li> 1. Section One
39672
<li>1.1 Subsection One-One
39677
<li>1.2 Subsection One-Two
39679
<li>1.2.1 Subsubsection One-Two-One</li>
39680
<li>1.2.2 Subsubsection One-Two-Two</li>
39681
<li>1.2.3 Subsubsection One-Two-Three
39682
<strong><== Current Position </strong></li>
39683
<li>1.2.4 Subsubsection One-Two-Four</li>
39686
<li>1.3 Subsection One-Three
39691
<li>1.4 Subsection One-Four</li>
39699
This document was generated by <em>Andreas Lochmann</em> on <em>April 1, 2013</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.