# Copyright (C) 2010 Amf
#
# Regression tests for XOR
#
# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
# % (9)                 % (7)  %%%                        
# %HHHHHH%              % F$  |VC%                        
# %HHHHHH%              % FT$  %%%                        
# %HHHHHH%              % -$C  %%%                        
# %HHHHHH%  F (8)       % $T$  %%%                        
# %HHHHHH%  $%          % %$  |VC%                        
# %HHHHHH% %E$C         % %% %%%%%                        
# %HHHHHH% %%        (6)     F   %                        
# %HHHHHH%         F  H  H   F   %                        
# %HHHHHH% F  F   %$V $C $V  $   %                        
# %HHHHHH%%C %$C      %     F F  %                        
# %HHHHHH% (1)    %F%F      %H%C %                        
# %HHHHHH%   F    %C%%C     %%%% %                        
# %HHHHHH%FC $C   %C%V $CC  FFFC %                        
# %HHHHHH%%  %    %C%%C (3) %%%% %                        
# %HHHHHH%                       %                        
# %HHHHHH%  MMMM  %F FFF      F  %                        
# %HHHHHH%    (2) %F -H-$CC   F  %                        
# %HHHHHH%-H$CC % %$ %%% (4)  $  %
# %HHHHHH%%%%%% % %V   F  %FC%|C %                        
# %HHHHHH%C     %F%- FFC  %C %VC %                        
# %HHHHHH%%%%%% %%%% %%%  %C %|C %                        
# %HHHHHH%                       %                        
# %HHHHHH%  %F  %FF      F  FFF  %                        
# %HHHHHH%  %$  %V-$C    $  -H-$C%                        
# %HHHHHH% C%|C %%%%% %C%|C %%%  %                        
# %HHHHHH%  %HC % F   %C%VC FFF  %                        
# %HHHHHH%%%%%% %%%%% %C%|C %%%  %
# %HHHHHH     (5)         (5)    %                        
# %HHHHHH$C                      %
# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#
# Key:
#     F Fish       H H-Bomb     - Dots       $ Mask         T Teleport
#     C Chicken    V V-Bomb     | Waves      M Map          % Wall
#
# XOR has some subtleties that are easily overlooked. In particular:
#
# (1) Precedence depends on which way the player leaves the space.
#         (approximate engine ok; exact engine ok)
#
# (2) When a stream of pieces hits a bomb, only the first should be destroyed.
#         (approximate engine ok; exact engine ok)
#
# (3) Precendence after an explosion depends on the bomb that produced it.
#         (approximate engine ok; exact engine ok)
#
# (4) Spaces vacated by explosions are added to the end of the move stack.
#         (approximate engine fails; exact engine ok)
#
# (5) When a fish detonates an H-bomb, a chicken may erroneously be left
#     hanging in mid-air. The other combinations of detonation are as expected.
#         (approximate engine fails; exact engine ok)
#
#     This omission does not seem to affect any of the original levels.
#
# (6) If a space in the move stack has a bomb and a detonator that can both
#     fall into it, the bomb will be detonated, contrary to expectations. If
#     two bombs are involved, the bomb that moves first detonates; this
#     depends on how the space was vacated. 
#         (approximate engine fails; exact engine ok)
#
#     This phenomenon may be seen at the start of "Patience Pending", and
#     may be exploited to good effect near its end.
#
# (7) When considering how to exit a teleport, the spaces around it are
#     considered in the following order: right, up, left, down. If the only
#     exit from a teleport is the square the player is currently on, no move
#     is made. If the player attempts to enter a teleport when its companion
#     has been destroyed, the teleport is converted into a wall.
#         (approximate engine fails to convert the teleport to a wall, but is
#          otherwise fine; exact engine ok)
#
# (8) It is sufficient for a player to enter the door to finish the level -
#     evolution of the level stops at that point, even if the player would
#     otherwise be killed.
#         (approximate engine marks the level as solved, but continues to
#          evolve it; exact engine ok)
#
# (9) It is possible to overflow the move stack if it contains more than 127
#     entries, causing it to behave unpredictably. A wraparound effect occurs
#     when there are 256 entries, causing all motion to cease.
#          (neither engine attempts to handle such a pathological case!)

chroma level

mode: xor

title: XOR regression tests
size: 32 32
view1: 7 15
view2: 9 15
viewteleport1: 22 0 (25 3)
viewteleport2: 22 0 (25 5)

data:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                     %      %%%
%DDDDDD%              % d*  |Aa%
%DDDDDD%              % dT*  %%%
%DDDDDD%              % -*a  %%%
%DDDDDD%  d           % *T*  %%%
%DDDDDD%  *%          % %*  |Aa%
%DDDDDD% %/*a         % %% %%%%%
%DDDDDD% %%                d   %
%DDDDDD%         d  D  D   d   %
%DDDDDD% d  d   %*A *a *A  *   %
%DDDDDD%%a %*a      %     d d  %
%DDDDDD%        %d%d      %D%a %
%DDDDDD%   d    %a%%a     %%%% %
%DDDDDD%da *a   %a%A *aa  ddda %
%DDDDDD%%  %    %a%%a     %%%% %
%DDDDDD%                       %
%DDDDDD% 1MmNn2 %d ddd      d  %
%DDDDDD%        %d -D-*aa   d  %
%DDDDDD%-D*aa % %* %%%      *  %
%DDDDDD%%%%%% % %A   d  %da%|a %
%DDDDDD%a     %d%- dda  %a %Aa %
%DDDDDD%%%%%% %%%% %%%  %a %|a %
%DDDDDD%                       %
%DDDDDD%  %d  %dd      d  ddd  %
%DDDDDD%  %*  %A-*a    *  -D-*a%
%DDDDDD% a%|a %%%%% %a%|a %%%  %
%DDDDDD%  %Da % d   %a%Aa ddd  %
%DDDDDD%%%%%% %%%%% %a%|a %%%  %
%DDDDDD                        %
%DDDDDD*a                      %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

