~ubuntu-branches/ubuntu/trusty/enigma/trusty-proposed

« back to all changes in this revision

Viewing changes to doc/reference/enigma-ref.texi

  • Committer: Package Import Robot
  • Author(s): Erich Schubert
  • Date: 2013-04-06 14:54:02 UTC
  • mfrom: (1.1.10)
  • Revision ID: package-import@ubuntu.com-20130406145402-jgjrtk7hac8gtvza
Tags: 1.20-dfsg.1-1
* New upstream release (Closes: #704595)
  (Repacked: dropped zipios++ source and main menu music)
* Update watch file, sf.net again.
* Fix documentation links (Closes: #653508)
* Conflict with enigma-level-previews to encourage deinstallation
  (Pregenerated level previews were only used with version 1.01)
* Use dh7 for building instead of CDBS
* Update to policy 3.9.4.0 (no changes)
* Register documentation with doc-base

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
\input texinfo                              @c -*- texinfo -*-
2
 
@set VERSION 1.10
 
2
@set VERSION 1.20
3
3
@setfilename enigma-ref.info
4
4
@settitle Enigma Reference Manual
5
5
@documentencoding US-ASCII
134
134
A backup of this directory is mandatory!
135
135
 
136
136
The standard location is the directory @samp{.enigma} in your @env{HOME}
137
 
directory. For @env{HOME}-less Windows users, it is the folder 
138
 
@samp{%APPDATA%\Enigma}, what resolves to the subfolder 
 
137
directory. For @env{HOME}-less Windows users, it is the folder
 
138
@samp{%APPDATA%\Enigma}, what resolves to the subfolder
139
139
@samp{Application Data\Enigma} on XP/2000 or @samp{AppData\Roaming\Enigma} on
140
140
Vista/Windows 7 located within your user data folder.
141
141
 
263
263
a menu button.
264
264
 
265
265
@item @b{-@w{}-robinson}
266
 
Disable all connections to the internet. No automatic updates will take place 
 
266
Disable all connections to the internet. No automatic updates will take place
267
267
and all user initiated requests that would require an internet connection will
268
268
fail with an error message.
269
269
 
338
338
@section Inventory Console
339
339
 
340
340
The lower right window area that usually shows the inventory items and scrolls
341
 
the texts of activated document items allows the user to reread previous 
 
341
the texts of activated document items allows the user to reread previous
342
342
document texts, to enter textual commands and to reissue previous commands.
343
343
 
344
344
You can issue a command by usage of the keyboard. Just enter the command string
364
364
the level's title, author's name or the file name.
365
365
@item @b{god}
366
366
Developer cheat that protects the actors assigned to the current player like
367
 
the activation of an @ref{it_umbrella} does. Once used no score will be 
 
367
the activation of an @ref{it_umbrella} does. Once used no score will be
368
368
recorded if the level is successfully finished.
369
369
@item @b{hunt}
370
370
Switch to world record hunting mode. Same as toggling the left most button
387
387
@end table
388
388
 
389
389
Both, the commands and the displayed document text have a history. You recall
390
 
the history by usage of the up and down arrows. 
 
390
the history by usage of the up and down arrows.
391
391
 
392
392
@itemize @bullet
393
393
@item @b{inventory} --> jump to start
408
408
 
409
409
Starting with the inventory item display the up arrow shows the previously
410
410
submitted commands. Just by another @key{return} you can reissue a command.
411
 
The history will be resorted with the last command at the position direktly 
412
 
above the inventory. You can edit history commands anytime like you can insert 
 
411
The history will be resorted with the last command at the position direktly
 
412
above the inventory. You can edit history commands anytime like you can insert
413
413
a new command. If you do not finish a command by a @key{return} the string will
414
414
still be recorded and presented as the first command above the inventory. The
415
415
command history is persistent.
416
416
 
417
 
The document history can be recalled by usage of the down arrow. All level 
 
417
The document history can be recalled by usage of the down arrow. All level
418
418
documents previously displayed can be redisplayed. Additionally the initial
419
419
level info displayed on the level start can be read again.
420
420
 
3900
3900
is a level successfully finished. How do I declare a level as being a
3901
3901
meditation level in opposite to a standard oxyd pair opening level.
3902
3902
 
3903
 
In fact there is no 'meditation' flag, neither within the XML Level 
 
3903
In fact there is no 'meditation' flag, neither within the XML Level
3904
3904
@ref{Info metadata} nor as one of the @ref{Global Attributes}. That means there
3905
3905
is no formal distinction between both level 'types'. But there are two different
3906
3906
types of ending conditions. Both are checked permanently and whichever
3910
3910
 
3911
3911
The main way to end the game is to fulfill the oxyd pair opening condition:
3912
3912
 
3913
 
The game is over when the user succeeds in opening all regular colored 
 
3913
The game is over when the user succeeds in opening all regular colored
3914
3914
@ref{st_oxyd}s by pairs.
3915
3915
 
3916
3916
This implies that there is at least one pair of regular colored oxyd stones
3917
3917
and that all oxyd colors appear in even number of instances. Whereas you will
3918
3918
always add at least one pair of oxyds for a standard level, you may simply loose
3919
3919
track of the number of instances. Therefore the engine will permanently check at
3920
 
runtime that every oxyd color appears in an even number of instances. Any 
 
3920
runtime that every oxyd color appears in an even number of instances. Any
3921
3921
violation causes an error. In case you will add or delete oxyd stones you
3922
 
need to disable this checking by setting the global attribute 
 
3922
need to disable this checking by setting the global attribute
3923
3923
@ref{AllowSingleOxyds} to @code{true}. Now it is your reponsibility as an
3924
3924
author to ensure that the level remains solvable by adding or removing pairs
3925
 
only. 
 
3925
only.
3926
3926
 
3927
3927
The second way to end the game is to fulfill the meditation condition:
3928
3928
 
3944
3944
@ref{ac_pearl} to a level that should be solved by fulfillment of the oxyd pair
3945
3945
condition. But you must carefully check that the user can not rest the pearls in
3946
3946
given @ref{it_meditation} or can create @ref{it_meditation} by @ref{it_dynamite}.
3947
 
Marking more @ref{it_meditation} as @code{essential} than existing 
 
3947
Marking more @ref{it_meditation} as @code{essential} than existing
3948
3948
@ref{ac_pearl}s can avoid shortcuts.
3949
3949
 
3950
3950
A level that is set up to allow the user to fulfill both conditions is called
3952
3952
for both approaches.
3953
3953
 
3954
3954
Independent of the condition type all actors marked as @code{essential} need to
3955
 
be alive at the moment the condition is fulfilled. Mainly in existing legacy 
 
3955
be alive at the moment the condition is fulfilled. Mainly in existing legacy
3956
3956
levels but may in some very carefully designed future levels the author may
3957
 
allow the user to sacrify an actor to fulfill the condition by setting the 
 
3957
allow the user to sacrify an actor to fulfill the condition by setting the
3958
3958
global attribute @ref{SurviveFinish} to @code{false}. In this case a mable
3959
3959
may shatter while the condition is fulfilled. Of course the essential actor
3960
3960
may not shatter in advance, because as soon as the shattering is over the
4701
4701
if -@var{obj} then ...
4702
4702
@end example
4703
4703
Object references may get invalid due to objects being killed. In most cases
4704
 
this creates no problem as requests to invalid objects will simply be ignored. 
 
4704
this creates no problem as requests to invalid objects will simply be ignored.
4705
4705
But if the level logic depends on the existence of an object you can call the
4706
4706
@samp{exists()} method or simply precede the reference by the unary minus
4707
4707
@samp{-} operator. Both ways return a simple bool value stating if the object
6731
6731
they are the containers of choice for longterm storage.
6732
6732
 
6733
6733
You can easily create a position list by @ref{PositionList Conversion}, which
6734
 
is featured by the @ref{Positions Repository} singleton and allows you to 
6735
 
transform a group into a position list by the simple expression 
6736
 
@samp{po(group)}. On the other hand you can retrieve all @ref{Object}s of a 
6737
 
basic kind located along a position list path by @ref{Functions} like 
 
6734
is featured by the @ref{Positions Repository} singleton and allows you to
 
6735
transform a group into a position list by the simple expression
 
6736
@samp{po(group)}. On the other hand you can retrieve all @ref{Object}s of a
 
6737
basic kind located along a position list path by @ref{Functions} like
6738
6738
@samp{st(polist)}, @samp{it(polist)} and @samp{fl(polist)}.
6739
6739
 
6740
6740
As a unique floor object is guaranteed to be on every grid position, you can
7580
7580
21            return @i{ti}[@var{key}]
7581
7581
22        end
7582
7582
23    end
7583
 
24    
 
7583
24
7584
7584
25    w, h = @i{wo}(@i{myresolver}, "@var{ }", @{
7585
7585
26      "                    ",
7586
7586
27      "  b         b       ",
9324
9324
@subsection AutoRespawn
9325
9325
 
9326
9326
A global variable that determines, if in absence of an @ref{it_flag} drop given
9327
 
respawn position, the last recorded secure actor position should be taken 
 
9327
respawn position, the last recorded secure actor position should be taken
9328
9328
instead of the starting position, in case the actor dies and is resurrected.
9329
9329
 
9330
9330
The recorded auto respawn position will be appropriate for common actor deaths
9331
 
like sinking in @ref{fl_water}, falling into @ref{fl_abyss}, hitting of 
9332
 
@ref{st_death}, slipping from an @ref{it_strip}, being hit by an 
 
9331
like sinking in @ref{fl_water}, falling into @ref{fl_abyss}, hitting of
 
9332
@ref{st_death}, slipping from an @ref{it_strip}, being hit by an
9333
9333
@ref{it_laserbeam}. Even a jump into one these lethal destinations resurrects
9334
9334
the actor onto the position from where the actor started its jump. There is no
9335
9335
danger of being resurrected on floors without @ref{adhesion (floor)}.
9339
9339
a flag is picked up. After a pickup of the flag, what delete the flag defined
9340
9340
position the AutoRespawn position gets active until a flag is dropped again.
9341
9341
 
9342
 
Deaths caused by actor collisions, @ref{it_crack} and floor shattering 
 
9342
Deaths caused by actor collisions, @ref{it_crack} and floor shattering
9343
9343
explosions can lead to leathal AutoRespawn positions. Either avoid setting
9344
9344
AutoRespawn to @code{true} in such cases or provide an @ref{it_flag} in such
9345
9345
cases.
9346
9346
 
9347
 
Shortcuts introduced by AutoRespawn are unlikely, but not generally impossible. 
 
9347
Shortcuts introduced by AutoRespawn are unlikely, but not generally impossible.
9348
9348
 
9349
9349
@table @asis
9350
9350
@item @b{Type:} @ @ bool
11435
11435
The scales floor is a trigger that reacts on the mass load of actors and items
11436
11436
atop or any stones that may press it. It performs actions when it is initially
11437
11437
pressed and again when it releases. A pressed trigger is in state @samp{ON} and
11438
 
will send an action value of @samp{true}, a released trigger is in state 
 
11438
will send an action value of @samp{true}, a released trigger is in state
11439
11439
@samp{OFF} and will send an action value of @samp{false}.
11440
11440
 
11441
11441
Only actors moving on the floor can press scales. An actor jumping over a
11452
11452
central puzzle stone (@pxref{st_puzzle}).
11453
11453
 
11454
11454
There is no way to set the state of a trigger manually. But the state can
11455
 
nevertheless be read. At initialization a scales floor that is pressed by 
 
11455
nevertheless be read. At initialization a scales floor that is pressed by
11456
11456
objects will start in state @samp{ON} without sending actions due to the
11457
11457
@ref{Snapshot Principle}.
11458
11458
 
11464
11464
a framed floor as a substitution for scales.
11465
11465
 
11466
11466
Alternative items that react just on actors are @ref{it_sensor} and
11467
 
@ref{it_cross}. 
 
11467
@ref{it_cross}.
11468
11468
 
11469
11469
@table @asis
11470
11470
@item @b{Attributes:}
11839
11839
@tab @image{images/it_drop, 12mm} @tab @yref{it_drop}
11840
11840
@item @image{images/it_dynamite, 12mm} @tab @yref{it_dynamite}
11841
11841
@tab @image{images/it_explosion, 12mm} @tab @yref{it_explosion}
11842
 
@tab @image{images/it_extralife, 12mm} @tab @yref{it_extralife}
11843
 
@item @image{images/it_extinguisher, 12mm} @tab @yref{it_extinguisher}
 
11842
@tab @image{images/it_extinguisher, 12mm} @tab @yref{it_extinguisher}
 
11843
@item @image{images/it_extralife, 12mm} @tab @yref{it_extralife}
11844
11844
@tab @image{images/it_flag_black, 12mm} @tab @yref{it_flag}_black
11845
11845
@tab @image{images/it_flag_white, 12mm} @tab @yref{it_flag}_white
11846
11846
@item @image{images/it_floppy, 12mm} @tab @yref{it_floppy}
12735
12735
key is part of the inventory. This helps the user to distinguish multiple keys
12736
12736
in the inventory and to assign them to the matching @ref{st_key}s.
12737
12737
 
12738
 
An @samp{invisible} key reveals its code when being inserted in a matching, 
 
12738
An @samp{invisible} key reveals its code when being inserted in a matching,
12739
12739
unveiled @ref{st_key}. The code remains visible, when the user withdraws the
12740
12740
key from the stone and adds it to his inventory.
12741
12741
 
13031
13031
@item @b{max} @ @ @i{values}: positive number or zero; @ @ @i{default}: @code{0.0}
13032
13032
The maximum length at which actors bounce.
13033
13033
@item @b{scissor} @ @ @i{values}: @code{true}, @code{false}; @ @ @i{default}: @code{false}
13034
 
Rubberband cutting behaviour on connection. On a value of @code{true} the 
 
13034
Rubberband cutting behaviour on connection. On a value of @code{true} the
13035
13035
activation of this rubberband will cut all existing rubberbands which are
13036
13036
currently connected to the activating actor.
13037
13037
@item @b{freezable}, @ @ @i{values}: @code{true}, @code{false}; @ @ @i{default}: @code{true}; @ @ @i{access}: @code{read only} @ @ @xref{freezable}
15496
15496
of the actor's inventory. Every @ref{it_bag} will be checked recursively, too,
15497
15497
ensuring that no instance of the searched item can pass the barrier.
15498
15498
 
15499
 
The @samp{flavor} attribute determines the blocked item kind. The string 
 
15499
The @samp{flavor} attribute determines the blocked item kind. The string
15500
15500
@code{"all"} blocks any item. Any string containing an @ref{Object Kind}
15501
15501
will block items of just the given kind. Of course you can use just kinds of
15502
 
@ref{portable} items. E.g. a @samp{flavor} of @code{"it_flag_white"} will just 
15503
 
block actors that carry a white @ref{it_flag}, while @code{"it_flag"} would 
 
15502
@ref{portable} items. E.g. a @samp{flavor} of @code{"it_flag_white"} will just
 
15503
block actors that carry a white @ref{it_flag}, while @code{"it_flag"} would
15504
15504
block actors carrying flags of any color. The blocked item kind is indicated on
15505
15505
top of the barrier stone.
15506
15506
 
15511
15511
barrier stones.
15512
15512
 
15513
15513
As barrier stones are usually bound to their initial position to fulfill their
15514
 
item blocking task, they are kept from being swapped of pulled by the 
 
15514
item blocking task, they are kept from being swapped of pulled by the
15515
15515
@samp{static} attribute's default of @code{true}.
15516
15516
 
15517
15517
@table @asis
16614
16614
Floppy stones are often used as openers for an adjacent @ref{st_door} that is
16615
16615
declared as its @samp{target}. But there is the inherent danger that an actor
16616
16616
passing the door accidentially hits the neighboring floppy stone, causing the floppy
16617
 
to be pulled out again and the door to be closed immediately. Of couse this 
 
16617
to be pulled out again and the door to be closed immediately. Of couse this
16618
16618
would shatter any @ref{ac_marble} or @ref{ac_pearl}. But a @samp{secure} floppy
16619
16619
stone checks that the hitting actor is not positioned on one of the floppy stones
16620
16620
target positions. It refuses any actions caused by such critical hits. Note
16621
16621
that in case the target is a callback function that closes the adjacent door,
16622
 
there will be still no protection. A floppy stone with @samp{secure} value 
 
16622
there will be still no protection. A floppy stone with @samp{secure} value
16623
16623
@samp{false} would accept any hits and shatter marbles as it has been standard
16624
16624
on older Enigma releases and is still in modes besides Enigma.
16625
16625
 
16992
16992
Key stones are often used as openers for an adjacent @ref{st_door} that is
16993
16993
declared as its @samp{target}. But there is the inherent danger that an actor
16994
16994
passing the door accidentially hits the neighboring key stone, causing the key
16995
 
to be pulled out again and the door to be closed immediately. Of couse this 
 
16995
to be pulled out again and the door to be closed immediately. Of couse this
16996
16996
would shatter any @ref{ac_marble} or @ref{ac_pearl}. But a @samp{secure} key
16997
16997
stone checks that the hitting actor is not positioned on one of the key stones
16998
16998
target positions. It refuses any actions caused by such critical hits. Note
16999
16999
that in case the target is a callback function that closes the adjacent door,
17000
 
there will be still no protection. A key stone with @samp{secure} value 
 
17000
there will be still no protection. A key stone with @samp{secure} value
17001
17001
@samp{false} would accept any hits and shatter marbles as it has been standard
17002
17002
on older Enigma releases and is still in modes besides Enigma.
17003
17003
 
18917
18917
Of course other objects can send messages on actions to make this switch turning.
18918
18918
 
18919
18919
Three variants of the switch do exist. A neutral, grey colored one that reacts
18920
 
on any actor hits, and a black and a white colored switch. These last two 
 
18920
on any actor hits, and a black and a white colored switch. These last two
18921
18921
switches will react only if hit by actors of matching color.
18922
18922
 
18923
18923
If a switch turns on or off there will be a short delay until it reaches the
19601
19601
@node color
19602
19602
@subsection color
19603
19603
 
19604
 
The logical color of the actor. All actors besides @ref{ac_marble}s, 
 
19604
The logical color of the actor. All actors besides @ref{ac_marble}s,
19605
19605
@ref{ac_pearl}s and @ref{ac_killer}s will report color @code{nil}. The color of
19606
19606
an actor can not be changed, it is a read only attribute.
19607
19607
 
19762
19762
By default a horse is a passive actor. But nevertheless a horse may move along
19763
19763
its own path. A set of attributes let you control the movement in various ways.
19764
19764
 
19765
 
The most simple approach just uses the attributes @samp{destination} and 
 
19765
The most simple approach just uses the attributes @samp{destination} and
19766
19766
@samp{strength}. You can mark a path marked by an arbitrary number of positions
19767
19767
given as @ref{destination}s. The horse will try to reach the destinations one
19768
 
in a row with a force given by the strength attribute. As soon as one 
 
19768
in a row with a force given by the strength attribute. As soon as one
19769
19769
destination has been reached the horse targets for the next position and will
19770
 
start over again as soon as the last position has been reached. In this 
 
19770
start over again as soon as the last position has been reached. In this
19771
19771
@samp{steady} mode the horse is continously accelerated into the direction of
19772
19772
the next destination target. If it misses the destination on the first approach
19773
19773
it will return by a loop again until it finally passes the target position. This
19774
19774
approach is rather crude and not well suited for a precise control needed if the
19775
19775
horse should hit certain stones or move on a well defined trajectory.
19776
19776
 
19777
 
Setting @samp{steady} to the value @code{false} causes another accelaration 
 
19777
Setting @samp{steady} to the value @code{false} causes another accelaration
19778
19778
algorithm that will decelerate the horse on approach to its target position.
19779
19779
This allows a very precise control over the path taken by the horse.
19780
19780
 
19781
19781
Furtheron you can request anytime the index of the current destination target. You
19782
19782
can even set @samp{destidx} anytime. Note that this index counts the destination
19783
19783
targets starting with 0 and taking every position into account, which might not
19784
 
be in sync with the destination token number in case a single token part 
 
19784
be in sync with the destination token number in case a single token part
19785
19785
addresses several positions at a time.
19786
19786
 
19787
19787
Furtheron you can control the behaviour of the horse when it reaches the last
19797
19797
horse to toggle @ref{st_switch} and other active stones.
19798
19798
 
19799
19799
Whenever the horse reaches a target position it will perform its action. You
19800
 
can reset the @samp{destination} and other attributes within the callback to 
 
19800
can reset the @samp{destination} and other attributes within the callback to
19801
19801
define a new destination target.
19802
19802
 
19803
19803
Note that you need to set @samp{controllers} as well as @samp{adhesion} to proper
21073
21073
 
21074
21074
@table @asis
21075
21075
@item @b{Syntax:}
21076
 
@b{lib.math.mark_components}(@i{group}, @i{attribute_name} [, @i{neighborhood} [, 
 
21076
@b{lib.math.mark_components}(@i{group}, @i{attribute_name} [, @i{neighborhood} [,
21077
21077
@i{exclusive_attribute}]])
21078
21078
 
21079
21079
@table @asis
23510
23510
will be taken.
23511
23511
 
23512
23512
Within this copy of the template all occurrences of the two characters @samp{%%}
23513
 
in explicit object declarations will be substituted by a single percent sign 
 
23513
in explicit object declarations will be substituted by a single percent sign
23514
23514
followed by the suffix of the used tile key. Thus a key of @samp{AD} will target
23515
 
the laser @samp{laser%D}. You need to use the key @samp{LD} in the map for the 
 
23515
the laser @samp{laser%D}. You need to use the key @samp{LD} in the map for the
23516
23516
matching laser.
23517
23517
 
23518
23518
Rangerules match any tile key in the given range. It can well be used in one
23543
23543
@end example
23544
23544
 
23545
23545
applied to a key with the suffix @samp{d} will result in a base tile key @samp{Pd}.
23546
 
This feature is especially useful if the autotile resolver is chained to 
 
23546
This feature is especially useful if the autotile resolver is chained to
23547
23547
another subresolver which generates the base tiles.
23548
23548
 
23549
23549
@item @b{Full Example:}
25137
25137
 
25138
25138
@itemize @bullet
25139
25139
@item Stones use capital letters, items small letters, floors use punctuation marks.
25140
 
@item The default floor is @code{" "}. The second most important floor typically is  
 
25140
@item The default floor is @code{" "}. The second most important floor typically is
25141
25141
@code{"_"} or @code{"."}. It's a good idea to use tile keys for floors, which are
25142
25142
small and don't obstruct the view on the more important objects, like
25143
25143
stones and items. Important floors (like bridges) may have letters or
25193
25193
@item For autotiling, it's a good idea to use @code{"X"}, @code{"Y"}, @code{"x"}, @code{"y"}, @code{"*"}, @code{"?"} and
25194
25194
similar characters which associate themselves with variables as template
25195
25195
keys. Another possibility is to use a full word like @code{"door"} or @code{"switch"}
25196
 
as template tile key, which has the advantage of being easier 
 
25196
as template tile key, which has the advantage of being easier
25197
25197
@end itemize
25198
25198
 
25199
25199
@node Easy Mode Hints
25958
25958
@item @b{st-3mirror} @expansion{} @code{st_mirror_triangle_s}, @pxref{st_mirror}
25959
25959
@end table
25960
25960
@bye
25961