Game Duenix for Amiga computers/Duenix.AMOS

From Wikiversity
Jump to navigation Jump to search
Set Buffer 20
Erase All 
Set Sprite Buffer 256
Trap Screen Close 0

VERSION$="$VER: Duenix 1.2 (17.10.98)"
YEAR$="1994-1998"
RELEASE$="Release 1.2"
MEMORY_REQUIREMENT=800000-170000

If Prg State=-1 : Break Off : PATH$=Dir$ : Else : If Exist("ram:editamos.lock") : Kill "ram:editamos.lock" : Edit : End If 
   PATH$="Work:Programming/Duenix/Dx/"
End If 

Dim _NOT(1)
Dim X#(6),Y#(6),SMER(6),NEW_X#(6),NEW_Y#(6),NEW_SMER(6),NEW_PLAYER(6),SCORE(6),SELECTED(6),SEMIALIVE(6),SPACE_COUNTER(6),LINE_COUNTER(6),SPEED(6),SPEED_PERCENT#(6),TURNING(6),LIVES(6),_TOP_LIVES(6),AUCH_COUNTER(6),AUCH_PROTECTION(6)
Dim _PLAYER_RECORD(5),_FREE_VALUE(6),LIVING_PLAYER(6),COMPUTER_STRATEGY(6),CYBORG(6),PLAN_BANK(2),_NEXT_SOUND_FX_CHANNEL(8),WRITE_KOI82IMAGE($),WRITE_KOI82HOOK($),ZOMBIE(6),LINE_LENGTH_(6),SPACE_LENGTH_(6),ALIVE(6)
Dim BOUND_THIS_ROUND(6),BOUND_COUNTER(6),REDRAW_PLAYER(6),ACCEPT_KEYSTROKE(6),_KEYSTROKE_COUNTER(6),SPEED_SOURCE#($F),WIND_FACTOR#(6),UPP($),SPP($),TEAM_MATE_THRU(6),TEAM_MATE(6),DEMOSTORE_PLAYSTATE(6),PL_RGB(6),_PLAYER_PROPRIETY(2,3)
Dim STAYED_ALIVE_BONUS(6),_PLAYER_TYPE(6),_PLAYER_TYPE_IMAGE(3),STANDARD_PLAN_PAL$(5),GS_GAME_NAME$(20,1),_PUTPIX_QUEUE_X(12-1),_PUTPIX_QUEUE_Y(12-1),_PUTPIX_QUEUE_COLOUR(12-1)

Dim NO_IMAGE(2),YES_IMAGE(2),RED_BOX_IMAGE(2),_BOB_PLAYER_IMAGE(1,1),_SPRITE_NUMBER(6),_SPRITE_IMAGE(6),_PLAYER_GREY_COLOUR(6),PL_DEF_COLOR(6),P_COLOR(6),PL_DEF_COLOR_LIGHT(6),PL_DEF_COLOR_DARK(6),OS_LC_BOX(14),OS_RC_BOX(14)
Dim OS_LEFT_COLUMN_TEXT$(14,1),OS_RIGHT_COLUMN_TEXT$(14,1),MAIN_OPTION_TEXT$(4),SELECTING_UPPER_TEXT$(5),SELECTING_LOWER_TEXT$(5),RR_COLUMN_TEXT$(2),CREATE_USER_GS_EXPLANATION$(13),_NOT_ALL_FILES$(2),GAMEPLAN_EXPLANATION$(2),GAMEPLAN_KEY_TEXT$(2)

MAIN

Procedure SET_CONSTANTS
   _TRUE=1 : _FALSE=0 : _NOT(_TRUE)=_FALSE : _NOT(_FALSE)=_TRUE : _T=1 : _F=0

   _ERROR_BADPATH=250
   
   EN$=Chr$($D)+Chr$($A)
   CZ_SEND$="Ahoj.\  Tato hra je Freeware. PŇesto, pokud se ti lÉbÉ,\pĹknĹ prosÉm, poÓli 10 KĂ na adresu:\"
   EN_SEND$="Hello.\  This game is Freeware, but  if you like the game,\pretty please, send twice the price of post stamp to:"
   EN_VALUE$="Note that even one dollar is a big piece of money \for me."
   
   RECORDNAME$="Duenix_GameRecord"
   CONFIG_LENGTH=$80
   
   DEMO_TIMER_LIMIT=50*18
   DEMO_PRESS_SPACE_LIMIT=50*3
   'Pul minuty
   
   V=26-1
   Inc V : PRECOUNTED_SIN__BANK=V
   Inc V : PRECOUNTED_ATAN__BANK=V
   Inc V : DEF_GAMESET__BANK=V
   Inc V : USER_GAMESET__BANK=V
   
   CONFIG_TEMPORARY__BANK=31
   LIFE_MOTION_MUSIC__BANK=15
   WINNER_MUSIC__BANK=16
   
   For I=0 To 2 : PLAN_BANK(I)=8+I : Next I
   
   V=0-1
   Inc V : BOUND_SOUND=V
   Inc V : TELEPORT_SOUND=V
   Inc V : DEATH_SOUND=V
   Inc V : ARROW_SOUND=V
   Inc V : PRESS_SPACE_SOUND=V
   Inc V : AUCH_SOUND=V
   Inc V : BODY_CHANGE_SOUND=V
   
   V=14-1
   Inc V : DUENIX_TITLE_IMAGE=V
   Inc V : DUENIX_ANIM_IMAGE=V
   Inc V : MOUSE_ON_LINE_IMAGE=V
   Inc V : _JOY_ON_LINE_IMAGE=V
   
   Restore CONSTANTS
   
   '          .----------------.
   '          |   Box System   |
   '          `----------------'
   
   Read BS_LEFT_TOP,BS_MIDDLE_TOP,BS_RIGHT_TOP
   Read BS_LEFT_MIDDLE,BS_MIDDLE_MIDDLE,BS_RIGHT_MIDDLE
   Read BS_LEFT_BOTTOM,BS_MIDDLE_BOTTOM,BS_RIGHT_BOTTOM
   
   For I=0 To 3 : Read _PLAYER_TYPE_IMAGE(I) : Next I
   
   For PROP=0 To 2
      For TYPE=0 To 3
         Read _PLAYER_PROPRIETY(PROP,TYPE)
      Next TYPE
   Next PROP
   
   For I=0 To 5
      Read STANDARD_PLAN_PAL$(I)
   Next I
   
   For I=0 To 2 : Read NO_IMAGE(I),YES_IMAGE(I),RED_BOX_IMAGE(I) : Next 
   Read LATERAL_LEFT,LATERAL_RIGHT
   Read HORIZONTAL_WOOD_IMAGE,CORNER_WOOD_IMAGE
   Read VERTICAL_WOOD_IMAGE,NOSCROLL_CORNER_IMAGE
   Read SCORE_PANEL_BACKGROUND_IMAGE
   Read _BOB_PLAYER_IMAGE(0,0),_BOB_PLAYER_IMAGE(1,0)
   Read _BOB_PLAYER_IMAGE(0,1),_BOB_PLAYER_IMAGE(1,1)
   Read LIFE_BOX_IMAGE,PRESS_SPACE_IMAGE
   Read _FREE_FOR_MANIPULATION_IMAGE
   
   For I=1 To 14 : OS_LC_BOX(I)=Rnd(2) : OS_RC_BOX(I)=Rnd(2) : Next 
   
   For I=1 To 6 : Read _SPRITE_NUMBER(I) : Next 
   For I=1 To 6 : Read _SPRITE_IMAGE(I) : Next 
   For I=1 To 6 : Read _PLAYER_GREY_COLOUR(I) : Next 
   For I=1 To 6 : Read PL_DEF_COLOR(I) : Next 
   For I=1 To 6 : Read PL_DEF_COLOR_LIGHT(I) : Next 
   For I=1 To 6 : Read PL_DEF_COLOR_DARK(I) : Next 
   
   _ADDRESS$=""
   For I=1 To 59
      Read A : A=127-(A and $7F)
      _ADDRESS$=_ADDRESS$+Chr$(A)
   Next 
   
   For I=1 To 8
      Read _NEXT_SOUND_FX_CHANNEL(I)
   Next I
   
   '             ############################################ 
   '             ############################################ 
   '             ############################################ 
   
   CONSTANTS:
   Data 23,24,25,26,27,28,29,30,31
   
   Data 12,13,32,47
   
   Data 0,-1,-1,-1,0,0,-1,0,0,0,0,-1
   
   Data "000100200310410520620730830930A30B30C30D30E30F30"
   Data "000010110120220230330340440450550560660670770880"
   Data "000100200301401511612712812913A23B23C24D24E34F35"
   Data "00000110210320420530640740850950A60B60C70D80E80F"
   Data "000100200410510720820A30B30B41A53A64975876887888"
   Data "000010020130140250360470770870980996AA9BBACCBDDC"
   
   Data 20,21,22,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67
   
   Data 0,1,4,6,2,3
   Data 1,2,3,4,1,2
   
   Data $555,$666,$444,$555,$444,$555
   Data $BB9,$D4,$F6E,$FD0,$98F,$DC
   Data $BB9,$D4,$F6E,$FD0,$98F,$DC
   Data $997,$B2,$D4C,$DB0,$76D,$BA
   
   Data 15547871,851935,717919,14521183,15184699,15895454,4796305,14405910,1778714,1785619
   Data 3568095,16049967,16590608,8523667,9276702,6056593,1776908,14231444,1650054,16523762
   Data 8584949,5226207,1411039,12670559,2261855,5154089,11158032,5056525,6662934,11519244
   Data 666900,1713424,13908489,6241310,9845471,10016972,8328520,1943410,12217717,13195487
   Data 15031647,8158431,7539679,14262205,3611437,1997745,9762352,9414386,338933,16412511
   Data 3954015,4265823,6466015,11781321,7741645,5544140,790367,10503503,12815311
   
   Data 2,8,0,1,0,0,0,4
   
End Proc
Procedure SET_TEXT_CONSTANTS
   On Error Proc HANDLE_ERROR
   
   _NOT_ALL_FILES$(0)="You miss Texts file!"
   _NOT_ALL_FILES$(1)="... not to talk about the other files."
   _NOT_ALL_FILES$(2)="Try to get complete version of Duenix."
   
   Set Input 10,-1
   Open In 1,LOCALE_PATH$+"Texts"
   
   Line Input #1,_LOADING$
   For I=0 To 5 : Line Input #1,SELECTING_UPPER_TEXT$(I) : Next 
   For I=0 To 5 : Line Input #1,SELECTING_LOWER_TEXT$(I) : Next 
   
   Line Input #1,PAGE_ONE$,MAIN_OPTION_LOADING_AND_SAVING$
   Line Input #1,MAIN_OPTION_E_TEXT$,MAIN_OPTION_G_TEXT$,MAIN_OPTION_R_TEXT$,MAIN_OPTION_U_TEXT$
   Line Input #1,CONFIGURATION$
   For I=0 To 3 : Line Input #1,MAIN_OPTION_TEXT$(I) : Next 
   Line Input #1,_PRESS_SPACE_OR_ESCAPE$,ESCAPE_ACCEPT$
   
   Line Input #1,PAGE_TWO$,GAME_SETTINGS$
   For PAGE=0 To 1
      For I=1 To 14 : Line Input #1,OS_LEFT_COLUMN_TEXT$(I,PAGE) : Next 
      For I=1 To 14 : Line Input #1,OS_RIGHT_COLUMN_TEXT$(I,PAGE) : Next 
   Next PAGE
   
   Line Input #1,PAGE_THREE$,GAMEPLAN$,THIS_IS_DEFPLAN$
   Line Input #1,THIS_IS_STANDARD_GAMEPLAN_NUMBER$
   Line Input #1,HERE_MAY_BE_YOUR_PLAN$,HERE_IS_YOUR_PLAN$,GAMEPLAN_L_TEXT$
   Line Input #1,ENTER_NAME_OFF_IFF_TO_LOAD$
   For I=0 To 2 : Line Input #1,GAMEPLAN_KEY_TEXT$(I) : Next 
   For I=0 To 2 : Line Input #1,GAMEPLAN_EXPLANATION$(I) : Next 
   
   Line Input #1,PAGE_FOUR$,RECORD_AND_REPLAY$,RECORD_AND_REPLAY_SPACE$
   For I=0 To 2 : Line Input #1,RR_COLUMN_TEXT$(I) : Next 
   For I=0 To 13 : Line Input #1,CREATE_USER_GS_EXPLANATION$(I) : Next 
   
   Line Input #1,PAGE_FIVE$,CREATING_USER_GAMESET$,CREATE_USER_GAMESET$
   Line Input #1,SORRY$
   Line Input #1,_MINIMUM_OF_DIRECTIONS$,_MAXIMUM_OF_DIRECTIONS$
   
   Line Input #1,INSERT_VOLUME$
   For I=0 To 2 : Line Input #1,_NOT_ALL_FILES$(I) : Next 
   Line Input #1,_NOT_FONT$
   Line Input #1,OPERATION_ABORTED$,DUENIX_CONFIG_ISNT_CONFIG$,DEF_CONFIG_LOADED$
   Line Input #1,CANT_FIND_DEF_CONFIG1$,CANT_FIND_DEF_CONFIG2$
   Line Input #1,CONFIG_SAVED_AS_DEF1$,CONFIG_SAVED_AS_DEF2$,ENTER_CONFIGNAME$
   Line Input #1,THIS_FILE_ISNT_CONFIG$,CONFIG_LOADED$,FILE_DOESNT_EXIST$
   Line Input #1,ENTER_NAME_OF_CONFIG_TO_SAVE$,CONFIG_SAVED$,CONFIG_NOT_SAVED$
   Line Input #1,THIS_FILE_ALREADY_EXISTS$,WANT_TO_OVERWRITE$
   Line Input #1,_ORIGINAL_CONFIG_LOADED$,ENTER_NAME_OF_CONFIG_LIST_FILE$
   
   Line Input #1,NONE_OF_FILES_WAS_CONFIG1$,NONE_OF_FILES_WAS_CONFIG2$,YOUR_NEW_GAMESET_IS_SAVED$
   Line Input #1,MORE_THAN_20_FILES1$,MORE_THAN_20_FILES2$,NAME_OF_EMPTY_GAME_IN_GAMESET$
   Line Input #1,YOU_HAVENT_RECORDED1$,YOU_HAVENT_RECORDED2$,YOU_HAVENT_RECORDED3$
   Line Input #1,YOU_HAVENT_SAVED_GAME1$,YOU_HAVENT_SAVED_GAME2$,YOU_HAVENT_SAVED_GAME3$
   Line Input #1,_MAXIMUM_OF_WATER_ANGLE$
   
   Line Input #1,PRESS_U_TO_SELECT_USER_GAME$,SELECT_GAME$
   Line Input #1,SELECT_GAME_FROM_USERSET$,NO_GAMERECORD_SAVED$
   Line Input #1,THE_WINNER$,THE_LOSER1$,THE_LOSER2$,THE_LOSERS$
   Close 1
End Proc
Procedure SET_SCANCODE_CONSTANTS
   Restore _SCANCODE_DATA
   
   Read A_SCANCODE,B_SCANCODE,C_SCANCODE,D_SCANCODE,E_SCANCODE,F_SCANCODE
   Read G_SCANCODE,H_SCANCODE,I_SCANCODE,J_SCANCODE,K_SCANCODE,L_SCANCODE
   Read M_SCANCODE,N_SCANCODE,O_SCANCODE,P_SCANCODE,Q_SCANCODE,R_SCANCODE
   Read S_SCANCODE,T_SCANCODE,U_SCANCODE,V_SCANCODE,W_SCANCODE,X_SCANCODE
   Read Y_SCANCODE,Z_SCANCODE
   Read ESC_SCANCODE,ENTER_SCANCODE,SPACE_SCANCODE
   
   _SCANCODE_DATA:
   Data 32,53,51,34,18,35,36,37,23,38,39,40,55,54,24,25,16,19,33,20,22,52,17,50,21,49,69,68,64
   
End Proc
Procedure COMMENTS__NOT_REALLY_PROC
   'UPP = UserPlanPalette ;; SPP = StandardPlanPalette  
   
   '========== Banky ===========
   
   ' 1  .. Sprite   Classic   
   ' 2  .. Icon     Font  
   ' 3  .. Music    Duning
   ' 4  .. Icon     Digits    
   ' 5  .. Samples  Classic 
   ' 7  .. Work     Config
   ' 8  .. Pic      Default Plan
   ' 9  .. Pic      Standard Plan 
   ' 10 .. Pic      Own Plan
   ' 12 .. Pic      Beau Frame
   ' 15 .. Track    Life Motion 
   ' 16 .. Track    Winner music
   ' 20 .. Ass      PutPix    
   ' 21 .. Pic      SQLogo             ONLY WHEN LOADING
   ' 22 .. Track    SQSound            ONLY WHEN LOADING
   ' 23 .. Sprite   FlagAnimation 
   ' 24 .. Ass      RecordAndReplay 
   ' 25 .. Ass      Strategy           & sin+cos picking
   ' 26 .. Work     Precounted sin, sixe 250*4=1000 
   ' 27 .. Work     Precounted arctan, angle in smeru units 
   ' 28 .. Work     DEF_GAMESET   
   ' 29 .. Work     USER_GAMESET  
   ' 30 .. Work     GameRecordBank
   ' 31 .. Work     Help Config Bank
   
   
   '========= Game Record ======
   
   ' 0   ..  (24) SMERU 
   ' 24  ..  (24) XPositions
   ' 48  ..  (24) YPositions  
   ' 72  ..  (6)  Player on/off 
   ' 78  ..  Playing Config - Dark GamePlan & Turbo 
   ' $AE  ..      This might be record, but it isnt nice size   
   ' $B0  ..  Game configuration
   ' $130 ..  Own Record
   
   
   '========= Options ==========  
   
   ' Smeru=pocet moznych smeru
   ' angle_constant#..z toho pocitana konstanta 
   ' line_length..delka cary nez prijde mezera (vcetne predchozi mezery)
   ' space_length..delka mezery 
   ' speedjump#..procentualni skok rychlosti na kopcich 
   ' rate..rychlost..50-150 
   ' ratemode..0-nezrychlovat rate, 1-zrychlit z 1 na 0 (rate musi byt 2) 
   ' user_rate_length..pocet kol, kdy nezrychlime 
   ' space_kill..1-v mezere se zabiji,0-nezabiji  
   ' bouncing..0-neodrazi,1-odrazi (od okraje)
   ' central_box..0-neni,1-je central_boxalni box 
   ' central_box_size..radius 
   ' teleporting..vyjizdeni na druhe strane 
   ' _music_on-hudba
   ' boldline 1-tlusta,0-tenka
   '
   ' plan..0-default,1-standard,2-own 
   '
   '=========== Config =================
   ' Bank 7 
   ' Offsets: 
   ' 0-flags
   '     1-ratemode   
   '     2-_music_on  
   '     4-space_kill     
   '     8-bouncing   
   '    10-center   
   '    20-teleporting    
   '    40-boldline 
   '    80-turbo (turbolimit) 
   '
   ' 1-Directions 
   ' 2-Speedjump
   ' 3-Spacelen 
   ' 5-line_length
   ' 7-Speeding lenght  
   ' 9-Cbox radius
   ' A-Speed  
   ' B-flags2 
   '     1-watering 
   '     2-always_turning 
   '     3-grey gameplan
   ' C-Water_limit  
   '
   ' D-1F free for future   
   '
   
End Proc

Procedure DUENIX_REQUEST
   If Not Exist(PATH$)
      Screen Open 3,320,8,2,Lowres
      Flash Off : Curs Off : Hide On 
      Screen Display 3,,170,320,8
      Paper 0 : Pen 1
      Palette 0,0
      Cls 0
      Locate 0,0
      Centre INSERT_VOLUME$+PATH$
      Fade 2,0,$FF0
      Wait 30
      Repeat 
      Until Exist(PATH$)
      Fade 2,0,0
      Wait 30
      Screen Close 3
   End If 
End Proc
Procedure HANDLE_ERROR
   E=Errn
   Screen Open 3,640,256,2,Hires : Curs Off 
   Cls 0 : Paper 0 : Pen 1 : Locate 0,10
   If E=_ERROR_BADPATH
      Centre "Bad path." : Print : Print 
      Centre "I guess you have run me from CLI." : Print 
      Centre "In that case you must run me from directory" : Print 
      Centre "where I am located." : Print : Print 
      Centre "You may of course run me from WorkBench." : Print 
   Else If E=81
      Centre _NOT_ALL_FILES$(0) : Print : Print 
      Centre _NOT_ALL_FILES$(1) : Print : Print 
      Centre _NOT_ALL_FILES$(2)
   Else 
      Centre "An error has occured:" : Print : Print 
      Centre Err$(E) : Print : Print 
      Centre "Sorry."
   End If 
   Fade 1,0,$F5A : Wait Key : Fade 1,0,0 : Wait 10
   Erase All : End 
End Proc

Procedure WRITE_INITDATA
   Restore WRITEDATA
   For I=0 To $40-1
      Read WRITE_KOI82IMAGE(I)
   Next I
   For I=0 To $40-1
      Read WRITE_KOI82HOOK(I)
   Next I
   
   WRITEDATA:
   Data 0,97,0,99,100,101,114,0,0,105,117,108,108,0,110,111
   Data 111,97,114,115,116,117,0,101,0,121,122,0,0,0,0,0
   Data 0,65,0,67,68,69,82,0,0,73,85,76,76,0,78,79
   Data 79,65,82,83,84,85,0,69,0,89,90,0,0,0,0,0
   
   Data 0,$61,0,$62,$82,$62,$62,0,0,$61,$63,$81,$83,0,$62,$61
   Data $62,$62,$62,$62,$82,$61,0,$61,0,$61,$62,0,0,0,0,0
   Data 0,$81,0,$82,$82,$82,$82,0,0,$81,$83,$81,$83,0,$82,$81
   Data $82,$82,$82,$82,$82,$81,0,$81,0,$81,$82,0,0,0,0,0
End Proc
Procedure WRITEXY[PRINX,PRINY,PRIN$]
   If PRINX>-1 : SFX=PRINX
   Else If PRINX=-2 : SFX=160-3*Len(PRIN$) : Rem             center 
Else If PRINX=-3 : SFX=320-6*Len(PRIN$) : End If : Rem    right align 
   If PRINY>-1 : SFY=PRINY : End If 
   
   SFDEL=Len(PRIN$)
   If SFDEL=0 : Pop Proc : End If 
   For SFI=1 To SFDEL
      SFCH=Asc(Mid$(PRIN$,SFI,1))
      
      If(SFCH=10) or(SFCH=92) : Rem 92="\" 
         SFY=SFY+9 : SFX=0
      Else 
         If(SFCH>$C0)
            Paste Icon SFX,SFY,WRITE_KOI82IMAGE(SFCH-$C0)-32+1
            HOOKNPOSITION=WRITE_KOI82HOOK(SFCH-$C0)
            Paste Icon SFX,SFY-(HOOKNPOSITION/$10),(HOOKNPOSITION and $F)+$5B
         Else 
            Paste Icon SFX,SFY,Max(0,SFCH-32)+1
         End If 
         If(SFCH=Asc("l")) : Add SFX,4
      Else : Add SFX,6 : End If 
         If SFX>312 : SFX=0 : SFY=SFY+9 : End If 
      End If 
   Next SFI
End Proc

Procedure HELP
   Open In 1,LOCALE_PATH$+"Help"
   SFY=0
   
   Repeat 
      Unpack PLAN_BANK(0)
      P0=Phybase(0) : P1=Phybase(1) : P2=Phybase(2) : P3=Phybase(3)
      Copy P1,P1+10240-1 To P0
      Copy P2,P2+10240-1 To P1
      Copy P3,P3+10240-1 To P2
      Fill P3 To P3+10240-1,0
      
      Palette $0,$101,$201,$301,$402,$502,$602,$702,,,,,,,,,,,,,,,,,$831,$A52,$B62,$C73,$D83,$E94,$F94,$FA5
      Repeat 
         Line Input #1,A$
         WRITEXY[0,-1,A$+"\"]
      Until Eof(1) or SFY>(256-10)
      Clear Key 
      Repeat 
         A$=Lower$(Inkey$)
         ESC=Key State(ESC_SCANCODE)
      Until(A$<>"") or ESC
      FAST_FADE_OUT
      Cls 0 : SFY=0
   Until Eof(1) or ESC
   
   Close 1
   
End Proc

Procedure INIT_PUTPIX_STRATEGY_SIN_ATAN
   Screen 1
   For I=0 To 4
      Loke BITPLAN_BASE+I*4,Phybase(I)
   Next I
   Loke VA_PQ_X,Varptr(_PUTPIX_QUEUE_X(0))
   Loke VA_PQ_Y,Varptr(_PUTPIX_QUEUE_Y(0))
   Loke VA_PQ_COL,Varptr(_PUTPIX_QUEUE_COLOUR(0))
   Loke VA_PQ_TOP,Varptr(_PUTPIX_QUEUE_TOP)
   
   
   
   Loke VA_BITPLAN4,Phybase(4)
   Loke VA_SIN_TABLE,Start(26)
   Loke VA_DIRECTIONS,SMERU
   Loke VA_DIRSTEP0,SMERU*0.08
   Loke VA_DIRSTEP1,SMERU*0.16
   Loke VA_DIRSTEP2,SMERU*0.26
   Loke VA_DIRSTEP3,SMERU*0.32
   Loke VA_DIRSTEP4,SMERU*0.38
   
   Loke VA_ATAN_TABLE,Start(27)
   
   Loke VA_XHASH,Varptr(X#(1))
   Loke VA_YHASH,Varptr(Y#(1))
   Loke VA_PLAYERSDIR,Varptr(SMER(1))
   Loke VA_PLAYERALIVE,Varptr(SEMIALIVE(1))
   
   Loke VA_PLAYERSCHOICE,0
   Doke VA_PLAYERSCHOICE+4,0
   
   Poke VA_TURN,0
   '   Poke VA_BIGSCREEN,BIG_SCREEN 
   Poke VA_BIGSCREEN,Sgn(_SCREEN_SIZE)


   ANGLE_CONSTANT#=2*Pi#/SMERU : Rem      Userdirs=smeru/4 by the way   
   
   '          ________________________________
   '         |                                |   
   '         | Sin                            |     
   '         |________________________________| 
   
   For I=0 To USER_DIRECTIONS
      LOCAL#=Sin(ANGLE_CONSTANT#*I)
      Loke Start(26)+4*I,Leek(Varptr(LOCAL#))
   Next I

   '          ________________________________
   '         |                                | 
   '         | Atan                           | 
   '         |________________________________| 
   
   For I=0 To 256
      I#=I
      LOC#=I#/256
      AN=Atan(LOC#)/ANGLE_CONSTANT#
      Poke Start(27)+I,AN
   Next I

End Proc

'             ________________________________________ 
'            |                                        \  
'            |  Begin actions, configuration n dialogs \ 
'            |__________________________________________\        


Procedure _GET_IMAGES
   On Error Proc HANDLE_ERROR
   
   '          ________________________________
   '         |                                | 
   '         | GET FLAG ANIMATION             | 
   '         |________________________________| 
   
   
   Screen Open 2,320,256,16,Lowres
   Screen To Front 1
   
   Load Iff PATH$+"Flag"
   For J=0 To 2
      For I=0 To 3
         Get Sprite J*4+I+1,I*32,J*24 To(I+1)*32,(J+1)*24
      Next I
   Next J
   
   Bank Swap 1,23
   
   '          ________________________________
   '         |                                | 
   '         | GET HEAD SPRITES               | 
   '         |________________________________| 
   
   '    Sprites 1,2,5,6 are 4 col,       1,2 are small while 5,6 are big    
   '    Sprites 3,4,7,8 are 16 col,      3,4 are small while 7,8 are big      
   
   
   Ink 3 : Bar 0,0 To 1,1 : Get Sprite 7,0,0 To 2,2 : Get Sprite 3,0,0 To 1,1
   Ink 4 : Bar 0,0 To 1,1 : Get Sprite 8,0,0 To 2,2 : Get Sprite 4,0,0 To 1,1
   
   Screen Close 2
   
   Screen Open 2,320,256,4,Lowres
   Screen To Front 1
   
   Load Iff PATH$+"Lateral"
   
   Get Sprite LATERAL_LEFT,0,0 To 5,218
   Get Sprite LATERAL_RIGHT,5,0 To 5+5,218
   
   
   Ink 1 : Bar 0,0 To 1,1 : Get Sprite 5,0,0 To 2,2 : Get Sprite 1,0,0 To 1,1
   Ink 2 : Bar 0,0 To 1,1 : Get Sprite 6,0,0 To 2,2 : Get Sprite 2,0,0 To 1,1
   
   '          ________________________________
   '         |                                | 
   '         | 32 colour images               | 
   '         |________________________________| 
   
   
   Screen Open 2,320,256,32,Lowres
   Flash Off : Curs Off : Hide On 
   Screen To Front 1
   
   Ink $13 : Bar 0,0 To 1,1 : Get Sprite _BOB_PLAYER_IMAGE(0,1),0,0 To 2,2
   Get Sprite _BOB_PLAYER_IMAGE(0,0),0,0 To 1,1
   Ink $14 : Bar 0,0 To 1,1 : Get Sprite _BOB_PLAYER_IMAGE(1,1),0,0 To 2,2
   Get Sprite _BOB_PLAYER_IMAGE(1,0),0,0 To 1,1
   
   
   '        ========================================= 
   '        = 12    X                               = 
   '        = 13    cervik                          = 
   '        = 20,21 Yellow fajfky                   =   
   '        = 22    box                             = 
   '        = 32    computer                        = 
   '        = 47    cyborg                          = 
   '        ========================================= 
   
   Load Iff PATH$+"Graphics"
   
   Get Sprite 12,160,0 To 160+40,20
   Get Sprite 13,160,20 To 160+40,20+20
   Get Sprite DUENIX_TITLE_IMAGE,0,154 To 205,154+26+3
   Get Sprite DUENIX_ANIM_IMAGE,0,200 To 0+48,200+32
   Get Sprite 16,0,22+36+2 To 153,22+36+18
   Get Sprite 17,0,22+36+18 To 153,22+36+18+18
   
   Get Sprite MOUSE_ON_LINE_IMAGE,0,99 To 50,125
   Get Sprite _JOY_ON_LINE_IMAGE,50,99 To 100,125
   
   For I=0 To 2
      Get Sprite NO_IMAGE(I),35*I,0 To 35*I+35,17
      Get Sprite YES_IMAGE(I),35*I,17 To 35*I+35,2*17
      Get Sprite RED_BOX_IMAGE(I),35*I,2*17 To 35*I+35,3*17
   Next I
   
   Get Sprite 32,160,40 To 160+40,40+20
   Get Sprite 47,160,60 To 160+40,60+20
   
   Get Sprite SCORE_PANEL_BACKGROUND_IMAGE,0,55 To 40,55+40
   
   Get Sprite HORIZONTAL_WOOD_IMAGE,0,256-4 To 160,256
   Get Sprite CORNER_WOOD_IMAGE,160,256-4 To 160+9,256
   Get Sprite VERTICAL_WOOD_IMAGE,320-4,0 To 320,256-30-2*4
   Get Sprite NOSCROLL_CORNER_IMAGE,160+10,256-4 To 160+10+4,256
   
   '         ___________________________  
   '        |                           | 
   '        |          .--------------. |   
   '        | Box      | 23 | 24 | 25 | |   
   '        | Systems  |----+----+----| | 
   '        |          | 26 | 27 | 28 | | 
   '        |          |----+----+----| | 
   '        |          | 29 | 30 | 31 | | 
   '        |          `--------------' | 
   '        |___________________________| 
   
   Get Sprite 23,0,127 To 0+16,127+8
   Get Sprite 24,0+16,127 To 0+16+16,127+8
   Get Sprite 25,0+16+16,127 To 0+16+16+16,127+8
   
   Get Sprite 26,0,127+8 To 0+16,127+8+8
   Get Sprite 27,0+16,127+8 To 0+16+16,127+8+8
   Get Sprite 28,0+16+16,127+8 To 0+16+16+16,127+8+8
   
   Get Sprite 29,0,127+8+8 To 0+16,127+8+8+8
   Get Sprite 30,0+16,127+8+8 To 0+16+16,127+8+8+8
   Get Sprite 31,0+16+16,127+8+8 To 0+16+16+16,127+8+8+8
   
   '          ________________________________
   '         |                                | 
   '         | logo anim 33-46                | 
   '         |________________________________| 
   
   
   BASE=Phybase(4)
   Fill BASE To BASE+10239,0
   
   For I=1 To 14
      Get Sprite 32+I,(I-1)*20,182 To I*20-1,182+18
   Next I
   
   '          ________________________________
   '         |                                | 
   '         | Press space                    | 
   '         |________________________________| 
   
   
   Load Iff LOCALE_PATH$+"PressSpace"
   Get Sprite PRESS_SPACE_IMAGE,0,0 To 53,33
   
   Screen 1
End Proc
Procedure _GET_ICONS_FROM_SCOREIMAGES
   Screen Open 2,320,256,16,Lowres
   Screen To Front 1
   
   Load Iff PATH$+"scorepanel"
   Get Icon 1,0,0 To 320,30
   Get Icon 2,0,30 To 320,30+30
   
   For I=0 To 10+6-1
      Get Icon 3+I,20*I,83 To 20*(I+1),83+24
   Next I
   Get Icon 19,0,108 To 0+55,108+30
   Get Icon 20,55,108 To 55+10,108+4
   Make Icon Mask 
   
   Screen Close 2
End Proc
Procedure _PROC_SHOW_SQ_LOGO
   DUENIX_REQUEST
   Load PATH$+"SQLogo",21
   Track Load PATH$+"SQSound",22
   
   Screen Open 2,320,256,64,EHB
   Flash Off : Curs Off : Hide On 
   
   Unpack 21
   Fade 3,$0,$741,$270,$255,$E80,$424,$550,$565,$4A0,$290,$5C0,$5F5,$C20,$A10,$A60,$954,$E30,$F40,$878,$B90,$AA5,$BC0,$AF5,$EA0,$FC1,$FF1,$FF5,$AA9,$ADA,$C98,$FFA,$FFE
   Track Play 22
   PAUSED=_FALSE
   Timer=0 : Repeat 
      If Key State(P_SCANCODE)
         PAUSED=_TRUE
      End If 
   Until Timer>50*6
   Track Stop 
   If PAUSED
      Clear Key : Wait Key 
   End If 
   
   Fade 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
   Wait 50
   Screen Close 2
   Erase 22 : Erase 21
   
End Proc
Procedure SEND_MONEY
   Screen Open 2,320,256,32,Lowres
   Flash Off : Curs Off : Hide On 
   
   Cls 0
   WRITEXY[0,9*2,CZ_SEND$+"\\"+_ADDRESS$+"\"]
   WRITEXY[0,130,EN_SEND$+"\"+_ADDRESS$+"\    Czech Republic\\"+EN_VALUE$]
   
   Ink $12,0 : Set Font FONT_NUMBER
   Text 10*10,128-4-4,RELEASE$
   
   BASE=Phybase(4) : Fill BASE+5120 To BASE+10239,0
   
   Fade 1,$0,$1,$2,$3,$4,$15,$115,$116,$A07,$B18,$C29,$D3A,$E49,$F59,$F69,$F78,$F80,$EA0,$DC0,$CE0,$F01,$F20,$F50,$111,$223,$334,$557,$779,$99A,$AAB,$CCC,$DDD
   Clear Key 
   Repeat 
      PRESS$=Inkey$ : PRESS$=Lower$(PRESS$)
   Until PRESS$<>""
   _SHOW_SQ_LOGO= Not(Scancode=ESC_SCANCODE)
   
   Fade 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
   Wait 15
   Screen Close 2
   
End Proc
Procedure _ASK_FOR_LANGUAGE
   Screen Open 2,320,256,32,Lowres
   Flash Off : Curs Off : Hide On 
   
   Cls 0
   WRITEXY[0,9*2,"Zvol si prosÉm jazyk:\\                C: ăeÓtina\                E: AngliĂtina\"]
   WRITEXY[-1,130,"Select the language please:\\                C: Czech\                E: English\"]
   
   BASE=Phybase(4)
   Fill BASE+5120 To BASE+10239,0
   
   Fade 1,$0,$1,$2,$3,$4,$15,$115,$116,$A07,$B18,$C29,$D3A,$E49,$F59,$F69,$F78,$F80,$EA0,$DC0,$CE0,$F01,$F20,$F50,$111,$223,$334,$557,$779,$99A,$AAB,$CCC,$DDD
   Clear Key 
   Repeat 
      PRESS$=Inkey$ : PRESS$=Lower$(PRESS$)
   Until PRESS$="c" or PRESS$="e"
   
   If PRESS$="c"
      LOCALE_PATH$=PATH$+"czech_files/"
   Else 
      LOCALE_PATH$=PATH$+"english_files/"
   End If 
   
   Fade 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
   Wait 15
   Screen Close 2
   
End Proc
Procedure BEGIN_LOADING
   On Error Proc HANDLE_ERROR

   If Not Exist(PATH$+"Duenix.info")
      Error _ERROR_BADPATH
   End If 

   LOCALE_PATH$=""
   If Exist(PATH$+"Language")
      Open In 1,PATH$+"Language"
      Line Input #1,LANGUAGE$
      Close 1
      LOCALE_PATH$=PATH$+LANGUAGE$+"_files/"
      If Not Exist(LOCALE_PATH$)
         LOCALE_PATH$=""
      End If 
   End If 
   
   If _COMPILED or _LOAD_DUENIX_FONT
      
      '          ________________________________
      '         |                                | 
      '         | Load textfont                  | 
      '         |________________________________| 
      
      Exec "Makedir T:tempfonts"
      Exec "Copy Fonts:Duenix.font T:tempfonts"
      Exec "Assign ofonts: fonts:"
      Exec "Assign fonts: T:tempfonts"
      Get Fonts 
      Exec "Assign fonts: ofonts:"
      Exec "Assign ofonts:"
      Exec "Delete T:tempfonts"
      
      FONT_NUMBER=0
      Repeat 
         Inc FONT_NUMBER
         CURRENTFONT$=Lower$(Left$(Font$(FONT_NUMBER),11))
      Until CURRENTFONT$="" or CURRENTFONT$="duenix.font"
      
      If CURRENTFONT$=""
         If LOCALE_PATH$=""
            LOCALE_PATH$=PATH$+"english_files/"
         End If 
         SET_TEXT_CONSTANTS

         Screen Open 3,640,256,2,Hires : Curs Off 
         Cls 0 : Paper 0 : Pen 1 : Locate 0,10
         Centre _NOT_FONT$ : Print : Print : Centre _NOT_ALL_FILES$(1)
         Print : Print : Centre _NOT_ALL_FILES$(2)
         Fade 1,0,$F5A : Wait Key : Fade 1,0,0 : Wait 14
         Screen Close 3 : Erase All : End 
      Else 
         Set Font FONT_NUMBER
      End If 
   End If 
   
   _TRUE=Asc(Mid$(_ADDRESS$,36,1))-50
   _FALSE=Len(_ADDRESS$)-59
   
   DUENIX_REQUEST
   _GET_ICONS_FROM_SCOREIMAGES
   Bank Swap 4,2
   Load PATH$+"Font",2 : Make Icon Mask 
   
   If _COMPILED
      SEND_MONEY
      If _SHOW_SQ_LOGO
         If LOCALE_PATH$=""
            _ASK_FOR_LANGUAGE
         End If 
         _PROC_SHOW_SQ_LOGO
      End If 
      If LOCALE_PATH$=""
         LOCALE_PATH$=PATH$+"czech_files/"
      End If 
   Else 
      LOCALE_PATH$=PATH$+"czech_files/"
   End If 
   
   
   '          ________________________________
   '         |                                | 
   '         | The Rest                       | 
   '         |________________________________| 
   
   
   SET_TEXT_CONSTANTS
   
   
   If _COMPILED
      Cls 0
      WRITEXY[-2,124,_LOADING$]
      SELECTING_FADE_UP
   End If 
   
   DUENIX_REQUEST
   Pload PATH$+"PutPixel",20
   Pload PATH$+"RecordAndReplay",24
   Pload PATH$+"Strategy",25
   
   Reserve As Work PRECOUNTED_SIN__BANK,1004
   Reserve As Work PRECOUNTED_ATAN__BANK,$101
   
   '          __________________________________
   '         |                                  | 
   '         | Setting CatchPoints of Assembler | 
   '         |__________________________________| 
   
   
   A20=Start(20)
   BITPLAN_BASE=A20 : Add A20,$20
   VA_PQ_X=A20 : Add A20,4
   VA_PQ_Y=A20 : Add A20,4
   VA_PQ_COL=A20 : Add A20,4
   VA_PQ_TOP=A20 : Add A20,4
   VA_PUTPIX_TYPE=A20 : Add A20,4
   PA_DRAW_PIXEL_QUEUE=A20 : Add A20,4
   PA_SMALL_PIX=A20 : Add A20,4
   PA_BIG_PIX=A20 : Add A20,4
   PA_SMALL_PIX_BIGSCREEN=A20 : Add A20,4
   PA_BIG_PIX_BIGSCREEN=A20 : Add A20,4
   
   VA_PLAYER_RECORD=Start(24)
   VA_GAME_RECORD=Start(24)+4
   VA_GAME_RECORD_POINTER=Start(24)+8
   PA_SAVE_POSITION=Start(24)+$C
   PA_LOAD_POSITION=Start(24)+$10
   
   A25=Start(25)
   VA_BITPLAN4=A25 : Add A25,4
   VA_SIN_TABLE=A25 : Add A25,4
   VA_ATAN_TABLE=A25 : Add A25,4
   
   VA_DIRECTIONS=A25 : Add A25,4
   VA_DIRSTEP0=A25 : Add A25,4
   VA_DIRSTEP1=A25 : Add A25,4
   VA_DIRSTEP2=A25 : Add A25,4
   VA_DIRSTEP3=A25 : Add A25,4
   VA_DIRSTEP4=A25 : Add A25,4
   
   VA_ROTATION=A25 : Add A25,4
   VA_DIRECTION=A25 : Add A25,4
   VA_XAMOSREAL=A25 : Add A25,4
   VA_YAMOSREAL=A25 : Add A25,4
   VA_PLAYER=A25 : Add A25,4
   VA_XHASH=A25 : Add A25,4
   VA_YHASH=A25 : Add A25,4
   VA_PLAYERSDIR=A25 : Add A25,4
   VA_PLAYERALIVE=A25 : Add A25,4
   VA_PLAYERSCHOICE=A25 : Add A25,6
   VA_TURN=A25 : Add A25,1
   VA_BIGSCREEN=A25 : Add A25,1
   
   PA_STRATEGY=A25 : Add A25,4
   PA_COUNTSINANDCOS=A25 : Add A25,4
   PA_COUNTTESTANDSPEEDPOINTS_1PIX=A25 : Add A25,4
   PA_COUNTTESTANDSPEEDPOINTS_2PIX=A25 : Add A25,4
   
   '          ________________________________
   '         |                                | 
   '         | Continue                       | 
   '         |________________________________| 
   
   
   Track Load PATH$+"LifeMotion",LIFE_MOTION_MUSIC__BANK
   
   _GET_IMAGES
   
   If _COMPILED
      For I=1 To 6
         A$=PATH$+"Plan"+(Str$(I)-" ")
         If Not Exist(A$) : Error 81 : End If : Rem NOT ALL FILES  
      Next I
   End If 

   Load PATH$+"PlanDef",PLAN_BANK(0)
   Load PATH$+"Plan1",PLAN_BANK(1)
   
   DUENIX_REQUEST
   _LOAD_CONFIGURATION[3] : Rem AT STARTUP 
   
   Load PATH$+"Default_Gameset",DEF_GAMESET__BANK
   BASE=Start(DEF_GAMESET__BANK)
   For I=0 To 19
      OFFSET=Deek(BASE+2*I)
      If OFFSET=0
         GS_GAME_NAME$(I,0)="Level"+Str$(I-10+1)
      Else 
         GS_GAME_NAME$(I,0)=Peek$(BASE+OFFSET,16)
      End If 
   Next I
   
   If Exist(PATH$+"User_Gameset")
      Load PATH$+"User_Gameset",USER_GAMESET__BANK
      BASE=Start(USER_GAMESET__BANK)
      For I=0 To 19
         OFFSET=Deek(BASE+2*I)
         If OFFSET=0
            GS_GAME_NAME$(I,1)="Empty"
         Else 
            GS_GAME_NAME$(I,1)=Peek$(BASE+OFFSET,16)
         End If 
      Next I
   End If 
   
   '          _________________________________________ 
   '         |                                         |  
   '         | Not neccessary, only when enough memory |  
   '         |_________________________________________|  
   
   
   If(Chip Free>28000+128000)
      Load PATH$+"Samples",5
      ENABLED_SOUND=True
   Else 
      If Not Exist(PATH$+"Samples") : Error 81 : End If : Rem NOT ALL FILES
      ENABLED_SOUND=False
   End If 
   
   If Chip Free>19000+128000
      GAME_MUSIC_IN_CHIP_RAM=True
      Load PATH$+"Duming",3
   Else 
      GAME_MUSIC_IN_CHIP_RAM=False
   End If 
   
   If Chip Free>30000+128000
      GAME_MUSIC_IN_CHIP_RAM=True
      Track Load PATH$+"WinnerMusic",WINNER_MUSIC__BANK
   Else 
      If Not Exist(PATH$+"WinnerMusic") : Error 81 : End If : Rem _NOT_ALL_FILES 
      GAME_MUSIC_IN_CHIP_RAM=False
   End If 
   
   RECORDING_ALLOWED=False
   If(Chip Free+Fast Free)>10000+128000
      Reserve As Work 30,10000
      RECORDING_ALLOWED=True

      Loke VA_PLAYER_RECORD,Varptr(_PLAYER_RECORD(0))
      Loke VA_GAME_RECORD_POINTER,0
      
      RECORD_BASE=Start(30)
      RECORD_MOVEMENTS_START=RECORD_BASE+$130
      Loke VA_GAME_RECORD,RECORD_MOVEMENTS_START
      GAME_RECORD_EMPTY=True
   End If 
   
   If _COMPILED
      Fade 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
      Wait 30
      Palette 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
   End If 
   
   If _COMPILED or _LOAD_DUENIX_FONT
      Screen 2
      Set Font FONT_NUMBER
      Screen 1
   End If 
   
   '          ________________________________
   '         |                                | 
   '         | Now change the plan            | 
   '         |________________________________| 
   
   
   SET_PLAN_USING_CONFIG[True]
   
   Track Loop Of 
   If _MUSIC_ON
      Track Play LIFE_MOTION_MUSIC__BANK
   End If 
   
End Proc

Procedure SET_PLAN_USING_CONFIG[LONG_TERMED]
   If PLAN=1
      Trap Load PATH$+"Plan"+Str$(GAMEPLAN)-" ",PLAN_BANK(1)
   End If 
   
   If PLAN=1
      SET_SPP
   End If 
   
   If LONG_TERMED or PLAN=2
      If OWN_PLAN_PATH$<>""
         OWN_PLAN_LOAD[OWN_PLAN_PATH$,False]
      Else 
         If(LONG_TERMED=False) and(Length(PLAN_BANK(2))>0)
            Erase PLAN_BANK(2)
         End If 
         For I=0 To $F
            UPP(I)=0
         Next I
      End If 
   End If 
End Proc
Procedure _DECONFIG[BASE,FROM_SET]
   SHORT_CONFIG=-Peek(BASE)
   USER_DIRECTIONS=Peek(BASE+1)
   SMERU=USER_DIRECTIONS*4
   ANGLE_CONSTANT#=2*Pi#/SMERU
   SMERU_QUARTER=USER_DIRECTIONS
   SMERU_HALVE=USER_DIRECTIONS*2
   SPEEDJUMP=Peek(BASE+2)
   SPACE_LENGTH=Deek(BASE+3)
   _DRAWING_LINE_LENGTH=Deek(BASE+5)
   LINE_LENGTH=SPACE_LENGTH+_DRAWING_LINE_LENGTH+20
   USER_RATE_LENGTH=Deek(BASE+7)
   CENTRAL_BOX_SIZE=Peek(BASE+9)
   FINAL_RATE=Peek(BASE+$A)
   FLAGS=Peek(BASE+$B)
   WATERING=FLAGS and $1
   ALWAYS_TURNING=FLAGS and $2 : Ror.b 1,ALWAYS_TURNING
   USER_SOUND_FX=FLAGS and $4 : Ror.b 2,USER_SOUND_FX
   COMPUDEATH=FLAGS and $8 : Ror.b 3,COMPUDEATH
   TEAM_GAME=FLAGS and $10 : Ror.b 4,TEAM_GAME
   TEAM_GAME=-TEAM_GAME
   LONG_GAME=FLAGS and $20 : Ror.b 5,LONG_GAME
   COMPUTURBO=FLAGS and $40 : Ror.b 6,COMPUTURBO
   SURPRISING_START=FLAGS and $80 : Ror.b 7,SURPRISING_START
   WATER_LIMIT=Peek(BASE+$C)
   WATER_LIMIT#=WATER_LIMIT*Pi#/180
   '       LIVES_TOP=Peek(BASE+$D)
   PLAN=Peek(BASE+$E)
   GAMEPLAN=Peek(BASE+$F)
   FLAGS=Peek(BASE+$10)
   RATEMODE=FLAGS and 1
   _MUSIC_ON=FLAGS and 2 : Ror.b 1,_MUSIC_ON
   SPACE_KILL=FLAGS and 4 : Ror.b 2,SPACE_KILL
   BOUNCING=FLAGS and 8 : Ror.b 3,BOUNCING
   CENTRAL_BOX=FLAGS and $10 : Ror.b 4,CENTRAL_BOX
   TELEPORTING=FLAGS and $20 : Ror.b 5,TELEPORTING
   BOLDLINE=FLAGS and $40 : Ror.b 6,BOLDLINE
   TURBO=(FLAGS and $80) : Ror.b 7,TURBO
   FLAGS=Peek(BASE+$11)
   WIND=FLAGS and 1
   BODY_CHANGE=FLAGS and 2 : Ror.b 1,BODY_CHANGE
   ZOMBIES=FLAGS and 4 : Ror.b 2,ZOMBIES
   WIND_STRENGTH=Peek(BASE+$12)
   _SCREEN_SIZE=Peek(BASE+$13)
   BODY_CHANGE_PERCENT=Peek(BASE+$14)
   
   SET_APPROPRIATE_DRAWPIXEL_PROC
   
   If Not FROM_SET
      PATH_S_LEN=Peek(BASE+$20)
      If PATH_S_LEN<$60
         OWN_PLAN_PATH$=Peek$(BASE+$21,PATH_S_LEN)
      Else 
         _LOAD_CONFIGURATION[0] : Rem BUILTIN  
      End If 
   End If 
   
   '          ________________________________
   '         |                                | 
   '         | Is It Configuration ?!         | 
   '         |________________________________| 
   
   
   FCONFIG=0 : Rem False configuration bool 
   
   FCONFIG=FCONFIG or(PLAN>2) or(GAMEPLAN<1) or(GAMEPLAN>6) or(WATERING+TELEPORTING+BOUNCING>1)
   FCONFIG=FCONFIG or(SPEEDJUMP>95) or(USER_RATE_LENGTH>999) or(CENTRAL_BOX_SIZE>80) or(CENTRAL_BOX_SIZE<10)
   FCONFIG=FCONFIG or(FINAL_RATE>100) or(_SCREEN_SIZE>2)
   FCONFIG=FCONFIG or(USER_DIRECTIONS<5) or(USER_DIRECTIONS>250) or(SPACE_LENGTH>999) or(_DRAWING_LINE_LENGTH>999)
   
   If FCONFIG
      _LOAD_CONFIGURATION[0] : Rem BUILTIN  
   End If 
End Proc
Procedure CONFIG[BASE,FROM_SET]
   OWN_PLAN_PATH$=Left$(OWN_PLAN_PATH$,$5F)
   
   Poke BASE,-SHORT_CONFIG
   Poke BASE+1,USER_DIRECTIONS
   Poke BASE+2,SPEEDJUMP
   Doke BASE+3,SPACE_LENGTH
   Doke BASE+5,_DRAWING_LINE_LENGTH
   Doke BASE+7,USER_RATE_LENGTH
   Poke BASE+9,CENTRAL_BOX_SIZE
   Poke BASE+$A,FINAL_RATE
   FLAGS=WATERING
   Add FLAGS,2*ALWAYS_TURNING
   Add FLAGS,4*USER_SOUND_FX
   Add FLAGS,8*COMPUDEATH
   Add FLAGS,-$10*TEAM_GAME
   Add FLAGS,$20*LONG_GAME
   Add FLAGS,$40*COMPUTURBO
   Add FLAGS,$80*SURPRISING_START
   Poke BASE+$B,FLAGS
   Poke BASE+$C,WATER_LIMIT
   Poke BASE+$D,LIVES_TOP
   Poke BASE+$E,PLAN
   Poke BASE+$F,GAMEPLAN
   FLAGS=RATEMODE
   Add FLAGS,2*_MUSIC_ON
   Add FLAGS,4*SPACE_KILL
   Add FLAGS,8*BOUNCING
   Add FLAGS,$10*CENTRAL_BOX
   Add FLAGS,$20*TELEPORTING
   Add FLAGS,$40*BOLDLINE
   Add FLAGS,$80*TURBO
   Poke BASE+$10,FLAGS
   FLAGS=WIND
   Add FLAGS,2*BODY_CHANGE
   Add FLAGS,4*ZOMBIES
   Poke BASE+$11,FLAGS
   Poke BASE+$12,WIND_STRENGTH
   Poke BASE+$13,_SCREEN_SIZE
   Poke BASE+$14,BODY_CHANGE_PERCENT
   
   If Not FROM_SET
      Poke BASE+$20,Len(OWN_PLAN_PATH$)
      Poke$ BASE+$21,OWN_PLAN_PATH$
   End If 
End Proc
Procedure _LOAD_CONFIGURATION[WHAT]
   If(WHAT=0) or(WHAT=3) : Rem 3 means at StartUp 
      '          ________________________________
      '         |                                | 
      '         | Builtin                        | 
      '         |________________________________| 
      
      USER_DIRECTIONS=18
      SMERU=USER_DIRECTIONS*4 : ANGLE_CONSTANT#=2*Pi#/SMERU
      SMERU_QUARTER=USER_DIRECTIONS : SMERU_HALVE=USER_DIRECTIONS*2
      _DRAWING_LINE_LENGTH=100
      SPACE_LENGTH=10 : LINE_LENGTH=SPACE_LENGTH+_DRAWING_LINE_LENGTH+20
      SPEEDJUMP=60
      RATE=100
      RATEMODE=1
      USER_RATE_LENGTH=500
      FINAL_RATE=100
      SPACE_KILL=1
      BOUNCING=0
      TELEPORTING=0
      _MUSIC_ON=1
      BOLDLINE=1 : SET_APPROPRIATE_DRAWPIXEL_PROC
      PLAN=0
      CENTRAL_BOX=0
      CENTRAL_BOX_SIZE=50
      XBOTTOM=145-CENTRAL_BOX_SIZE : XTOP=146+CENTRAL_BOX_SIZE
      YBOTTOM=127-CENTRAL_BOX_SIZE : YTOP=128+CENTRAL_BOX_SIZE
      TURBOLIMIT=0
      WATERING=1
      WATER_LIMIT=75 : WATER_LIMIT#=WATER_LIMIT*Pi#/180
      ALWAYS_TURNING=0
      SURPRISING_START=1
      BODY_CHANGE=1
      BODY_CHANGE_PERCENT=80
      COMPUDEATH=1
      ZOMBIES=0

      PLAN=0
      GAMEPLAN=1
   End If 
   
   
   If WHAT=3
      '          ________________________________
      '         |                                | 
      '         | At startup                     | 
      '         |________________________________| 
      
      Trap If Exist(PATH$+"Config")
         Trap Load PATH$+"Config",7
         If Length(7)>=$80
            _DECONFIG[Start(7),False]
         End If 
      End If 
   Else If WHAT=1
      '          ________________________________
      '         |                                | 
      '         | Default                        | 
      '         |________________________________| 
      
      DUENIX_REQUEST
      
      If Exist(PATH$+"Config")
         Trap Load PATH$+"Config",7
         If Not((Length(7)=$80))
            HALFWAITING_DIALOG[DUENIX_CONFIG_ISNT_CONFIG$,OPERATION_ABORTED$,""]
         Else 
            _DECONFIG[Start(7),False]
            HALFWAITING_DIALOG["",DEF_CONFIG_LOADED$,""]
         End If 
      Else 
         HALFWAITING_DIALOG[CANT_FIND_DEF_CONFIG1$,CANT_FIND_DEF_CONFIG2$,""]
      End If 
   Else If WHAT=2
      '          ________________________________
      '         |                                | 
      '         | Other                          | 
      '         |________________________________| 
      
      Screen 1
      Show On 
      Change Mouse 1
      Trap A$=Fsel$(PATH$+"","",ENTER_CONFIGNAME$)
      Hide On 
      
      If Exist(A$)
         Trap Load A$,7
         If(Length(7)<>$80)
            HALFWAITING_DIALOG[THIS_FILE_ISNT_CONFIG$,OPERATION_ABORTED$,""]
         Else 
            _DECONFIG[Start(7),False]
            HALFWAITING_DIALOG["",CONFIG_LOADED$,""]
         End If 
      Else 
         HALFWAITING_DIALOG["",FILE_DOESNT_EXIST$,""]
      End If 
   End If 
   
   
   Erase 7
End Proc
Procedure _SAVE_CONFIGURATION[WHAT]
   If WHAT=0
      '          ________________________________
      '         |                                | 
      '         | Default                        | 
      '         |________________________________| 
      
      CONFIG_LENGTH=$80
      Reserve As Work 7,CONFIG_LENGTH
      CONFIG[Start(7),False]
      DUENIX_REQUEST
      Trap Save PATH$+"Config",7
      HALFWAITING_DIALOG[CONFIG_SAVED_AS_DEF1$,CONFIG_SAVED_AS_DEF2$,""]
      
   Else 
      '          ________________________________
      '         |                                | 
      '         | Other                          | 
      '         |________________________________| 
      
      CONFIG_LENGTH=$80
      Reserve As Work 7,CONFIG_LENGTH
      CONFIG[Start(7),False]
      
      Screen 1
      Show On 
      Change Mouse 1
      A$=Fsel$(PATH$+"","",ENTER_NAME_OF_CONFIG_TO_SAVE$)
      Hide On 
      If Exist(A$)
         _DIALOGBEG
         B$=THIS_FILE_ALREADY_EXISTS$ : Text 160-4*Len(B$),14*8+6,B$
         B$=WANT_TO_OVERWRITE$ : Text 160-4*Len(B$),15*8+6,B$
         Repeat 
            B$=Lower$(Inkey$)
         Until(B$="y") or(B$="n")
         _DIALOGEND
         
         If B$="y"
            Trap Save A$,7
            HALFWAITING_DIALOG["",CONFIG_SAVED$,""]
         Else 
            HALFWAITING_DIALOG["",CONFIG_NOT_SAVED$,""]
         End If 
      Else 
         Trap Save A$,7
         If A$="" : HALFWAITING_DIALOG["",CONFIG_NOT_SAVED$,""]
      Else : HALFWAITING_DIALOG["",CONFIG_SAVED$,""] : End If 
      End If 
   End If 
   
   Erase 7
End Proc

Procedure _DIALOGBEG
   Screen 1 : Get Block 1,0,104,320,50
   Screen 2 : Put Block 1,0,0 : Rem STORE UNDERDIALOG
   
   Paste Bob 0+32,104,BS_LEFT_TOP
   For I=1 To 14 : Paste Bob I*16+32,104,BS_MIDDLE_TOP : Next I
   Paste Bob 320-16-32,104,BS_RIGHT_TOP
   
   For J=1 To 3
      J_OFFSET=8*J
      Paste Bob 0+32,104+8*J,BS_LEFT_MIDDLE
      For I=1 To 14 : Paste Bob I*16+32,104+J_OFFSET,BS_MIDDLE_MIDDLE : Next I
      Paste Bob 320-16-32,104+8*J,BS_RIGHT_MIDDLE
   Next J
   
   Paste Bob 0+32,104+8*4,BS_LEFT_BOTTOM
   For I=1 To 14 : Paste Bob I*16+32,104+8*4,BS_MIDDLE_BOTTOM : Next I
   Paste Bob 320-16-32,104+8*4,BS_RIGHT_BOTTOM
   
   Get Block 1,0,104,320,50,1 : Screen 1
   Put Block 1,0,104
   Del Block 1
   
   Ink $11,$15
End Proc
Procedure _DIALOGEND
   Screen 2 : Get Block 1,0,0,320,50 : Screen 1
   Wait Vbl : Put Block 1,0,104
   Del Block 1
End Proc
Procedure HALFWAITING_DIALOG[HW_T1$,HW_T2$,HW_T3$]
   _DIALOGBEG
   Text 160-4*Len(HW_T1$),14*8+6,HW_T1$
   Text 160-4*Len(HW_T2$),15*8+6,HW_T2$
   Text 160-4*Len(HW_T3$),16*8+6,HW_T3$
   
   Wait 5 : Clear Key : Timer=0
   Repeat 
      A$=Inkey$
   Until A$<>"" or Timer>50*6
   Clear Key 
   _DIALOGEND
   Wait 10 : Clear Key 
End Proc

'             ______________________________________ 
'            |                                      \  
'            |  Options                              \ 
'            |________________________________________\        


Procedure MAKE_OPTIONS_BACKGROUND[PAGE_NUMBER$,PAGE_NAME$]
   
   Screen 1
   Cls 0
   Unpack PLAN_BANK(0)
   
   Screen 2
   Cls 0
   Paste Bob 35,1,DUENIX_TITLE_IMAGE
   
   WRITEXY[5,12,PAGE_NUMBER$]
   WRITEXY[316-6*Len(PAGE_NAME$),12,PAGE_NAME$]
   
End Proc
Procedure BOOL_OPTION[BO_SIGN,BO_I,BO_COLUMN]
   If BO_SIGN=0 Then IMAGE=NO_IMAGE(OS_LC_BOX(BO_I)) Else IMAGE=YES_IMAGE(OS_LC_BOX(BO_I))
   Paste Bob 152*BO_COLUMN+116+6,8*(2*BO_I+1)-4,IMAGE
End Proc
Procedure NUMBER_OPTION[NO_NUMBER,NO_NUMBER_SIZE,NO_HIGHLITE,NO_I,NO_COLUMN]
   Ink $13,$15
   If NO_HIGHLITE=_FALSE : Ink $16 : End If 
   
   A$=Str$(NO_NUMBER)-" " : A$=String$("0",NO_NUMBER_SIZE-Len(A$))+A$
   Text 152*NO_COLUMN+8*(19-NO_NUMBER_SIZE),8*(NO_I*2+1)+6,A$
End Proc
Procedure DEPENDENT_OPTION[DEO_SIGN,DEO_NUMBER,DEO_NUMBER_SIZE,DEO_YPOS,DEO_COLUMN]
   If DEO_SIGN=0 Then IMAGE=NO_IMAGE(OS_LC_BOX(DEO_YPOS)) Else IMAGE=YES_IMAGE(OS_LC_BOX(DEO_YPOS))
   Paste Bob 152*DEO_COLUMN+116+6,8*(2*DEO_YPOS+1)-4,IMAGE
   
   Ink $13,$15
   If DEO_SIGN=_FALSE : Ink $16 : End If 
   
   A$=Str$(DEO_NUMBER)-" " : A$=String$("0",DEO_NUMBER_SIZE-Len(A$))+A$
   Text 152*DEO_COLUMN+8*(19-DEO_NUMBER_SIZE),8*(DEO_YPOS*2+1+2)+6,A$
End Proc
Procedure _GET_3NUMBER[G3X,G3Y]
   Clear Key : Wait 5
   
   G3NUMBER=0
   G3C=100
   For I=0 To 2
      Ink $0,$13
      Text 8*(G3X+I),8*G3Y+6," "
      Ink $13,$15
      Repeat 
         A$=Inkey$
         A=Asc(A$)
      Until(A>47) and(A<58)
      Text 8*(G3X+I),8*G3Y+6,A$-" "
      Add G3NUMBER,G3C*(A-48)
      G3C=G3C/10
   Next I
End Proc[G3NUMBER]

Procedure OPTIONS_MAIN
   
   If _NOT(E_THRU or G_THRU or R_THRU)
      OPTIONS_MAIN_RESTORE_SCREEN
   End If 
   
   ESC_QUITED=False
   Clear Key 
   Repeat 
      If Key State(L_SCANCODE)
         _LOAD_CONFIGURATION[1] : Rem DEFAULT
      End If 
      If Key State(S_SCANCODE)
         _SAVE_CONFIGURATION[0] : Rem DEFAULT
      End If 
      If Key State(Z_SCANCODE)
         _LOAD_CONFIGURATION[2] : Rem OTHER
      End If 
      If Key State(X_SCANCODE)
         _SAVE_CONFIGURATION[1] : Rem OTHER
      End If 
      If Key State(E_SCANCODE) or E_THRU
         If Not E_THRU
            FAST_FADE_OUT
         End If 
         E_THRU=False
         OPTIONS_GAMESETTINGS
         If Not ESC_QUITED
            OPTIONS_GAMESETTINGS2
            If Not ESC_QUITED
               OPTIONS_MAIN_RESTORE_SCREEN
            End If 
         End If 
      End If 
      If Key State(G_SCANCODE) or G_THRU
         If Not G_THRU
            FAST_FADE_OUT
         End If 
         G_THRU=False
         OPTIONS_GAMEPLAN
         If Not ESC_QUITED
            OPTIONS_MAIN_RESTORE_SCREEN
         End If 
      End If 
      If Key State(R_SCANCODE) or R_THRU
         If Not R_THRU
            FAST_FADE_OUT
         End If 
         R_THRU=False
         OPTIONS_RECORD_AND_REPLAY
         If Not ESC_QUITED
            OPTIONS_MAIN_RESTORE_SCREEN
         End If 
      End If 
      If Key State(U_SCANCODE)
         FAST_FADE_OUT
         OPTIONS_USER_GAMESET
         If Not ESC_QUITED
            OPTIONS_MAIN_RESTORE_SCREEN
         End If 
      End If 
      
   Until Key State(SPACE_SCANCODE) or Key State(ESC_SCANCODE) or ESC_QUITED
   
   If Not ESC_QUITED
      If FAST_INTERFACE
         Palette 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
      Else 
         Fade 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
         Wait 15
      End If 
   End If 
   
End Proc
Procedure OPTIONS_MAIN_FADEUP
   If FAST_INTERFACE
      Wait Vbl 
      Palette $0,$1,$2,$3,$4,$15,$115,$116,$227,$228,$339,$33A,$459,$669,$779,$778,$F80,$EA0,$DC0,$CE0,$F01,$F20,$F50,$111,$81D,$A1D,$C2E,$E1E,$F0F,$F2F,$F4F,$F6F
      Wait 1
   Else 
      Fade 1,$0,$1,$2,$3,$4,$15,$115,$116,$227,$228,$339,$33A,$459,$669,$779,$778,$F80,$EA0,$DC0,$CE0,$F01,$F20,$F50,$111,$81D,$A1D,$C2E,$E1E,$F0F,$F2F,$F4F,$F6F
      Wait 15
   End If 
End Proc
Procedure OPTIONS_MAIN_RESTORE_SCREEN
   MAKE_OPTIONS_BACKGROUND[PAGE_ONE$,MAIN_OPTION_LOADING_AND_SAVING$]
   
   WRITEXY[-2,8*17-16,CONFIGURATION$]
   
   For I=6 To 9
      WRITEXY[-2,(I+3)*12+7*8-16,MAIN_OPTION_TEXT$(I-6)]
   Next I
   
   WRITEXY[-2,6*8,MAIN_OPTION_E_TEXT$]
   WRITEXY[-2,6*8+12,MAIN_OPTION_G_TEXT$]
   WRITEXY[-2,6*8+24,MAIN_OPTION_R_TEXT$]
   WRITEXY[-2,6*8+36,MAIN_OPTION_U_TEXT$]
   WRITEXY[-2,27*8,_PRESS_SPACE_OR_ESCAPE$]
   WRITEXY[-2,29*8,ESCAPE_ACCEPT$]

   LET_IT_SHOW
   Screen 1
   OPTIONS_MAIN_FADEUP
End Proc

Procedure OPTIONS_USER_GAMESET
   '          ________________________________
   '         |                                | 
   '         | Print                          | 
   '         |________________________________| 
   
   
   MAKE_OPTIONS_BACKGROUND[PAGE_FIVE$,CREATING_USER_GAMESET$]
   
   WRITEXY[-2,32,CREATE_USER_GAMESET$]
   
   SFX=0 : COORDY=50
   For I=0 To 13
      WRITEXY[0,COORDY,CREATE_USER_GS_EXPLANATION$(I)]
      Add COORDY,9
   Next 
   
   WRITEXY[-2,29*8,RECORD_AND_REPLAY_SPACE$]
   LET_IT_SHOW
   Screen 1
   If FAST_INTERFACE
      Wait Vbl 
      Palette $0,$1,$2,$3,$4,$15,$115,$116,$227,$228,$339,$33A,$459,$669,$779,$778,$F80,$EA0,$DC0,$CE0,$F01,$F20,$F50,$111,$664,$775,$887,$998,$AAA,$BBB,$CCC,$DDD
      Wait 1
   Else 
      Fade 1,$0,$1,$2,$3,$4,$15,$115,$116,$227,$228,$339,$33A,$459,$669,$779,$778,$F80,$EA0,$DC0,$CE0,$F01,$F20,$F50,$111,$664,$775,$887,$998,$AAA,$BBB,$CCC,$DDD
      Wait 15
   End If 
   
   
   '          ________________________________
   '         |                                | 
   '         | Key control                    | 
   '         |________________________________| 
   
   
   ESC_QUITED=False
   Clear Key 
   Repeat 
      If Key State(C_SCANCODE)
         Screen 1
         Show On 
         Change Mouse 1
         Trap A$=Fsel$("","",ENTER_NAME_OF_CONFIG_LIST_FILE$)
         Hide On 
         If Not Exist(A$)
            HALFWAITING_DIALOG["",FILE_DOESNT_EXIST$,""]
         Else 
            CREATE_GAMESET[USER_GAMESET__BANK,A$]
            CONFIGS=Param
            If CONFIGS=0
               HALFWAITING_DIALOG[NONE_OF_FILES_WAS_CONFIG1$,"",NONE_OF_FILES_WAS_CONFIG2$]
            Else If CONFIGS>20
               Trap Save PATH$+"User_gameset",USER_GAMESET__BANK
               HALFWAITING_DIALOG[YOUR_NEW_GAMESET_IS_SAVED$,MORE_THAN_20_FILES1$,MORE_THAN_20_FILES2$]
            Else 
               Trap Save PATH$+"User_gameset",USER_GAMESET__BANK
               HALFWAITING_DIALOG["",YOUR_NEW_GAMESET_IS_SAVED$,""]
            End If 
         End If 
         
         If Length(USER_GAMESET__BANK)>0
            BASE=Start(USER_GAMESET__BANK)
            For I=0 To 19
               OFFSET=Deek(BASE+2*I)
               If OFFSET=0
                  GS_GAME_NAME$(I,1)=NAME_OF_EMPTY_GAME_IN_GAMESET$
               Else 
                  GS_GAME_NAME$(I,1)=Peek$(BASE+OFFSET,16)
               End If 
            Next I
         End If 
         
      End If 
      ESC_QUITED=Key State(ESC_SCANCODE)
   Until Key State(SPACE_SCANCODE) or ESC_QUITED
   
   FAST_FADE_OUT
   
End Proc

Procedure OPTIONS_RECORD_AND_REPLAY
   '          ________________________________
   '         |                                | 
   '         | Print                          | 
   '         |________________________________| 
   
   MAKE_OPTIONS_BACKGROUND[PAGE_FOUR$,RECORD_AND_REPLAY$]
   
   For I=0 To 2 : WRITEXY[5,(I+1)*16+8,RR_COLUMN_TEXT$(I)] : Next 
   
   WRITEXY[-2,29*8,RECORD_AND_REPLAY_SPACE$]
   
   For I=1 To 3
      Paste Bob 122,16*I+4,RED_BOX_IMAGE(OS_LC_BOX(I))
   Next I
   
   BOOL_OPTION[USER_RECORDING,1,0]
   BOOL_OPTION[USER_REPLAYING,2,0]
   BOOL_OPTION[REPLAY_ALL_SAVED_ON,3,0]
   
   LET_IT_SHOW
   Screen 1
   
   If FAST_INTERFACE
      Wait Vbl 
      Palette $0,$1,$2,$3,$4,$15,$115,$116,$227,$228,$339,$33A,$459,$669,$779,$778,$F80,$EA0,$DC0,$CE0,$F01,$F20,$F50,$111,$81D,$A1D,$C2E,$E1E,$F0F,$F2F,$F4F,$F6F
      Wait 1
   Else 
      Fade 1,$0,$1,$2,$3,$4,$15,$115,$116,$227,$228,$339,$33A,$459,$669,$779,$778,$F80,$EA0,$DC0,$CE0,$F01,$F20,$F50,$111,$81D,$A1D,$C2E,$E1E,$F0F,$F2F,$F4F,$F6F
      Wait 15
   End If 
   
   '          ________________________________
   '         |                                | 
   '         | Key control                    | 
   '         |________________________________| 
   
   
   ESC_QUITED=_FALSE : Clear Key 
   Repeat 
      If Key State(R_SCANCODE)
         USER_RECORDING= Not USER_RECORDING
         Wait Vbl 
         BOOL_OPTION[USER_RECORDING,1,0]
         If USER_REPLAYING
            USER_REPLAYING=False
            BOOL_OPTION[USER_REPLAYING,2,0]
         Else If REPLAY_ALL_SAVED_ON
            REPLAY_ALL_SAVED_ON=False
            BOOL_OPTION[REPLAY_ALL_SAVED_ON,3,0]
         End If 
         Clear Key : Wait 10
      End If 
      If Key State(P_SCANCODE)
         Wait Vbl 
         If Not USER_REPLAYING
            If GAME_RECORD_EMPTY
               HALFWAITING_DIALOG[YOU_HAVENT_RECORDED1$,YOU_HAVENT_RECORDED2$,YOU_HAVENT_RECORDED3$]
            Else 
               USER_REPLAYING=True
               BOOL_OPTION[USER_REPLAYING,2,0]
               If USER_RECORDING
                  USER_RECORDING=False
                  BOOL_OPTION[USER_RECORDING,1,0]
               Else If REPLAY_ALL_SAVED_ON
                  REPLAY_ALL_SAVED_ON=False
                  BOOL_OPTION[REPLAY_ALL_SAVED_ON,3,0]
               End If 
            End If 
         Else 
            USER_REPLAYING=False
            BOOL_OPTION[USER_REPLAYING,2,0]
         End If 
         Clear Key : Wait 10
      End If 
      If Key State(A_SCANCODE)
         
         If Not REPLAY_ALL_SAVED_ON
            
            _EXISTS_INDEX=True
            If Exist("Duenrecord:")
               GAME_SAVING_PATH$="DuenRecord:"
            Else 
               If Not Exist("ram:DuenRecord/")
                  _EXISTS_INDEX=False
               End If 
               GAME_SAVING_PATH$="ram:DuenRecord/"
            End If 
            
            If _EXISTS_INDEX
               INDEX=0
               _EXISTS_INDEX=False
               Repeat 
                  INDEX$=Str$(INDEX)-" " : INDEX$=String$("0",2-Len(INDEX$))+INDEX$
                  If Exist(GAME_SAVING_PATH$+RECORDNAME$+INDEX$)
                     _EXISTS_INDEX=True
                  End If 
                  Inc INDEX
               Until _EXISTS_INDEX or(INDEX=100)
               Dec INDEX
            End If 
            
            If _EXISTS_INDEX
               REPLAY_ALL_SAVED_ON= Not REPLAY_ALL_SAVED_ON
               Wait Vbl 
               BOOL_OPTION[REPLAY_ALL_SAVED_ON,3,0]
               If USER_RECORDING
                  USER_RECORDING=False
                  BOOL_OPTION[USER_RECORDING,1,0]
               Else If USER_REPLAYING
                  USER_REPLAYING=False
                  BOOL_OPTION[USER_REPLAYING,2,0]
               End If 
            Else 
               HALFWAITING_DIALOG[YOU_HAVENT_SAVED_GAME1$,YOU_HAVENT_SAVED_GAME2$,YOU_HAVENT_SAVED_GAME3$]
            End If 
         Else 
            REPLAY_ALL_SAVED_ON= Not REPLAY_ALL_SAVED_ON
            Wait Vbl 
            BOOL_OPTION[REPLAY_ALL_SAVED_ON,3,0]
         End If 
         Clear Key : Wait 10
      End If 
      
      ESC_QUITED=Key State(ESC_SCANCODE)
   Until Key State(SPACE_SCANCODE) or ESC_QUITED
   
   FAST_FADE_OUT
End Proc

Procedure OPTIONS_GAMESETTINGS
   '          ________________________________
   '         |                                | 
   '         | Print                          | 
   '         |________________________________| 
   
   
   MAKE_OPTIONS_BACKGROUND[PAGE_TWO$,GAME_SETTINGS$]
   
   For I=1 To 14
      WRITEXY[8,I*16+8,OS_LEFT_COLUMN_TEXT$(I,0)]
      Paste Bob 116+6,16*I+4,RED_BOX_IMAGE(OS_LC_BOX(I))
      WRITEXY[8*21,I*16+8,OS_RIGHT_COLUMN_TEXT$(I,0)]
      Paste Bob 152+116+6,16*I+4,RED_BOX_IMAGE(OS_RC_BOX(I))
   Next 
   
   Wait Vbl 
   NUMBER_OPTION[USER_DIRECTIONS,3,_TRUE,1,0]
   NUMBER_OPTION[SPEEDJUMP,2,_TRUE,2,0]
   NUMBER_OPTION[SPACE_LENGTH,3,_TRUE,3,0]
   NUMBER_OPTION[_DRAWING_LINE_LENGTH,3,_TRUE,4,0]
   DEPENDENT_OPTION[RATEMODE,USER_RATE_LENGTH,3,5,0]
   NUMBER_OPTION[FINAL_RATE,3,_TRUE,7,0]
   BOOL_OPTION[SPACE_KILL,8,0]
   BOOL_OPTION[BOUNCING,9,0]
   BOOL_OPTION[TELEPORTING,10,0]
   DEPENDENT_OPTION[WATERING,WATER_LIMIT,3,11,0]
   BOOL_OPTION[_MUSIC_ON,13,0]
   BOOL_OPTION[USER_SOUND_FX,14,0]
   
   BOOL_OPTION[TURBO,1,1]
   BOOL_OPTION[COMPUTURBO,2,1]
   DEPENDENT_OPTION[CENTRAL_BOX,CENTRAL_BOX_SIZE,3,3,1]
   BOOL_OPTION[ALWAYS_TURNING,5,1]
   BOOL_OPTION[1-BOLDLINE,6,1]
   DEPENDENT_OPTION[BODY_CHANGE,BODY_CHANGE_PERCENT,2,7,1]
   BOOL_OPTION[TEAM_GAME,9,1]
   BOOL_OPTION[LONG_GAME,10,1]
   BOOL_OPTION[SURPRISING_START,11,1]
   DEPENDENT_OPTION[WIND,WIND_STRENGTH,2,12,1]
   NUMBER_OPTION[_SCREEN_SIZE+1,1,_TRUE,14,1]
   
   LET_IT_SHOW
   Screen 1
   OPTIONS_GAMESETTINGS_FADE_UP
   
   '          ________________________________
   '         |                                | 
   '         | Key control                    | 
   '         |________________________________| 
   
   
   
   ESC_QUITED=_FALSE : Clear Key 
   Repeat 
      If Key State(1)
         _GET_3NUMBER[16,3] : USER_DIRECTIONS=Param
         If USER_DIRECTIONS<5
            USER_DIRECTIONS=5
            HALFWAITING_DIALOG[_MINIMUM_OF_DIRECTIONS$,SORRY$,""]
         Else If USER_DIRECTIONS>250
            USER_DIRECTIONS=250
            HALFWAITING_DIALOG[_MAXIMUM_OF_DIRECTIONS$,SORRY$,""]
         End If 
         
         SMERU=USER_DIRECTIONS*4
         ANGLE_CONSTANT#=2*Pi#/SMERU
         SMERU_QUARTER=USER_DIRECTIONS
         SMERU_HALVE=USER_DIRECTIONS*2
         
         NUMBER_OPTION[USER_DIRECTIONS,3,_TRUE,1,0]
         Wait 10
      Else If Key State(2)
         Add SPEEDJUMP,5,0 To 95
         NUMBER_OPTION[SPEEDJUMP,2,_TRUE,2,0]
         Wait 10
      Else If Key State(3)
         _GET_3NUMBER[16,7] : SPACE_LENGTH=Param
         LINE_LENGTH=SPACE_LENGTH+_DRAWING_LINE_LENGTH+20
         Wait 10
      Else If Key State(4)
         _GET_3NUMBER[16,9] : _DRAWING_LINE_LENGTH=Param
         LINE_LENGTH=SPACE_LENGTH+_DRAWING_LINE_LENGTH+20
         Wait 10
      Else If Key State(5)
         RATEMODE=1-RATEMODE
         DEPENDENT_OPTION[RATEMODE,USER_RATE_LENGTH,3,5,0]
         Wait 10
      Else If Key State(6) and(RATEMODE=1)
         _GET_3NUMBER[16,13] : USER_RATE_LENGTH=Param
         Wait 10
      Else If Key State(7)
         Add FINAL_RATE,5,50 To 100
         NUMBER_OPTION[FINAL_RATE,3,_TRUE,7,0]
         Wait 10
      Else If Key State(8)
         SPACE_KILL=1-SPACE_KILL
         BOOL_OPTION[SPACE_KILL,8,0]
         Wait 10
      Else If Key State(9)
         BOUNCING=1-BOUNCING
         If BOUNCING
            TELEPORTING=0
            WATERING=0
            BOOL_OPTION[TELEPORTING,10,0]
            DEPENDENT_OPTION[WATERING,WATER_LIMIT,3,11,0]
         End If 
         BOOL_OPTION[BOUNCING,9,0]
         Wait 10
      Else If Key State(O_SCANCODE)
         TELEPORTING=1-TELEPORTING
         If TELEPORTING
            BOUNCING=0
            WATERING=0
            BOOL_OPTION[BOUNCING,9,0]
            DEPENDENT_OPTION[WATERING,WATER_LIMIT,3,11,0]
         End If 
         BOOL_OPTION[TELEPORTING,10,0]
         Wait 10
      Else If Key State(P_SCANCODE)
         '~~~ Change of watering 0/1) ~~~ 
         WATERING=WATERING xor 1
         If WATERING=1
            BOUNCING=0
            TELEPORTING=0
            BOOL_OPTION[BOUNCING,9,0]
            BOOL_OPTION[TELEPORTING,10,0]
         End If 
         
         DEPENDENT_OPTION[WATERING,WATER_LIMIT,3,11,0]
         Wait 10
      Else If Key State(Q_SCANCODE) and(WATERING=1)
         _GET_3NUMBER[16,25]
         WATER_LIMIT=Param
         If WATER_LIMIT>=90
            WATER_LIMIT=89
            
            DEPENDENT_OPTION[WATERING,WATER_LIMIT,3,11,0]
            
            HALFWAITING_DIALOG[_MAXIMUM_OF_WATER_ANGLE$,SORRY$,""]
         End If 
         WATER_LIMIT#=WATER_LIMIT*Pi#/180
         Clear Key 
         Wait 5
      Else If Key State(R_SCANCODE)
         _MUSIC_ON=_NOT(_MUSIC_ON)
         If _MUSIC_ON : Track Play LIFE_MOTION_MUSIC__BANK
      Else : Track Stop : End If 
         
         BOOL_OPTION[_MUSIC_ON,13,0]
         Wait 10
      Else If Key State(S_SCANCODE)
         USER_SOUND_FX=_NOT(USER_SOUND_FX)
         BOOL_OPTION[USER_SOUND_FX,14,0]
         Wait 10
      Else If Key State(A_SCANCODE)
         TURBO=_NOT(TURBO)
         If TURBO : COMPUTURBO=_FALSE : End If 
         BOOL_OPTION[TURBO,1,1]
         BOOL_OPTION[COMPUTURBO,2,1]
         Wait 10
      Else If Key State(B_SCANCODE)
         COMPUTURBO=_NOT(COMPUTURBO)
         If COMPUTURBO : TURBO=_FALSE : End If 
         BOOL_OPTION[TURBO,1,1]
         BOOL_OPTION[COMPUTURBO,2,1]
         Wait 10
      Else If Key State(C_SCANCODE)
         CENTRAL_BOX=_NOT(CENTRAL_BOX)
         DEPENDENT_OPTION[CENTRAL_BOX,CENTRAL_BOX_SIZE,3,3,1]
         Wait 10
      Else If Key State(D_SCANCODE) and CENTRAL_BOX
         Add CENTRAL_BOX_SIZE,5,10 To 80
         DEPENDENT_OPTION[CENTRAL_BOX,CENTRAL_BOX_SIZE,3,3,1]
         Wait 10
      Else If Key State(E_SCANCODE)
         ALWAYS_TURNING=_NOT(ALWAYS_TURNING)
         BOOL_OPTION[ALWAYS_TURNING,5,1]
         Wait 10
      Else If Key State(F_SCANCODE)
         BOLDLINE=_NOT(BOLDLINE)
         SET_APPROPRIATE_DRAWPIXEL_PROC
         BOOL_OPTION[_NOT(BOLDLINE),6,1]
         Wait 10
      Else If Key State(G_SCANCODE)
         BODY_CHANGE=1-BODY_CHANGE
         DEPENDENT_OPTION[BODY_CHANGE,BODY_CHANGE_PERCENT,3,7,1]
         Wait 10
      Else If Key State(H_SCANCODE) and BODY_CHANGE
         Add BODY_CHANGE_PERCENT,20,20 To 120
         DEPENDENT_OPTION[BODY_CHANGE,BODY_CHANGE_PERCENT,3,7,1]
         Wait 5
      Else If Key State(I_SCANCODE)
         TEAM_GAME= Not TEAM_GAME
         BOOL_OPTION[TEAM_GAME,9,1]
         Wait 10
      Else If Key State(J_SCANCODE)
         LONG_GAME=1-LONG_GAME
         BOOL_OPTION[LONG_GAME,10,1]
         Wait 10
      Else If Key State(K_SCANCODE)
         SURPRISING_START=_NOT(SURPRISING_START)
         BOOL_OPTION[SURPRISING_START,11,1]
         Wait 10
      Else If Key State(L_SCANCODE)
         WIND=_NOT(WIND)
         DEPENDENT_OPTION[WIND,WIND_STRENGTH,2,12,1]
         Wait 10
      Else If Key State(M_SCANCODE)
         Add WIND_STRENGTH,1,1 To 10
         DEPENDENT_OPTION[WIND,WIND_STRENGTH,2,12,1]
         Wait 10
      Else If Key State(N_SCANCODE)
         Add _SCREEN_SIZE,1,0 To 2
         SET_APPROPRIATE_DRAWPIXEL_PROC
         NUMBER_OPTION[_SCREEN_SIZE+1,1,_TRUE,14,1]
         Wait 10
      End If 
      
      ESC_QUITED=Key State(ESC_SCANCODE)
   Until Key State(SPACE_SCANCODE) or ESC_QUITED
   
   FAST_FADE_OUT
End Proc
Procedure OPTIONS_GAMESETTINGS2
   '          ________________________________
   '         |                                | 
   '         | Print                          | 
   '         |________________________________| 
   
   MAKE_OPTIONS_BACKGROUND[PAGE_TWO$,GAME_SETTINGS$]
   
   For I=1 To 1
      WRITEXY[8,I*16+8,OS_LEFT_COLUMN_TEXT$(I,1)]
      Paste Bob 116+6,16*I+4,RED_BOX_IMAGE(OS_LC_BOX(I))
      WRITEXY[8*21,I*16+8,OS_RIGHT_COLUMN_TEXT$(I,1)]
      Paste Bob 152+116+6,16*I+4,RED_BOX_IMAGE(OS_RC_BOX(I))
   Next 
   
   BOOL_OPTION[COMPUDEATH,1,0]
   BOOL_OPTION[ZOMBIES,1,1]
   
   LET_IT_SHOW
   Screen 1
   OPTIONS_GAMESETTINGS_FADE_UP
   
   '          ________________________________
   '         |                                | 
   '         | Key control                    | 
   '         |________________________________| 
   
   
   ESC_QUITED=_FALSE : Clear Key 
   Repeat 
      If Key State(1)
         COMPUDEATH=1-COMPUDEATH
         BOOL_OPTION[COMPUDEATH,1,0]
         Wait 10
      End If 
      If Key State(A_SCANCODE)
         ZOMBIES=1-ZOMBIES
         BOOL_OPTION[ZOMBIES,1,1]
         Wait 10
      End If 
      
      ESC_QUITED=Key State(ESC_SCANCODE)
   Until Key State(SPACE_SCANCODE) or ESC_QUITED
   
   FAST_FADE_OUT
End Proc
Procedure OPTIONS_GAMESETTINGS_FADE_UP
   If FAST_INTERFACE
      Palette $0,$1,$2,$3,$4,$15,$115,$116,$227,$228,$339,$33A,$459,$669,$779,$778,$F80,$EA0,$DC0,$CE0,$F01,$F20,$F50,$122,$177,$196,$2A7,$1B6,$B5,$2C4,$4D3,$6E2
   Else 
      '      Fade 1,$0,$1,$2,$3,$4,$15,$115,$116,$227,$228,$339,$33A,$459,$669,$779,$778,$F80,$EA0,$DC0,$CE0,$F01,$F20,$F50,$122,$177,$196,$2A7,$1B6,$B5,$2C4,$4D3,$6E2
      Fade 1,$10,$10,$121,$121,$232,$232,$343,$343,$454,$454,$565,$565,$676,$676,$787,$787,$F80,$EA0,$DC0,$CE0,$F01,$F20,$F50,$122,$177,$196,$2A7,$1B6,$B5,$2C4,$4D3,$6E2
      
      ' PALETTE VER 1.1      Fade 1,$0,$1,$2,$3,$4,$15,$115,$116,$227,$228,$339,$33A,$459,$669,$779,$778,$F80,$EA0,$DC0,$CE0,$F01,$F20,$F50,$122,$177,$196,$2A7,$1B6,$B5,$2C4,$4D3,$6E2
      Wait 15
   End If 
End Proc

Procedure OPTIONS_GAMEPLAN

   OPTIONS_GAMEPLAN_RESTORE_SCREEN
   
   ESC_QUITED=False
   Clear Key 
   Repeat 
      If Key State(D_SCANCODE) and(PLAN>0)
         PLAN=0
         FAST_FADE_OUT
         OPTIONS_GAMEPLAN_RESTORE_SCREEN
      Else If Key State(Y_SCANCODE) and(PLAN<2)
         PLAN=2
         FAST_FADE_OUT
         OPTIONS_GAMEPLAN_RESTORE_SCREEN
      Else If Key State(L_SCANCODE) and(PLAN=2)
         Screen 1
         Show On 
         Change Mouse 1
         Trap A$=Fsel$("","",ENTER_NAME_OFF_IFF_TO_LOAD$)
         Hide On 
         OWN_PLAN_LOAD[A$,True]
      End If 
      
      For I=1 To 6
         If Key State(I) and((GAMEPLAN<>I) or(PLAN<>1))
            GAMEPLAN=I
            SET_SPP
            PLAN=1
            DUENIX_REQUEST
            Trap Load PATH$+"Plan"+Str$(GAMEPLAN)-" ",PLAN_BANK(1)
            FAST_FADE_OUT
            OPTIONS_GAMEPLAN_RESTORE_SCREEN
         End If 
      Next 
      
      ESC_QUITED=Key State(ESC_SCANCODE)
   Until Key State(SPACE_SCANCODE) or ESC_QUITED
   
   FAST_FADE_OUT
End Proc
Procedure OPTIONS_GAMEPLAN_RESTORE_SCREEN
   Screen 1
   If Length(PLAN_BANK(PLAN))>0
      Unpack PLAN_BANK(PLAN)
   Else 
      Cls 0
   End If 
   
   Screen 2
   Cls 0
   Paste Bob 35,0,DUENIX_TITLE_IMAGE
   WRITEXY[5,12,PAGE_THREE$]
   WRITEXY[316-6*Len(GAMEPLAN$),12,GAMEPLAN$]
   
   Pen $14
   
   If PLAN=1
      WRITEXY[8,4*8,THIS_IS_STANDARD_GAMEPLAN_NUMBER$+Str$(GAMEPLAN)]
   Else If PLAN=2
      If Length(PLAN_BANK(2))=0
         A$=HERE_MAY_BE_YOUR_PLAN$
      Else 
         A$=HERE_IS_YOUR_PLAN$
      End If 
      WRITEXY[8,4*8,A$+"\"]
      
      WRITEXY[1*8,11*8,GAMEPLAN_L_TEXT$+"\"]
      Add SFY,20
      For I=0 To 2 : WRITEXY[-1,-1,GAMEPLAN_EXPLANATION$(I)+"\"] : Next 
   Else 
      WRITEXY[8,4*8,THIS_IS_DEFPLAN$]
   End If 
   
   SFY=180
   For I=0 To 2 : WRITEXY[10,-1,GAMEPLAN_KEY_TEXT$(I)+"\"] : Next 
   
   WRITEXY[-2,29*8,RECORD_AND_REPLAY_SPACE$]

   LET_IT_SHOW
   Screen 1

   Wait Vbl 
   If FAST_INTERFACE
      If PLAN=0
         Palette $0,$1,$2,$3,$4,$15,$115,$116,$227,$228,$339,$33A,$459,$669,$779,$778,0,$E7D,$DD,$D42,$88F,$953,$F0F,$0,$D15,$E26,$E37,$F48,$F59,$F6A,$F7B,$F8C
      Else If PLAN=2
         Palette 0,UPP(1),UPP(2),UPP(3),UPP(4),UPP(5),UPP(6),UPP(7),UPP(8),UPP(9),UPP(10),UPP(11),UPP(12),UPP(13),UPP(14),UPP(15),0,$E7D,$DD,$D42,$88F,$953,$F0F,$0,$D15,$E26,$E37,$F48,$F59,$F6A,$F7B,$F8C
      Else 
         Palette 0,SPP(1),SPP(2),SPP(3),SPP(4),SPP(5),SPP(6),SPP(7),SPP(8),SPP(9),SPP(10),SPP(11),SPP(12),SPP(13),SPP(14),SPP(15),0,$E7D,$DD,$D42,$88F,$953,$F0F,$0,$D15,$E26,$E37,$F48,$F59,$F6A,$F7B,$F8C
      End If 
      Clear Key : Wait 1
   Else 
      If PLAN=0
         Fade 1,$0,$1,$2,$3,$4,$15,$115,$116,$227,$228,$339,$33A,$459,$669,$779,$778,0,$E7D,$DD,$D42,$88F,$953,$F0F,$0,$D15,$E26,$E37,$F48,$F59,$F6A,$F7B,$F8C
      Else If PLAN=2
         Fade 1,UPP(0),UPP(1),UPP(2),UPP(3),UPP(4),UPP(5),UPP(6),UPP(7),UPP(8),UPP(9),UPP(10),UPP(11),UPP(12),UPP(13),UPP(14),UPP(15),0,$E7D,$DD,$D42,$88F,$953,$F0F,$0,$D15,$E26,$E37,$F48,$F59,$F6A,$F7B,$F8C
      Else If DARK_GAMEPLAN=0
         Fade 1,0,SPP(1),SPP(2),SPP(3),SPP(4),SPP(5),SPP(6),SPP(7),SPP(8),SPP(9),SPP(10),SPP(11),SPP(12),SPP(13),SPP(14),SPP(15),0,$E7D,$DD,$D42,$88F,$953,$F0F,$0,$D15,$E26,$E37,$F48,$F59,$F6A,$F7B,$F8C
      End If 
      Wait 15
   End If 


End Proc

Procedure OWN_PLAN_LOAD[FILE$,OP_INTERACTIVE]
   Screen 2
   Trap Load Iff FILE$
   If Errtrap=0
      BASE=Phybase(4)
      Fill BASE To BASE+10239,0
      For I=0 To $F
         UPP(I)=Colour(I)
      Next I
      
      Screen 1
      If OP_INTERACTIVE
         FAST_FADE_OUT
      End If 
      Screen Copy 2 To 1
      
      Pack 1 To PLAN_BANK(2)
      If OP_INTERACTIVE
         OPTIONS_GAMEPLAN_RESTORE_SCREEN
      End If 
      OWN_PLAN_PATH$=FILE$
   Else 
      OWN_PLAN_PATH$=""
   End If 
End Proc


'             ______________________________________ 
'            |                                      \  
'            |  Selecting and Gameset work           \ 
'            |________________________________________\        


Procedure SELECTING_FADE_UP
   
   '   Fade 1,$0,$0,$110,$110,$221,$221,$332,$332,$443,$443,$554,$554,$665,$665,$776,$776,0,PL_DEF_COLOR(1),PL_DEF_COLOR(2),PL_DEF_COLOR(3),PL_DEF_COLOR(4),PL_DEF_COLOR(5),PL_DEF_COLOR(6),$0,$811,$931,$A41,$B51,$C61,$D81,$EA1,$FC2
   '   Fade 1,$0,$0,$110,$110,$221,$221,$332,$332,$443,$443,$554,$554,$665,$665,$776,$776,0,PL_DEF_COLOR(1),PL_DEF_COLOR(2),PL_DEF_COLOR(3),PL_DEF_COLOR(4),PL_DEF_COLOR(5),PL_DEF_COLOR(6),$0,$822,$942,$A52,$B62,$C72,$D92,$EB2,$FD3
   Fade 1,$0,$110,$221,$332,$443,$554,$665,$776,$822,$942,$A52,$B62,$C72,$D92,$EB2,$FD3,$0,PL_DEF_COLOR(1),PL_DEF_COLOR(2),PL_DEF_COLOR(3),PL_DEF_COLOR(4),PL_DEF_COLOR(5),PL_DEF_COLOR(6),$0,$832,$942,$A43,$B53,$C54,$D64,$E75,$F76
   
   
   
   'PALETTE Ver 1.1   Fade 1,$0,$1,$2,$3,$4,$15,$115,$116,$227,$228,$339,$33A,$459,$669,$779,$778,0,PL_DEF_COLOR(1),PL_DEF_COLOR(2),PL_DEF_COLOR(3),PL_DEF_COLOR(4),PL_DEF_COLOR(5),PL_DEF_COLOR(6),$0,$915,$A26,$B37,$C48,$D59,$E6A,$F7B,$F8C  
   '   Fade 1,$0,$1,$2,$3,$112,$114,$116,$118,$333,$335,$337,$339,$555,$558,$55C,$55F,0,$BB9,$D4,$F6E,$FD0,$98F,$DC,$0,$915,$A26,$B37,$C48,$D59,$E6A,$F7B,$F8C
   Wait 15
End Proc
Procedure SELECTING_PRINT[CLEAR_SCREEN_1]
   
   If CLEAR_SCREEN_1
      Screen 2
      Sprite Off 
      Screen 1
      Unpack PLAN_BANK(0)
      
      P0=Phybase(0) : P1=Phybase(1) : P2=Phybase(2) : P3=Phybase(3)
      Copy P1,P1+10240-1 To P0
      Copy P2,P2+10240-1 To P1
      Copy P3,P3+10240-1 To P2
      Fill P3 To P3+10240-1,0
   End If 
   
   Screen 2
   Cls 0 : Paper 0 : Pen $18
   Paste Bob 35,1+3,DUENIX_TITLE_IMAGE
   Paste Bob 255,1,DUENIX_ANIM_IMAGE
   '   Wait Vbl 
   
   '          ________________________________
   '         |                                | 
   '         | Print Fajfky and Lives         | 
   '         |________________________________| 
   
   For _PLAYER=1 To 6
      Ink $10+_PLAYER,0
      Bar 33*8-6,3*8*_PLAYER+10 To 33*8+25,24*_PLAYER+16+10
      Paste Bob 33*8-8,24*_PLAYER+10,_PLAYER_TYPE_IMAGE(_PLAYER_TYPE(_PLAYER))
      
      If _TOP_LIVES(_PLAYER)>0
         Ink $10+_PLAYER,1
         Text 33*8+42,24*_PLAYER+22,Str$(_TOP_LIVES(_PLAYER))-" "
      End If 
   Next _PLAYER
   
   If CLEAR_SCREEN_1=0
      Screen 1 : Put Block 1 : Screen 2
   End If 
   
   '          ________________________________
   '         |                                | 
   '         | Print Player Texts             | 
   '         |________________________________| 
   
   For I=1 To 6
      A$=SELECTING_UPPER_TEXT$(I-1)
      Ink $17 : Text 1,8*(3*I+2)+6,A$
      Get Sprite _FREE_FOR_MANIPULATION_IMAGE,1,8*(3*I+2) To 8*Len(A$),8*(3*I+2)+8
      Screen 1
      Paste Bob 1,8*(3*I+2)+1,_FREE_FOR_MANIPULATION_IMAGE
      Paste Bob 2,8*(3*I+2),_FREE_FOR_MANIPULATION_IMAGE
      Paste Bob 1,8*(3*I+2)-1,_FREE_FOR_MANIPULATION_IMAGE
      Paste Bob 0,8*(3*I+2),_FREE_FOR_MANIPULATION_IMAGE
      Paste Bob 1,8*(3*I+2)+5,_FREE_FOR_MANIPULATION_IMAGE
      Paste Bob 1,8*(3*I+2)+6,_FREE_FOR_MANIPULATION_IMAGE
      Screen 2
      
      Ink $17
      If I=5
         Box 245,24*5+20+3 To 250,24*5+20+3
         Box 198-2*8,24*5+20+3 To 200,24*5+20+3
      Else If I=3
         Box 245,24*3+20+3 To 250,24*3+20+3
         Box Len(A$)*8+6,24*3+20+3 To 220,24*3+20+3
      Else 
         Box Len(A$)*8+6,24*I+20+3 To 250,24*I+20+3
      End If 
      
      Ink $10+I
      If I=5
         Draw 245,24*5+20 To 250,24*5+20
         Draw 198-2*8,24*5+20 To 200,24*5+20
      Else If I=3
         Draw 245,24*3+20 To 250,24*3+20
         Draw Len(A$)*8+6,24*3+20 To 220,24*3+20
      Else 
         Draw Len(A$)*8+6,24*I+20 To 250,24*I+20
      End If 
      
      Text 1,8*(3*I+2)+6,A$
   Next 
   
   '          ________________________________
   '         |                                | 
   '         | Draw Mouse & Joy               | 
   '         |________________________________| 
   
   Paste Bob 200,130,MOUSE_ON_LINE_IMAGE
   Paste Bob 200,82,_JOY_ON_LINE_IMAGE
   
   '          ________________________________
   '         |                                | 
   '         | Other Texts                    | 
   '         |________________________________| 
   
   LET_IT_SHOW
   
   If CLEAR_SCREEN_1
      Screen 1
      WRITEXY[-2,178,SELECTING_LOWER_TEXT$(0)]
      WRITEXY[-2,188,SELECTING_LOWER_TEXT$(1)]
      WRITEXY[-2,198,SELECTING_LOWER_TEXT$(2)]
      WRITEXY[-2,208,SELECTING_LOWER_TEXT$(3)]
      WRITEXY[-2,228,SELECTING_LOWER_TEXT$(4)]
      WRITEXY[-2,247,SELECTING_LOWER_TEXT$(5)+YEAR$]
   End If 
   Screen 2
End Proc
Procedure SELECTING
   SELECTING_RESTORE_SCREEN
   
   For _PLAYER=1 To 6
      ACCEPT_KEYSTROKE(_PLAYER)=_TRUE
      _KEYSTROKE_COUNTER(_PLAYER)=0
   Next _PLAYER
   
   LAST_CHANGED_PLAYER=6
   
   Repeat 
      
      '          ________________________________
      '         |                                | 
      '         | Test player keys               | 
      '         |________________________________| 
      
      
      REDRAW_ANY_PLAYER=_FALSE
      
      For _PLAYER=1 To 6
         REDRAW_PLAYER(_PLAYER)=_FALSE
         If ACCEPT_KEYSTROKE(_PLAYER)
            
            On _PLAYER Goto LTL1,LTL2,LTL3,LTL4,LTL5,LTL6
            LTL1: RIGHT_PUSHED=Key State(66)
            LEFT_PUSHED=Key State(0) : Goto LTL_END
            LTL2: RIGHT_PUSHED=((Key Shift and $40)>0)
            LEFT_PUSHED=((Key Shift and $10)>0) : Goto LTL_END
            LTL3: RIGHT_PUSHED=Key State(54) or Jright(1)
            LEFT_PUSHED=Key State(53) or Jleft(1) : Goto LTL_END
            LTL4: RIGHT_PUSHED=((Key Shift and $20)>0)
            LEFT_PUSHED=((Key Shift and $80)>0) : Goto LTL_END
            LTL5: RIGHT_PUSHED=Key State(95) or((Mouse Key and 2)=2)
            LEFT_PUSHED=Key State(70) or((Mouse Key and 1)=1) : Goto LTL_END
            LTL6: RIGHT_PUSHED=Key State(63)
            LEFT_PUSHED=Key State(47)
            LTL_END:
            
            If LEFT_PUSHED or RIGHT_PUSHED
               _KEYSTROKE_COUNTER(_PLAYER)=10
               ACCEPT_KEYSTROKE(_PLAYER)=_FALSE
               REDRAW_PLAYER(_PLAYER)=_TRUE
               REDRAW_ANY_PLAYER=_TRUE
               
               Add _PLAYER_TYPE(_PLAYER),1,0 To 3
               SELECTED(_PLAYER)=(_PLAYER_TYPE(_PLAYER)>0)
               If SELECTED(_PLAYER)=0
                  _TOP_LIVES(_PLAYER)=0
               End If 
            End If 
         Else 
            Dec _KEYSTROKE_COUNTER(_PLAYER)
            If(_KEYSTROKE_COUNTER(_PLAYER)=0)
               ACCEPT_KEYSTROKE(_PLAYER)=_TRUE
            End If 
         End If 
      Next _PLAYER
      
      _COUNT_SELECTED
      
      '          ________________________________
      '         |                                | 
      '         | Test lives keys                | 
      '         |________________________________| 
      
      If(HRAJOU>0)
         If Key State(10)
            Repeat 
               Add LAST_CHANGED_PLAYER,1,1 To 6
            Until SELECTED(LAST_CHANGED_PLAYER)
            
            Timer=0
            _TOP_LIVES(LAST_CHANGED_PLAYER)=0
            REDRAW_PLAYER(LAST_CHANGED_PLAYER)=_TRUE
            REDRAW_ANY_PLAYER=_TRUE
            
            Wait 7
         End If 
         For KEY=1 To 7
            If Key State(KEY)
               Repeat 
                  Add LAST_CHANGED_PLAYER,1,1 To 6
               Until SELECTED(LAST_CHANGED_PLAYER)
               
               Timer=0
               _TOP_LIVES(LAST_CHANGED_PLAYER)=KEY
               REDRAW_PLAYER(LAST_CHANGED_PLAYER)=_TRUE
               REDRAW_ANY_PLAYER=_TRUE
               
               Wait 7
            End If 
         Next KEY
      End If 
      
      '          ________________________________
      '         |                                | 
      '         | Redraw selected players n lives| 
      '         |________________________________| 
      
      If REDRAW_ANY_PLAYER
         Timer=0
         Screen 2
         For _PLAYER=1 To 6
            If REDRAW_PLAYER(_PLAYER)
               Ink $10+_PLAYER,0
               Bar 33*8-6,3*8*_PLAYER+10 To 33*8+25,24*_PLAYER+16+10
               Paste Bob 33*8-8,24*_PLAYER+10,_PLAYER_TYPE_IMAGE(_PLAYER_TYPE(_PLAYER))
               
               T=_TOP_LIVES(_PLAYER)
               T$=" "
               If T>0 : T$=Str$(T)-" " : End If 
               Ink $10+_PLAYER,1
               Text 33*8+42,24*_PLAYER+22,T$
            End If 
         Next _PLAYER
         
         Get Block 1,16*16,0,320-16*16,256,1
         Screen 1
         Wait Vbl 
         Put Block 1
         Del Block 1
      Else 
         Wait Vbl 
      End If 
      
      Clear Key 
      
      
      
      '          ________________________________
      '         |                                | 
      '         | Test screen keys               | 
      '         |________________________________| 
      
      If Key State(H_SCANCODE)
         FAST_FADE_OUT
         Amal Off : Sprite Off 
         HELP
         SELECTING_RESTORE_SCREEN
      Else If Key State(L_SCANCODE)
         _PLAYER_COLOURS_SET=1-_PLAYER_COLOURS_SET
         If _PLAYER_COLOURS_SET=0
            For I=1 To 6 : PL_DEF_COLOR(I)=PL_DEF_COLOR_LIGHT(I) : Next 
         Else 
            For I=1 To 6 : PL_DEF_COLOR(I)=PL_DEF_COLOR_DARK(I) : Next 
         End If 
         Fade 1,,,,,,,,,,,,,,,,,,PL_DEF_COLOR(1),PL_DEF_COLOR(2),PL_DEF_COLOR(3),PL_DEF_COLOR(4),PL_DEF_COLOR(5),PL_DEF_COLOR(6)
         Wait 10
      Else If Key State(O_SCANCODE)
         FAST_FADE_OUT
         Amal Off : Sprite Off 
         OPTIONS_MAIN
         SELECTING_RESTORE_SCREEN
      Else If Key State(E_SCANCODE)
         FAST_FADE_OUT : E_THRU=_TRUE
         Amal Off : Sprite Off 
         OPTIONS_MAIN
         SELECTING_RESTORE_SCREEN
      Else If Key State(G_SCANCODE)
         FAST_FADE_OUT : G_THRU=_TRUE
         Amal Off : Sprite Off 
         OPTIONS_MAIN
         SELECTING_RESTORE_SCREEN
      Else If Key State(R_SCANCODE)
         FAST_FADE_OUT : R_THRU=_TRUE
         Amal Off : Sprite Off 
         OPTIONS_MAIN
         SELECTING_RESTORE_SCREEN
      Else If Key State(S_SCANCODE)
         SELECT_GAME : Timer=0
      Else If Key State(U_SCANCODE)
         If Length(USER_GAMESET__BANK)>0
            U_THRU=_TRUE
            SELECT_GAME : Timer=0
         End If 
      Else If Key State(Q_SCANCODE)
         Fade 3 : Wait 50 : Track Stop : Erase All 
         Screen Close 2 : Screen Close 1
         If Prg State=-1
            End 
         Else 
            Edit 
         End If 
      End If 
      
      DEMO_ON=(Timer>DEMO_TIMER_LIMIT)
      
   Until Key State(SPACE_SCANCODE) and(((HRAJOU>1) and(TEAM_GAME=False)) or HRAJOU=4 or HRAJOU=6 or REPLAY_ALL_SAVED_ON) or DEMO_ON or _ONE_PLAYER_GAME
   _ONE_PLAYER_GAME=False
   Fade 1
   Wait 15
   
   If DEMO_ON
      DEMO_ENVIRONMENT[0] : Rem Store envi before demo and set demo envi 
   End If 
   
   If Not(DEMO_ON or REPLAY_ALL_SAVED_ON)
      REALIZE_PLAYER_TYPE
   End If 
   
   SET_TEAMMATES
   
   If Not DEMO_ON
      Track Stop 
   End If 
   
   Amal Off 
   Sprite Off 
   Paper 0
   Cls 0
   
End Proc
Procedure SELECTING_RESTORE_SCREEN
   Sprite Off 
   SELECTING_PRINT[True]
   Screen 1
   Sprite Off : Wait Vbl : Wait 1
   '#### My Last Attempt #### 
   For I=0 To 7
      Sprite I,0,0,0
   Next I
   
   Sprite 0,260+X Hard(0)-24-4+30+2+2,5+4+42,33
   '   _ANIM_FLAG$="Anim 0,(33,6)(34,6)(35,6)(36,6)(37,6)(38,6)(39,6)(40,6)(41,6)(42,6)(43,6)(44,6)(45,6)(46,6)"
   _ANIM_FLAG$="Anim 0,(33,6)(34,6)(35,5)(36,4)(37,3)(38,3)(39,4)(40,5)(41,6)(42,6)(43,6)(44,6)(45,6)(46,6)(33,4)(34,1)(35,1)(36,1)(37,1)(38,1)(39,1)(40,1)(41,1)(42,1)(43,2)(44,3)(45,4)(46,5)"
   Amal 0,_ANIM_FLAG$
   Amal On 
   
   SELECTING_FADE_UP
   Timer=0 : DEMO_ON=False
End Proc
Procedure SET_TEAMMATES
   Dim TM(3)
   
   If Not TEAM_GAME
      For I=1 To 6
         TEAM_MATE(I)=I
      Next I
   Else 
      If HRAJOU=6
         TEAM_MATE_THRU(1)=$12
         TEAM_MATE_THRU(2)=0
         TEAM_MATE_THRU(3)=$14
         TEAM_MATE_THRU(4)=0
         TEAM_MATE_THRU(5)=$16
         TEAM_MATE_THRU(6)=0
         
         TEAM_MATE(1)=2
         TEAM_MATE(2)=1
         TEAM_MATE(3)=4
         TEAM_MATE(4)=3
         TEAM_MATE(5)=6
         TEAM_MATE(6)=5
      Else 
         TM_INDEX=0
         For I=1 To 6
            If SELECTED(I)
               TM(TM_INDEX)=I
               Inc TM_INDEX
            End If 
         Next I
         
         TEAM_MATE_THRU(TM(0))=$10+TM(1)
         TEAM_MATE_THRU(TM(1))=0
         TEAM_MATE_THRU(TM(2))=$10+TM(3)
         TEAM_MATE_THRU(TM(3))=0
         
         TEAM_MATE(TM(0))=TM(1)
         TEAM_MATE(TM(1))=TM(0)
         TEAM_MATE(TM(2))=TM(3)
         TEAM_MATE(TM(3))=TM(2)
      End If 
   End If 
End Proc

Procedure _DO_SELECTION_SCREEN[GS_TYPE]
   U_GOES_TO_USERBANK=(GS_TYPE=0) and(Length(USER_GAMESET__BANK)>0)
   
   For I=0 To 9
      WRITEXY[20-4,20+51-10+I*9,Str$(I)+" "+GS_GAME_NAME$(I,GS_TYPE)]
   Next I
   For I=0 To 9
      WRITEXY[20-2+120,20+51-10+I*9,Chr$(I+65)+" "+GS_GAME_NAME$(I+10,GS_TYPE)]
   Next I
   If U_GOES_TO_USERBANK
      WRITEXY[45,156,PRESS_U_TO_SELECT_USER_GAME$]
   End If 
   
   '          ________________________________
   '         |                                | 
   '         | Draw Box                       | 
   '         |________________________________| 

   _W_=10 : _E_=250 : _N_=36 : _S_=170
   Ink $10
   Box _W_+3,_N_+3 To _E_+3,_S_+3
   Box _W_+2,_N_+2 To _E_+2,_S_+2
   Ink $19 : Box _W_+1,_N_+1 To _E_+1,_S_+1
   Ink $1E : Box _W_,_N_ To _E_,_S_
   Ink $10
   Box _W_-1,_N_-1 To _E_+2,_S_+2
   Box _W_+2,_N_+2 To _E_-1,_S_-1
   
   Get Block 1,0,32,320-32-32,140 : Screen 1
   Put Block 1 : Del Block 1
   
   '             .-----------------------------------------.
   '             |    Now wait for what key is pressed     |  
   '             `-----------------------------------------'
   
   Clear Key : _DO_RECONFIGURING=True : OK=0
   Repeat 
      A$=Upper$(Inkey$)
      If(Scancode=ESC_SCANCODE) or(U_GOES_TO_USERBANK and(A$="U"))
         OK=True
         _DO_RECONFIGURING=False
      Else If A$<>""
         IND=Asc(A$)
         If(IND>48-1) and(IND<48+10)
            Add IND,-48 : OK=True
         Else If(IND>65-1) and(IND<65+10)
            Add IND,-55 : OK=True
         End If 
         
         OK=OK and((GS_TYPE=0) or(Left$(GS_GAME_NAME$(Min(IND,19),GS_TYPE),5)<>NAME_OF_EMPTY_GAME_IN_GAMESET$))
      End If 
   Until OK
   
   '             .-----------------------------------------.
   '             |    Now do the reconfiguring             |  
   '             `-----------------------------------------'
   
   If _DO_RECONFIGURING
      _ONE_PLAYER_GAME=((GS_TYPE=0) and(IND>=10))
      
      If _ONE_PLAYER_GAME
         _LOAD_CONFIGURATION[0] : Rem          BUILTIN CONFIGURATION 

         _PLAYER_TYPE(1)=2
         _PLAYER_TYPE(2)=2
         _PLAYER_TYPE(3)=0
         _PLAYER_TYPE(4)=1
         _PLAYER_TYPE(5)=0
         _PLAYER_TYPE(6)=0

         For _PLAYER=1 To 6
            SELECTED(_PLAYER)=(_PLAYER_TYPE(_PLAYER)>0)
            _TOP_LIVES(_PLAYER)=0
         Next 
         Add IND,-10
         _TOP_LIVES(1)=IND
         If IND>7 : _TOP_LIVES(1)=IND-2
         Else If IND>5 : _TOP_LIVES(1)=IND-1 : End If 
         _TOP_LIVES(2)=IND
         If IND>8 : _TOP_LIVES(2)=IND-2
         Else If IND>6 : _TOP_LIVES(2)=IND-1 : End If 
      Else 
         If GS_TYPE=0
            BASE=Start(DEF_GAMESET__BANK)
         Else 
            BASE=Start(USER_GAMESET__BANK)
         End If 
         C_BASE=BASE+Deek(BASE+2*IND)+$10
         _DECONFIG[C_BASE,True]
         If PLAN=2
            P_LEN=Peek(C_BASE+$20)
            OWN_PLAN_PATH$=Peek$(C_BASE+$21,P_LEN)
         End If 
         If PLAN>0
            SET_PLAN_USING_CONFIG[False]
         End If 
      End If 
   End If 
   
End Proc
Procedure SELECT_GAME
   
   Screen 1 : Get Block 1,0,32,320-32-32,140
   
   If _NOT(U_THRU)
      Screen 2
      Unpack PLAN_BANK(0)
      P0=Phybase(0) : P1=Phybase(1) : P2=Phybase(2) : P3=Phybase(3)
      Copy P1,P1+10240-1 To P0
      Copy P2,P2+10240-1 To P1
      Copy P3,P3+10240-1 To P2
      Fill P3 To P3+10240-1,0
      
      WRITEXY[45+7*5+20,51-10,SELECT_GAME$]
      
      _DO_SELECTION_SCREEN[0]
   End If 
   
   If(A$="U") or U_THRU
      Screen 2
      Unpack PLAN_BANK(0)
      P0=Phybase(0) : P1=Phybase(1) : P2=Phybase(2) : P3=Phybase(3)
      Copy P1,P1+10240-1 To P0
      Copy P2,P2+10240-1 To P1
      Copy P3,P3+10240-1 To P2
      Fill P3 To P3+10240-1,0
      
      WRITEXY[45+7*5+20-7*8,51-10,SELECT_GAME_FROM_USERSET$]
      _DO_SELECTION_SCREEN[1]
      U_THRU=False
   End If 
   
   If(_ONE_PLAYER_GAME=0)
      Screen 2 : Unpack PLAN_BANK(0)
      P0=Phybase(0) : P1=Phybase(1) : P2=Phybase(2) : P3=Phybase(3)
      Copy P1,P1+10240-1 To P0
      Copy P2,P2+10240-1 To P1
      Copy P3,P3+10240-1 To P2
      Fill P3 To P3+10240-1,0
   
      Get Block 1,0,32,320-32-32,140
      SELECTING_PRINT[False]
      Screen 1
   End If 
End Proc
Procedure CREATE_GAMESET[GS__BANK,CONFIG_LIST_NAME$]
   
   '          ________________________________
   '         |                                | 
   '         | Count length to open           | 
   '         |________________________________| 
   
   
   EXTRACT_PATH[CONFIG_LIST_NAME$] : GAMESET_PATH$=Param$
   
   NUMBER_OF_CONFIGS=0
   Open In 1,CONFIG_LIST_NAME$
   
   GAMESET_LENGTH=0
   While Not Eof(1) or(NUMBER_OF_CONFIGS>=20)
      Input #1,F_NAME$ : F_NAME$=GAMESET_PATH$+F_NAME$
      If Exist(F_NAME$)
         Open In 2,F_NAME$
         Add GAMESET_LENGTH,Lof(2)+$10-20
         Inc NUMBER_OF_CONFIGS
         Close 2
      End If 
   Wend 
   Close 1
   Add GAMESET_LENGTH,20*2
   
   '          ________________________________
   '         |                                | 
   '         | Push configs to set            | 
   '         |________________________________| 
   
   If NUMBER_OF_CONFIGS>0
      Reserve As Work GS__BANK,GAMESET_LENGTH
      CONFIG_NUMBER=0
      Open In 1,CONFIG_LIST_NAME$
      GS_BASE=Start(GS__BANK)
      GS_POS=GS_BASE+20*2
      
      For I=GS_BASE To GS_BASE+20*2-1
         Poke I,0
      Next I
      
      While Not Eof(1) or(CONFIG_NUMBER>=20)
         
         Input #1,F_NAME$ : C_NAME$=F_NAME$ : F_NAME$=GAMESET_PATH$+F_NAME$
         
         If Exist(F_NAME$)
            Erase CONFIG_TEMPORARY__BANK
            Load F_NAME$,CONFIG_TEMPORARY__BANK
            
            Doke GS_BASE+2*CONFIG_NUMBER,GS_POS-GS_BASE
            
            C_NAME$=Left$(C_NAME$,$10)
            C_NAME$=C_NAME$+Space$($10-Len(C_NAME$))
            Poke$ GS_POS,C_NAME$ : Add GS_POS,16
            
            BASE=Start(CONFIG_TEMPORARY__BANK)
            TEMP_PLAN=Peek(BASE)+$E
            Copy BASE,BASE+$20-1 To GS_POS : Add GS_POS,$20
            If TEMP_PLAN=2
               P_LEN=Peek(BASE+$20)
               Copy BASE+$20,BASE+$20+P_LEN+1-1 To GS_POS : Add GS_POS,P_LEN+1
            End If 
            
            Inc CONFIG_NUMBER
         End If 
      Wend 
      Close 1
   End If 
End Proc[NUMBER_OF_CONFIGS]

'             ______________________________________   
'            |                                      \    
'            |  @ Rest                               \   
'            |________________________________________\          


Procedure _DO_SOUND[ST]
   ' ST means sound type
   
   If SOUND_FX
      If ST=BOUND_SOUND
         Sam Play SOUND_FX_CHANNEL,2,7500+200*Rnd(5)
      Else If ST=TELEPORT_SOUND
         Sam Play SOUND_FX_CHANNEL,3,16000
      Else If ST=DEATH_SOUND
         Sam Play SOUND_FX_CHANNEL,1,12000
      Else If ST=ARROW_SOUND
         Sam Play SOUND_FX_CHANNEL,3,10000
      Else If ST=PRESS_SPACE_SOUND
      Else If ST=AUCH_SOUND
         Sam Play SOUND_FX_CHANNEL,4,6000+500*Rnd(5)
      Else If ST=BODY_CHANGE_SOUND
         Sam Play SOUND_FX_CHANNEL,5,7000
      End If 
      
      If GAME_MUSIC_PLAYING=0
         SOUND_FX_CHANNEL=_NEXT_SOUND_FX_CHANNEL(SOUND_FX_CHANNEL)
      End If 
   End If 
End Proc

Procedure SET_SPP
   P$=STANDARD_PLAN_PAL$(GAMEPLAN-1)
   For I=0 To $F
      C$="$"+Left$(P$,3) : P$=Mid$(P$,4,Len(P$)-3)
      SPP(I)=Val(C$)
   Next I
End Proc
Procedure FAST_FADE_OUT
   If FAST_INTERFACE
      Wait Vbl 
      Palette 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
      Clear Key 
      Wait 1
   Else 
      Fade 1
      Wait 13
      Palette 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
      Wait Vbl : Wait 1
   End If 
End Proc
Procedure LET_IT_SHOW
   Get Block 1,0,0,320,256,1
   Screen 1
   Put Block 1
   Del Block 1
   Screen 2
End Proc

Procedure _COUNT_SELECTED
   HRAJOU=0
   NUMBER_OF_LIVING_HUMANS=0
   For _PLAYER=1 To 6
      If SELECTED(_PLAYER)
         Inc HRAJOU
         If Not COMPUTER_STRATEGY(_PLAYER)
            Inc NUMBER_OF_LIVING_HUMANS
         End If 
      End If 
   Next _PLAYER
   ZIJOU=HRAJOU
End Proc
Procedure SET_APPROPRIATE_DRAWPIXEL_PROC
   _SPRITE_INDEX_BASE=4*BOLDLINE
   
   '   Poke VA_PUTPIX_TYPE,4*(Abs(BIG_SCREEN)*2+Abs(BOLDLINE))
   Poke VA_PUTPIX_TYPE,4*(Sgn(_SCREEN_SIZE)*2+Abs(BOLDLINE))
   
   If BOLDLINE=0
      If _SCREEN_SIZE>0
         PA_CURRENT_PIX=PA_SMALL_PIX_BIGSCREEN
      Else 
         PA_CURRENT_PIX=PA_SMALL_PIX
      End If 
      PA_COUNTTESTANDSPEEDPOINTS=PA_COUNTTESTANDSPEEDPOINTS_1PIX
   Else 
      If _SCREEN_SIZE>0
         PA_CURRENT_PIX=PA_BIG_PIX_BIGSCREEN
      Else 
         PA_CURRENT_PIX=PA_BIG_PIX
      End If 
      PA_COUNTTESTANDSPEEDPOINTS=PA_COUNTTESTANDSPEEDPOINTS_2PIX
   End If 
End Proc
Procedure REALIZE_PLAYER_TYPE
   For _PLAYER=1 To 6
      SELECTED(_PLAYER)=_PLAYER_PROPRIETY(0,_PLAYER_TYPE(_PLAYER))
      COMPUTER_STRATEGY(_PLAYER)=_PLAYER_PROPRIETY(1,_PLAYER_TYPE(_PLAYER))
      CYBORG(_PLAYER)=_PLAYER_PROPRIETY(2,_PLAYER_TYPE(_PLAYER))
   Next _PLAYER
End Proc
Procedure _UPDATE_SCORE
   If TEAM_GAME
      For I=1 To 6
         If ALIVE(I) and(I<>TEAM_MATE(_PLAYER))
            Add SCORE(I),STAYED_ALIVE_BONUS(I)
            Add SCORE(TEAM_MATE(I)),STAYED_ALIVE_BONUS(I)
            If SCORE(I)>GR
               GR=SCORE(I)
               GRP=I
            End If 
         End If 
      Next I
   Else 
      For I=1 To 6
         If ALIVE(I)
            Add SCORE(I),STAYED_ALIVE_BONUS(I)
            If SCORE(I)>GR
               GR=SCORE(I)
               GRP=I
            End If 
         End If 
      Next I
   End If 
End Proc

Procedure MAKE_SCOREPANEL
   Screen 4 : Cls 0
   
   Paste Icon 0,0,1
   Paste Icon 320,0,2
   
   For _PLAYER=1 To 6
      If SELECTED(_PLAYER)
         Paste Icon 60*(_PLAYER-1)+25,0,19
      End If 
   Next _PLAYER
   
   '                      _____________________ 
   '                     |                     |    
   '                     |   Draw Init Lives   |          
   '                     |_____________________|  
   
   If LIVES_ON
      For _PLAYER=1 To 6
         If SELECTED(_PLAYER) and(_TOP_LIVES(_PLAYER)>0)
            For I=1 To _TOP_LIVES(_PLAYER)
               Paste Icon 28+21+25+6+60*(_PLAYER-1)-2,2+(I-1)*4-1,20
               Ink 9+_PLAYER
               Bar 28+21+25+6+60*(_PLAYER-1),2+(I-1)*4 To 4+28+21+25+6+60*(_PLAYER-1),2+(I-1)*4+1
            Next I
         End If 
      Next _PLAYER
   End If 
   
   Screen Copy 4 To 3
End Proc
Procedure _DRAW_SCORE
   If Not(REPLAY_ALL_SAVED_ON) and 0
      Screen 4
      For I=1 To 6
         If SEMIALIVE(I) or SEMIALIVE(TEAM_MATE(I))
            If SCORE(I)>=10
               Paste Icon 25+6+60*(I-1),3,12+I
               Paste Icon 25+6+60*(I-1),3,SCORE(I)/10+3
            End If 
            Paste Icon 25+6+60*(I-1)+21,3,12+I
            Paste Icon 25+6+60*(I-1)+21,3,SCORE(I) mod 10+3
         End If 
      Next I
      Screen 1
   End If 
   Screen Copy 4 To 3
End Proc
Procedure _DRAW_SMALL_WOOD_FRAME
   Paste Bob 0,0,HORIZONTAL_WOOD_IMAGE+$4000
   Paste Bob 160,0,HORIZONTAL_WOOD_IMAGE+$4000
   Paste Bob 0,0,NOSCROLL_CORNER_IMAGE
   Paste Bob 320-16,0,NOSCROLL_CORNER_IMAGE+$8000
   Paste Bob 0,256-30-4-2,HORIZONTAL_WOOD_IMAGE
   Paste Bob 160,256-30-4-2,HORIZONTAL_WOOD_IMAGE
   Paste Bob 0,256-30-4-2,NOSCROLL_CORNER_IMAGE+$4000
   Paste Bob 320-16,256-30-4-2,NOSCROLL_CORNER_IMAGE+$8000+$4000
   
   Paste Bob 0,4,VERTICAL_WOOD_IMAGE
   Paste Bob 320-16,4,VERTICAL_WOOD_IMAGE+$8000
End Proc
Procedure _DRAW_WINNER_WOOD_FRAME[DS_HEIGHT]
   Paste Bob 0,0,HORIZONTAL_WOOD_IMAGE+$4000
   Paste Bob 160,0,HORIZONTAL_WOOD_IMAGE+$4000
   Paste Bob 0,0,NOSCROLL_CORNER_IMAGE
   Paste Bob 320-16,0,NOSCROLL_CORNER_IMAGE+$8000
   Paste Bob 0,DS_HEIGHT-4,HORIZONTAL_WOOD_IMAGE
   Paste Bob 160,DS_HEIGHT-4,HORIZONTAL_WOOD_IMAGE
   Paste Bob 0,4,VERTICAL_WOOD_IMAGE
   Paste Bob 320-16,4,VERTICAL_WOOD_IMAGE+$8000
   Paste Bob 0,DS_HEIGHT-4,NOSCROLL_CORNER_IMAGE+$4000
   Paste Bob 320-16,DS_HEIGHT-4,NOSCROLL_CORNER_IMAGE+$8000+$4000
End Proc

Procedure EDGES_FOR_BOUNCING
   If(X_WORK#<_LEFT_LIMIT) or(X_WORK#>_RIGHT_LIMIT)
      SMER(_PLAYER)=SMERU-SMER(_PLAYER)
      _DO_SOUND[BOUND_SOUND]
      RECALCULATE_ANGLE=True
      BOUND_THIS_ROUND(_PLAYER)=True
      BOUND_COUNTER(_PLAYER)=3
   End If 
   If(Y_WORK#<_UP_LIMIT) or(Y_WORK#>_DOWN_LIMIT)
      SMER(_PLAYER)=SMERU/2-SMER(_PLAYER)
      If SMER(_PLAYER)<0
         Add SMER(_PLAYER),SMERU
      End If 
      _DO_SOUND[BOUND_SOUND]
      RECALCULATE_ANGLE=True
      BOUND_THIS_ROUND(_PLAYER)=True
      BOUND_COUNTER(_PLAYER)=3
   End If 
   
   If CENTRAL_BOX=1
      If(((X_WORK=XBOTTOM) or(X_WORK=XTOP)) and(Y_WORK>=YBOTTOM) and(Y_WORK<=YTOP))
         SMER(_PLAYER)=SMERU-SMER(_PLAYER)
         _DO_SOUND[BOUND_SOUND]
         RECALCULATE_ANGLE=True
         BOUND_THIS_ROUND(_PLAYER)=True
         BOUND_COUNTER(_PLAYER)=3
      End If 
      If(((Y_WORK=YBOTTOM) or(Y_WORK=YTOP)) and(X_WORK>=XBOTTOM) and(X_WORK<=XTOP))
         SMER(_PLAYER)=SMERU/2-SMER(_PLAYER)
         If SMER(_PLAYER)<0
            Add SMER(_PLAYER),SMERU
         End If 
         _DO_SOUND[BOUND_SOUND]
         RECALCULATE_ANGLE=True
         BOUND_THIS_ROUND(_PLAYER)=True
         BOUND_COUNTER(_PLAYER)=3
      End If 
   End If 
   
End Proc
Procedure EDGES_STANDARD
   If(X_WORK#<_LEFT_LIMIT) or(X_WORK#>_RIGHT_LIMIT) or(Y_WORK#<_UP_LIMIT) or(Y_WORK#>_DOWN_LIMIT)
      _PLAYER_KILLED
   End If 
   If CENTRAL_BOX=1
      If((X_WORK=XBOTTOM) and(Y_WORK>YBOTTOM) and(Y_WORK<YTOP)) or((X_WORK=XTOP) and(Y_WORK>YBOTTOM) and(Y_WORK<YTOP))
         _PLAYER_KILLED
      End If 
      If((Y_WORK=YBOTTOM) and(X_WORK>XBOTTOM) and(X_WORK<XTOP)) or((Y_WORK=YTOP) and(X_WORK>XBOTTOM) and(X_WORK<XTOP))
         _PLAYER_KILLED
      End If 
   End If 
End Proc
Procedure EDGES_FOR_TELEPORTING
   If X_WORK#<_LEFT_LIMIT
      X#(_PLAYER)=_RIGHT_LIMIT
      
      If(Point(_RIGHT_LIMIT-0.5,Y#(_PLAYER))>$10) or(Point(_RIGHT_LIMIT-1.5,Y#(_PLAYER))>$10)
         _PLAYER_KILLED__TESTED_ON_LIVES
      End If 
      
      _DO_SOUND[TELEPORT_SOUND]
      RECALCULATE_COORDINATES=True
   Else If X_WORK#>_RIGHT_LIMIT
      X#(_PLAYER)=_LEFT_LIMIT
      
      If(Point(_LEFT_LIMIT,Y#(_PLAYER))>$10) or(Point(_LEFT_LIMIT+1,Y#(_PLAYER))>$10)
         _PLAYER_KILLED__TESTED_ON_LIVES
      End If 
      
      _DO_SOUND[TELEPORT_SOUND]
      RECALCULATE_COORDINATES=True
   End If 
   If Y_WORK#<_UP_LIMIT
      Y#(_PLAYER)=_DOWN_LIMIT
      
      If(Point(X#(_PLAYER),_DOWN_LIMIT-0.5)>$10) or(Point(X#(_PLAYER),_DOWN_LIMIT-1.5)>$10)
         _PLAYER_KILLED__TESTED_ON_LIVES
      End If 
      
      _DO_SOUND[TELEPORT_SOUND]
      RECALCULATE_COORDINATES=True
   Else If Y_WORK#>_DOWN_LIMIT
      Y#(_PLAYER)=_UP_LIMIT
      
      If(Point(X#(_PLAYER),_UP_LIMIT)>$10) or(Point(X#(_PLAYER),_UP_LIMIT+1)>$10)
         _PLAYER_KILLED__TESTED_ON_LIVES
      End If 
      
      _DO_SOUND[TELEPORT_SOUND]
      RECALCULATE_COORDINATES=True
   End If 
   
   If CENTRAL_BOX=1
      If(X_WORK=XBOTTOM) and(Y_WORK>YBOTTOM) and(Y_WORK<YTOP)
         X#(_PLAYER)=XTOP+1
         
         If(Point(XTOP+1,Y#(_PLAYER))>$10) or(Point(XTOP+1+1,Y#(_PLAYER))>$10)
            _PLAYER_KILLED__TESTED_ON_LIVES
         End If 
         
         _DO_SOUND[TELEPORT_SOUND]
         RECALCULATE_COORDINATES=True
      Else If(X_WORK=XTOP) and(Y_WORK>YBOTTOM) and(Y_WORK<YTOP)
         X#(_PLAYER)=XBOTTOM
         
         If(Point(XBOTTOM-0.5,Y#(_PLAYER))>$10) or(Point(XBOTTOM-1.5,Y#(_PLAYER))>$10)
            _PLAYER_KILLED__TESTED_ON_LIVES
         End If 
         
         _DO_SOUND[TELEPORT_SOUND]
         RECALCULATE_COORDINATES=True
      End If 
      If(Y_WORK=YBOTTOM) and(X_WORK>XBOTTOM) and(X_WORK<XTOP)
         Y#(_PLAYER)=YTOP+1
         
         If(Point(X#(_PLAYER),YTOP+1)>$10) or(Point(X#(_PLAYER),YTOP+1+1)>$10)
            _PLAYER_KILLED__TESTED_ON_LIVES
         End If 
         
         _DO_SOUND[TELEPORT_SOUND]
         RECALCULATE_COORDINATES=True
      End If 
      If(Y_WORK=YTOP) and(X_WORK>XBOTTOM) and(X_WORK<XTOP)
         Y#(_PLAYER)=YBOTTOM
         
         If(Point(X#(_PLAYER),YBOTTOM-0.5)>$10) or(Point(X#(_PLAYER),YBOTTOM-1.5)>$10)
            _PLAYER_KILLED__TESTED_ON_LIVES
         End If 
         
         _DO_SOUND[TELEPORT_SOUND]
         RECALCULATE_COORDINATES=True
      End If 
   End If 
End Proc
Procedure EDGES_FOR_WATERING
   CAST_TYPE=0
   If(X_WORK#<_LEFT_LIMIT) or(X_WORK#>_RIGHT_LIMIT)
      CAST_TYPE=1
   End If 
   If(Y_WORK#<_UP_LIMIT) or(Y_WORK#>_DOWN_LIMIT)
      CAST_TYPE=2
      Goto EW_FOUND
   End If 
   
   If CENTRAL_BOX=1
      If(((X_WORK=XBOTTOM) or(X_WORK=XTOP)) and(Y_WORK>=YBOTTOM) and(Y_WORK<=YTOP))
         CAST_TYPE=1
      End If 
      If(((Y_WORK=YBOTTOM) or(Y_WORK=YTOP)) and(X_WORK>=XBOTTOM) and(X_WORK<=XTOP))
         CAST_TYPE=2
      End If 
   End If 
   
   '~~~~~~ Uz vime kde prekroceno ~~~~~~
   EW_FOUND:
   
   If CAST_TYPE>0
      
      ANGLE_MAKER=SMER(_PLAYER) mod SMERU_HALVE
      
      '~~~~~~ Special transformation ~~~~~~  
      
      _REVERSE_CAST=(ANGLE_MAKER<SMERU_QUARTER)
      If CAST_TYPE=1
         _REVERSE_CAST= Not _REVERSE_CAST
      End If 
      
      ANGLE_MAKER=ANGLE_MAKER mod SMERU_QUARTER
      If _REVERSE_CAST
         ANGLE_MAKER=SMERU_QUARTER-ANGLE_MAKER
      End If 
      
      If ANGLE_MAKER*ANGLE_CONSTANT#<WATER_LIMIT#
         EDGES_FOR_BOUNCING
      Else 
         EDGES_FOR_TELEPORTING
      End If 
   End If 
End Proc

Procedure _PLAYER_KILLED
   _PUTPIX_QUEUE_X(_PUTPIX_QUEUE_TOP)=X#(_PLAYER)
   _PUTPIX_QUEUE_Y(_PUTPIX_QUEUE_TOP)=Y#(_PLAYER)
   _PUTPIX_QUEUE_COLOUR(_PUTPIX_QUEUE_TOP)=$10+_PLAYER
   Inc _PUTPIX_QUEUE_TOP
   
   If ZOMBIES
      If ZOMBIE(_PLAYER)
         Inc LINE_LENGTH_(_PLAYER)
         Inc SPACE_LENGTH_(_PLAYER)
         SPACE_COUNTER(_PLAYER)=SPACE_LENGTH_(_PLAYER)
      Else 
         _DO_SOUND[DEATH_SOUND]
         ALIVE(_PLAYER)=_FALSE
         ZOMBIE(_PLAYER)=_TRUE
         Dec ZIJOU
         _UPDATE_SCORE
         _DRAW_SCORE
         LINE_LENGTH_(_PLAYER)=1
         SPACE_LENGTH_(_PLAYER)=15
         LINE_COUNTER(_PLAYER)=LINE_LENGTH_(_PLAYER)+20-SPACE_LENGTH_(_PLAYER)+30
         SPACE_COUNTER(_PLAYER)=SPACE_LENGTH_(_PLAYER)
      End If 
   Else 
      _DO_SOUND[DEATH_SOUND]
      SEMIALIVE(_PLAYER)=_FALSE
      ALIVE(_PLAYER)=_FALSE
      Dec ZIJOU
      Dec NUMBER_OF_SEMIALIVES
      If GO_FOR_COMPUTURBO
         If(COMPUTER_STRATEGY(_PLAYER)=False)
            Dec NUMBER_OF_LIVING_HUMANS
            If NUMBER_OF_LIVING_HUMANS=0
               GO_FOR_COMPUTURBO=_FALSE
               DIE_COMPUTERS=COMPUDEATH
               TURBOLIMIT=-1
            End If 
         End If 
      End If 
      NS=_SPRITE_NUMBER(_PLAYER)
      If(_SCREEN_SIZE=0) or(NS<4)
         Sprite Off _SPRITE_NUMBER(_PLAYER)
      Else 
         Bob Off _PLAYER-2
      End If 
      _UPDATE_SCORE
      _DRAW_SCORE
   End If 
End Proc
Procedure _PLAYER_KILLED__TESTED_ON_LIVES
   If LIVES_ON and(LIVES(_PLAYER)>0)
      _DO_SOUND[AUCH_SOUND]
      
      Screen 3
      Ink 0
      Bar 28+21+25+6+60*(_PLAYER-1),2+(LIVES(_PLAYER)-1)*4 To 4+28+21+25+6+60*(_PLAYER-1),2+(LIVES(_PLAYER)-1)*4+1
      Screen 4
      Ink 0
      Bar 28+21+25+6+60*(_PLAYER-1),2+(LIVES(_PLAYER)-1)*4 To 4+28+21+25+6+60*(_PLAYER-1),2+(LIVES(_PLAYER)-1)*4+1
      Screen 1
      
      '      Dreg(0)=278 : Dreg(1)=LIVES(_PLAYER)*3-1+(_PLAYER-1)*43 : Dreg(2)=0 
      '      Call(PA_BIG_PIX)
      
      Dec LIVES(_PLAYER)
      AUCH_PROTECTION(_PLAYER)=True
      AUCH_COUNTER(_PLAYER)=30
      LINE_COUNTER(_PLAYER)=LINE_LENGTH_(_PLAYER)+20-SPACE_LENGTH_(_PLAYER)+30
      SPACE_COUNTER(_PLAYER)=30
   Else 
      _PLAYER_KILLED
   End If 
End Proc

Procedure GAME
   
   If ESC
      Goto _FADE_OUT
   End If 
   
   If GAME_MUSIC_PLAYING
      Volume 0
      For I=0 To 40 Step 5 : Volume I : Wait Vbl : Next I
   Else 
      Volume 40
   End If 
   Make Mask 
   
   If J_REPLAYING_OR_J_RECORDING
      Loke VA_GAME_RECORD_POINTER,0
   End If 
   
   '<<<<<<<<<<<<<<<< Main Loop >>>>>>>>>>>>>>>> 
   
   CYCLES=0
   
   Repeat 
      Timer=0
      If JUST_REPLAYING
         Call(PA_LOAD_POSITION)
      End If 
      
      _PUTPIX_QUEUE_TOP=0
      
      For _PLAYER=1 To 6
         If SEMIALIVE(_PLAYER)
            
            
            '     ---------------- Care About Spaces --------------- 
            
            
            Dec LINE_COUNTER(_PLAYER)
            If LINE_COUNTER(_PLAYER)=0
               If J_REPLAYING_OR_J_RECORDING or ZOMBIE(_PLAYER)
                  LINE_COUNTER(_PLAYER)=LINE_LENGTH_(_PLAYER)+20
               Else 
                  LINE_COUNTER(_PLAYER)=LINE_LENGTH_(_PLAYER)+Rnd(40)-20
               End If 
               SPACE_COUNTER(_PLAYER)=SPACE_LENGTH_(_PLAYER)
            End If 
            
            If AUCH_PROTECTION(_PLAYER)
               Dec AUCH_COUNTER(_PLAYER)
               If AUCH_COUNTER(_PLAYER)=0
                  AUCH_PROTECTION(_PLAYER)=False
                  GAME_SLOWED=_FALSE
               End If 
            End If 
            
            
            '     ---------------- Compute New position -------------              
            
            
            If WIND
               TIMES_CONSTANT#=SPEED_PERCENT#(_PLAYER)*RATE#*WIND_FACTOR#(_PLAYER)
            Else 
               TIMES_CONSTANT#=SPEED_PERCENT#(_PLAYER)*RATE#
            End If 
            
            '          ________________
            '         |                |   
            '         | count sin+cos  |     
            '         |________________|   
            
            Dreg(0)=SMER(_PLAYER)
            Call(PA_COUNTSINANDCOS)
            Loke Varptr(_SIN_ANGLE#),Dreg(0)
            Loke Varptr(_COS_ANGLE#),Dreg(2)
            
            _SIN_KRAT_TIMES_CONSTANT#=_SIN_ANGLE#*TIMES_CONSTANT#
            _COS_KRAT_TIMES_CONSTANT#=_COS_ANGLE#*TIMES_CONSTANT#
            
            X_WORK#=X#(_PLAYER)+_SIN_KRAT_TIMES_CONSTANT#
            Y_WORK#=Y#(_PLAYER)+_COS_KRAT_TIMES_CONSTANT#
            X_WORK=X_WORK#
            Y_WORK=Y_WORK#
            
            RECALCULATE_ANGLE=False
            RECALCULATE_COORDINATES=False
            
            If BOUNCING
               EDGES_FOR_BOUNCING
            Else If TELEPORTING
               EDGES_FOR_TELEPORTING
            Else If WATERING
               EDGES_FOR_WATERING
            Else 
               EDGES_STANDARD
            End If 
            
            If BOUND_THIS_ROUND(_PLAYER)
               Dec BOUND_COUNTER(_PLAYER)
               If BOUND_COUNTER(_PLAYER)=0
                  BOUND_THIS_ROUND(_PLAYER)=False
               End If 
            End If 
            
            '          ________________________________
            '         |                                | 
            '         | Count test and speed points    | 
            '         |________________________________| 
            
            Dreg(0)=SMER(_PLAYER)
            Areg(1)=Leek(Varptr(X#(_PLAYER)))
            Areg(2)=Leek(Varptr(Y#(_PLAYER)))
            Call(PA_COUNTTESTANDSPEEDPOINTS)
            Loke Varptr(X_TESTPOINT),Dreg(0)
            Loke Varptr(Y_TESTPOINT),Dreg(1)
            Loke Varptr(X_SPEEDPOINT),Areg(1)
            Loke Varptr(Y_SPEEDPOINT),Areg(2)
            
            '          ________________________________
            '         |                                | 
            '         | Ted uloz do x#,y# novou posici | 
            '         |________________________________| 
            
            If RECALCULATE_ANGLE
               Dreg(0)=SMER(_PLAYER)
               Call(PA_COUNTSINANDCOS)
               Loke Varptr(_SIN_ANGLE#),Dreg(0)
               Loke Varptr(_COS_ANGLE#),Dreg(2)
               X#(_PLAYER)=X#(_PLAYER)+_SIN_ANGLE#*TIMES_CONSTANT#
               Y#(_PLAYER)=Y#(_PLAYER)+_COS_ANGLE#*TIMES_CONSTANT#
            Else If RECALCULATE_COORDINATES
               X#(_PLAYER)=X#(_PLAYER)+_SIN_KRAT_TIMES_CONSTANT#
               Y#(_PLAYER)=Y#(_PLAYER)+_COS_KRAT_TIMES_CONSTANT#
            Else 
               X#(_PLAYER)=X_WORK#
               Y#(_PLAYER)=Y_WORK#
            End If 
            
            '     .-------------------------------------------------------.
            '     |                 What's under head?                    |
            '     `-------------------------------------------------------'
            
            TEST_POINT=Point(X_TESTPOINT,Y_TESTPOINT)
            SPEED_POINT=Point(X_SPEEDPOINT,Y_SPEEDPOINT)
            
            If TEST_POINT>$10
               If BOUND_THIS_ROUND(_PLAYER)
                  If(TEST_POINT<>($10+_PLAYER)) and(TEST_POINT<$18) and(SPACE_COUNTER(_PLAYER)<(SPACE_LENGTH+10)*SPACE_KILL) and(AUCH_PROTECTION(_PLAYER)=_FALSE)
                     _PLAYER_KILLED__TESTED_ON_LIVES
                  End If 
               Else If TEAM_GAME
                  If(TEST_POINT<$18) and(SPACE_COUNTER(_PLAYER)<(SPACE_LENGTH+10)*SPACE_KILL) and(AUCH_PROTECTION(_PLAYER)=False) and((TEST_POINT=TEAM_MATE_THRU(_PLAYER))=False)
                     _PLAYER_KILLED__TESTED_ON_LIVES
                  End If 
               Else 
                  If(TEST_POINT<$18) and(SPACE_COUNTER(_PLAYER)<(SPACE_LENGTH+10)*SPACE_KILL) and(AUCH_PROTECTION(_PLAYER)=False)
                     _PLAYER_KILLED__TESTED_ON_LIVES
                  End If 
               End If 
            End If 
            
            If DIE_COMPUTERS and COMPUTER_STRATEGY(_PLAYER)
               _PLAYER_KILLED__TESTED_ON_LIVES
            End If 
            
            If SPEED_POINT<$10
               SPEED_PERCENT#(_PLAYER)=SPEED_SOURCE#(SPEED_POINT)
            End If 
            
            If Not SEMIALIVE(_PLAYER)
               Goto DEAD
            End If 
            
            '     .-------------------------------------------------------.
            '     |                 Umisti sprita                         |
            '     `-------------------------------------------------------'
            
            NS=_SPRITE_NUMBER(_PLAYER)
            
            If _SCREEN_SIZE>0
               If NS<4
                  NI=_SPRITE_IMAGE(_PLAYER)
                  _SPRITE_Y=Y#(_PLAYER)+42-_VIEWED_AREA_Y
                  If _SPRITE_Y>(256-36+42-2)
                     Sprite Off NS
                  Else 
                     Sprite NS,X#(_PLAYER)+X Hard(0)-_VIEWED_AREA_X,_SPRITE_Y,NI+_SPRITE_INDEX_BASE
                  End If 
               Else 
                  Bob _PLAYER-2,X#(_PLAYER),Y#(_PLAYER),
               End If 
            Else 
               Sprite NS,X#(_PLAYER)+X Hard(0),Y#(_PLAYER)+42,
            End If 
            
            
            Dec SPACE_COUNTER(_PLAYER)
            If(SPACE_COUNTER(_PLAYER)<0)
               _PUTPIX_QUEUE_X(_PUTPIX_QUEUE_TOP)=X#(_PLAYER)
               _PUTPIX_QUEUE_Y(_PUTPIX_QUEUE_TOP)=Y#(_PLAYER)
               _PUTPIX_QUEUE_COLOUR(_PUTPIX_QUEUE_TOP)=$10+_PLAYER
               Inc _PUTPIX_QUEUE_TOP
            End If 
            
            '     .-------------------------------------------------------.
            '     |            Player or Computer input                   |
            '     `-------------------------------------------------------'
            
            If JUST_REPLAYING
               LEFT_PUSHED=(_PLAYER_RECORD(_PLAYER-1)=1)
               RIGHT_PUSHED=(_PLAYER_RECORD(_PLAYER-1)=2)
            Else If CYBORG(_PLAYER)
               Clear Key 
               
               On _PLAYER Goto C1,C2,C3,C4,C5,C6
               
               C1: RIGHT_PUSHED=Key State(66)
               LEFT_PUSHED=Key State(0) : Goto C_END
               C2: RIGHT_PUSHED=(Key Shift and $40)
               LEFT_PUSHED=(Key Shift and $10) : Goto C_END
               C3: RIGHT_PUSHED=Key State(54) or Jright(1)
               LEFT_PUSHED=Key State(53) or Jleft(1) : Goto C_END
               C4: RIGHT_PUSHED=(Key Shift and $20)
               LEFT_PUSHED=(Key Shift and $80) : Goto C_END
               C5: RIGHT_PUSHED=Key State(95) or(Mouse Key and 2)
               LEFT_PUSHED=Key State(70) or(Mouse Key and 1) : Goto C_END
               C6: RIGHT_PUSHED=Key State(63)
               LEFT_PUSHED=Key State(47)
               C_END:
               
               If Not(RIGHT_PUSHED or LEFT_PUSHED)
                  PRUMER_CHANGE#=(1+TIMES_CONSTANT#)/2
                  
                  Loke VA_DIRECTION,SMER(_PLAYER)
                  Loke VA_XAMOSREAL,Leek(Varptr(X#(_PLAYER)))
                  Loke VA_YAMOSREAL,Leek(Varptr(Y#(_PLAYER)))
                  Loke VA_ROTATION,(SMERU_QUARTER*PRUMER_CHANGE#+2)
                  Loke VA_PLAYER,(_PLAYER-1)
                  
                  Call(PA_STRATEGY)
                  LEFT_PUSHED=(Dreg(7)=1)
                  RIGHT_PUSHED=(Dreg(7)=2)
               End If 
            Else If COMPUTER_STRATEGY(_PLAYER)
               PRUMER_CHANGE#=(1+TIMES_CONSTANT#)/2
               
               Loke VA_DIRECTION,SMER(_PLAYER)
               Loke VA_XAMOSREAL,Leek(Varptr(X#(_PLAYER)))
               Loke VA_YAMOSREAL,Leek(Varptr(Y#(_PLAYER)))
               Loke VA_ROTATION,(SMERU_QUARTER*PRUMER_CHANGE#+2)
               Loke VA_PLAYER,(_PLAYER-1)
               
               Call(PA_STRATEGY)
               LEFT_PUSHED=(Dreg(7)=1)
               RIGHT_PUSHED=(Dreg(7)=2)
               
            Else 
               Clear Key 
               
               On _PLAYER Goto L1,L2,L3,L4,L5,L6
               
               L1: RIGHT_PUSHED=Key State(66)
               LEFT_PUSHED=Key State(0) : Goto L_END
               L2: RIGHT_PUSHED=(Key Shift and $40)
               LEFT_PUSHED=(Key Shift and $10) : Goto L_END
               L3: RIGHT_PUSHED=Key State(54) or Jright(1)
               LEFT_PUSHED=Key State(53) or Jleft(1) : Goto L_END
               L4: RIGHT_PUSHED=(Key Shift and $20)
               LEFT_PUSHED=(Key Shift and $80) : Goto L_END
               L5: RIGHT_PUSHED=Key State(95) or(Mouse Key and 2)
               LEFT_PUSHED=Key State(70) or(Mouse Key and 1) : Goto L_END
               L6: RIGHT_PUSHED=Key State(63)
               LEFT_PUSHED=Key State(47)
               L_END:
            End If 
            
            '!!!!!!!!!!!! Future FIRE !!!!!!!! 
            If(LEFT_PUSHED and RIGHT_PUSHED)
               LEFT_PUSHED=False
               RIGHT_PUSHED=False
            End If 
            
            _PLAYER_MOVE=0
            If ALWAYS_TURNING=1
               If LEFT_PUSHED
                  TURNING(_PLAYER)=1
               End If 
               If RIGHT_PUSHED
                  TURNING(_PLAYER)=2
               End If 
               
               If TURNING(_PLAYER)=1
                  Add SMER(_PLAYER),1,0 To SMERU-1
               End If 
               If TURNING(_PLAYER)=2
                  Add SMER(_PLAYER),-1,0 To SMERU-1
               End If 
               
               If JUST_RECORDING
                  _PLAYER_MOVE=TURNING(_PLAYER)
               End If 
               
            Else 
               If LEFT_PUSHED
                  Add SMER(_PLAYER),1,0 To SMERU-1
                  _PLAYER_MOVE=1
               End If 
               If RIGHT_PUSHED
                  Add SMER(_PLAYER),-1,0 To SMERU-1
                  _PLAYER_MOVE=2
               End If 
            End If 
            
            '     .-------------------------------------------------------.
            '     |           Change directions according to wind         |
            '     `-------------------------------------------------------'
            
            If WIND
               TEMP_ANGLE=SMER(_PLAYER)-WIND_ANGLE
               If TEMP_ANGLE<0
                  Add TEMP_ANGLE,SMERU
               End If 
               Dreg(0)=TEMP_ANGLE : Call(PA_COUNTSINANDCOS)
               Loke Varptr(_SIN_ANGLE#),Dreg(0)
               Loke Varptr(_COS_ANGLE#),Dreg(2)
               SIGN=Sgn(_SIN_ANGLE#) : _SIN_ANGLE#=Abs(_SIN_ANGLE#)
               A=Rnd(999)
               If A<Int(WIND_STRENGTH#*_SIN_ANGLE#*1000.0)
                  Add SMER(_PLAYER),SIGN,0 To SMERU-1
               End If 
               WIND_FACTOR#(_PLAYER)=Sqr(1.0-WIND_STRENGTH#*_COS_ANGLE#)
            End If 
            
            If JUST_RECORDING
               _PLAYER_RECORD(_PLAYER-1)=_PLAYER_MOVE
            End If 
            
            DEAD:
         End If 
      Next _PLAYER
      
      If _BOBS_USED
         Bob Clear 
         Call(PA_DRAW_PIXEL_QUEUE)
         Bob Draw 
      Else 
         Call(PA_DRAW_PIXEL_QUEUE)
      End If 
      
      If GAME_SLOWED
         Repeat : Until Timer>2
      Else 
         Repeat : Until Timer>TURBOLIMIT
      End If 
      
      If JUST_RECORDING
         Call(PA_SAVE_POSITION)
      End If 
      
      '          ________________________________
      '         |                                | 
      '         | Viewed area possition          | 
      '         |________________________________| 
      
      
      If _SCREEN_SIZE>0
         X_SUM=0 : Y_SUM=0 : SUM_NUM=0
         For I=1 To 6
            If SEMIALIVE(I) and(_PLAYER_TYPE(I)=1)
               X_SUM=X_SUM+Int(X#(I))
               Y_SUM=Y_SUM+Int(Y#(I))
               Inc SUM_NUM
            End If 
         Next I
         If SUM_NUM=0
            For I=1 To 6
               If SEMIALIVE(I)
                  X_SUM=X_SUM+Int(X#(I))
                  Y_SUM=Y_SUM+Int(Y#(I))
                  Inc SUM_NUM
               End If 
            Next I
         End If 
         
         If SUM_NUM>0
            X_SUM=(X_SUM/SUM_NUM)-160
            Y_SUM=(Y_SUM/SUM_NUM)-110
         End If 
         
         D_X0=X_SUM-_VIEWED_AREA_X
         D_Y0=Y_SUM-_VIEWED_AREA_Y
         
         X_SUM=Max(X_SUM,0)
         Y_SUM=Max(Y_SUM,0)
         X_SUM=Min(X_SUM,X_SCROLL_LIMIT)
         Y_SUM=Min(Y_SUM,Y_SCROLL_LIMIT)
         D_X=X_SUM-_VIEWED_AREA_X
         D_Y=Y_SUM-_VIEWED_AREA_Y
         
         If _NOT(_DO_X_SCROLL) and(Abs(D_X0)>20)
            _DO_X_SCROLL=_TRUE
         End If 
         
         If _NOT(_DO_Y_SCROLL) and(Abs(D_Y0)>20)
            _DO_Y_SCROLL=_TRUE
         End If 
         
         If _DO_X_SCROLL
            If(Abs(D_X)>0)
               _VIEWED_AREA_X=_VIEWED_AREA_X+Sgn(D_X)
            Else 
               _DO_X_SCROLL=_FALSE
            End If 
         End If 
         
         If _DO_Y_SCROLL
            If(Abs(D_Y)>0)
               _VIEWED_AREA_Y=_VIEWED_AREA_Y+Sgn(D_Y)
            Else 
               _DO_Y_SCROLL=_FALSE
            End If 
         End If 
         
         Screen Offset 1,_VIEWED_AREA_X,_VIEWED_AREA_Y
         
      End If 
      
      '          ________________________________
      '         |                                | 
      '         | Care about rate                | 
      '         |________________________________| 
      
      
      If STILL_SPEEDING_UP
         RATE#=RATE#+RATEJUMP#
         _MUSIC_TEMPO#=_MUSIC_TEMPO#+_MUSIC_TEMPO_JUMP#
         Tempo _MUSIC_TEMPO#
         
         If RATE#>=FINAL_RATE#
            STILL_SPEEDING_UP=False
         End If 
      End If 
      
      '          ________________________________
      '         |                                | 
      '         | Body Change                    | 
      '         |________________________________| 
      
      If BODY_CHANGE and(ZIJOU>1)
         Dec BODY_CHANGE_COUNTER
         If BODY_CHANGE_COUNTER<0
            BODY_CHANGE_COUNTER=(_EXPECTED_GAME_LENGTH*BODY_CHANGE_PERCENT)/200+Rnd((_EXPECTED_GAME_LENGTH*BODY_CHANGE_PERCENT)/100)
            BODY_CHANGE_COUNTER=Max(BODY_CHANGE_COUNTER,100)
            
            _DO_SOUND[BODY_CHANGE_SOUND]
            
            GAME_SLOWED=_TRUE
            
            '         ------- make list of living players ---------- 
            
            LIVING_PLAYER=1
            _PLAYER=1
            While LIVING_PLAYER<=ZIJOU
               If ALIVE(_PLAYER)
                  LIVING_PLAYER(LIVING_PLAYER)=_PLAYER
                  Inc LIVING_PLAYER
               End If 
               Inc _PLAYER
            Wend 
            
            '         ---------- Permute living players ---------- 
            
            Repeat 
               CORRECT=_TRUE
               For _PLAYER=1 To ZIJOU
                  _FREE_VALUE(_PLAYER)=_TRUE
               Next 
               _PLAYER=1
               While(_PLAYER<=ZIJOU) and CORRECT
                  P=(Rnd(ZIJOU-1) mod(ZIJOU-_PLAYER+1))+1
                  I=0
                  Repeat 
                     Inc I
                     If _FREE_VALUE(I) : Dec P : End If 
                  Until P=0
                  _FREE_VALUE(I)=_FALSE
                  NEW_PLAYER(_PLAYER)=I
                  CORRECT=CORRECT and(I<>_PLAYER)
                  Inc _PLAYER
               Wend 
            Until CORRECT
            
            '         ---------- swap x,y,smer  ----------               
            
            For LIVING_PLAYER=1 To ZIJOU
               _PLAYER=LIVING_PLAYER(LIVING_PLAYER)
               NEW_PLAYER=LIVING_PLAYER(NEW_PLAYER(LIVING_PLAYER))
               
               AUCH_PROTECTION(_PLAYER)=True
               AUCH_COUNTER(_PLAYER)=50
               LINE_COUNTER(_PLAYER)=LINE_LENGTH+20
               
               
               NEW_X#(_PLAYER)=X#(NEW_PLAYER)
               NEW_Y#(_PLAYER)=Y#(NEW_PLAYER)
               NEW_SMER(_PLAYER)=SMER(NEW_PLAYER)
            Next 
            
            For _PLAYER=1 To 6
               If ALIVE(_PLAYER)
                  X#(_PLAYER)=NEW_X#(_PLAYER)
                  Y#(_PLAYER)=NEW_Y#(_PLAYER)
                  SMER(_PLAYER)=NEW_SMER(_PLAYER)
               End If 
            Next _PLAYER
         End If 
      End If 
      
      If WIND_TURNING
         If Rnd(999)<2
            Add WIND_ANGLE,1,0 To SMERU-1
         End If 
      End If 
      
      ESC=ESC or Key State(ESC_SCANCODE)
      
      Inc CYCLES
      Poke VA_TURN,Peek(VA_TURN) xor 1
   Until(ZIJOU<2) or ESC
   
   '          ________________________________
   '         |                                | 
   '         | All players are dead           | 
   '         |________________________________| 
   
   For _PLAYER=1 To 6
      If ZOMBIE(_PLAYER)
         NS=_SPRITE_NUMBER(_PLAYER)
         If(_SCREEN_SIZE=0) or(NS<4)
            Sprite Off _SPRITE_NUMBER(_PLAYER)
         Else 
            Bob Off _PLAYER-2
         End If 
      End If 
   Next _PLAYER
   
   
   
   WIN=_FALSE
   If GR>=_TOPSCORE
      WIN=_TRUE
      For I=1 To 6
         If TEAM_GAME
            WIN=WIN and((I=GRP) or(I=TEAM_MATE(GRP)) or(SCORE(I)<>GR))
         Else 
            WIN=WIN and((I=GRP) or(SCORE(I)<>GR))
         End If 
      Next I
   End If 
   
   If GAME_MUSIC_PLAYING
      For I=40 To 0 Step -1 : Mvolume I : Wait Vbl : Next I
      Mvolume 0
   End If 
   
   If WIN and JUST_RECORDING
      GAME_RECORD_EMPTY=_FALSE
   End If 
   
   _ANIM_FLAG_AND_PRESS_SPACE_PRINT
   
   Inc GAMES_PLAYED
   
   _FADE_OUT:
   
   GAME_FADE_OUT
   Sprite Off 
   Bob Off 
End Proc

Procedure _ANIM_FLAG_AND_PRESS_SPACE_PRINT
   If(ESC or WIN)=0
      '------------------ Is Anyone Alive ? ---------------------
      SURVIVAL_PLAYER=0
      For I=1 To 6
         If ALIVE(I)
            SURVIVAL_PLAYER=I
         End If 
      Next I
      
      If(SURVIVAL_PLAYER>0) and(_SCREEN_SIZE>0)
         For I=1 To 6
            NS=_SPRITE_NUMBER(I)
            If(I<>SURVIVAL_PLAYER) and(NS<4)
               Sprite Off NS
            End If 
         Next I
         
         X_SUM=X#(SURVIVAL_PLAYER)-160
         Y_SUM=Y#(SURVIVAL_PLAYER)-110
         X_SUM=Max(X_SUM,0)
         Y_SUM=Max(Y_SUM,0)
         X_SUM=Min(X_SUM,X_SCROLL_LIMIT)
         Y_SUM=Min(Y_SUM,Y_SCROLL_LIMIT)
         
         X_SUM=X_SUM and $FFFE
         Y_SUM=Y_SUM and $FFFE
         _VIEWED_AREA_X=_VIEWED_AREA_X and $FFFE
         _VIEWED_AREA_Y=_VIEWED_AREA_Y and $FFFE
         
         Repeat 
            _VIEWED_AREA_X=_VIEWED_AREA_X+2*Sgn(X_SUM-_VIEWED_AREA_X)
            _VIEWED_AREA_Y=_VIEWED_AREA_Y+2*Sgn(Y_SUM-_VIEWED_AREA_Y)
            
            NS=_SPRITE_NUMBER(SURVIVAL_PLAYER)
            NI=_SPRITE_IMAGE(SURVIVAL_PLAYER)
            _SPRITE_Y=Y#(SURVIVAL_PLAYER)+42-_VIEWED_AREA_Y
            Sprite NS,X#(SURVIVAL_PLAYER)+X Hard(0)-_VIEWED_AREA_X,_SPRITE_Y,NI+_SPRITE_INDEX_BASE
            
            Screen Offset 1,_VIEWED_AREA_X,_VIEWED_AREA_Y
            Wait Vbl 
         Until(_VIEWED_AREA_X=X_SUM) and(_VIEWED_AREA_Y=Y_SUM)
      End If 
      
      If JUST_RECORDING
         GAME_RECORD_EMPTY=_FALSE
         IS_GAME_SAVING
      Else 
         ALLOW_GAME_SAVING=_FALSE
      End If 
      
      Paste Bob 160-50/2+_VIEWED_AREA_X,160-30/2+_VIEWED_AREA_Y,PRESS_SPACE_IMAGE
      
      If SURVIVAL_PLAYER>0
         If _SCREEN_SIZE=0
           Sprite Off 
         End If 
         
         Bank Swap 1,23
         
         SURVIVAL_COLOUR=Colour($10+SURVIVAL_PLAYER)
         For I=1 To 6 : PL_RGB(I)=_PLAYER_GREY_COLOUR(I) : Next I
         PL_RGB(SURVIVAL_PLAYER)=SURVIVAL_COLOUR
         
         Fade 1,,,,,,,,,,,,,,,,,,PL_RGB(1),PL_RGB(2),PL_RGB(3),PL_RGB(4),PL_RGB(5),PL_RGB(6)
         
         Wait 12
         
         Y_FLAG=Int(Y#(SURVIVAL_PLAYER))
         Colour $17,Colour($10+SURVIVAL_PLAYER)
         Sprite 0,X#(SURVIVAL_PLAYER)+X Hard(0)-15-_VIEWED_AREA_X,Y_FLAG+42-22+BOLDLINE-_VIEWED_AREA_Y,1
         
         If _SCREEN_SIZE>0
            Screen 5
            Get Palette 1
            Screen 1
         End If 
         
         _ANIM_FLAG$="Anim 0,(1,2)(2,2)(3,2)(4,2)(5,2)(6,2)(12,2)(11,2)(10,2)(9,2)(8,2)(7,2)"
         Amal 0,_ANIM_FLAG$
         Amal On 
         
         
         If Y_FLAG<14
            For Y_CURR=Y_FLAG To 30
               Sprite 0,X#(SURVIVAL_PLAYER)+X Hard(0)-15-_VIEWED_AREA_X,Y_CURR+42-22+BOLDLINE_VIEWED_AREA_Y,
               Wait Vbl 
            Next Y_CURR
         End If 
      End If 
      
      Timer=0
      If DEMO_ON
         Repeat 
         Until Timer>DEMO_PRESS_SPACE_LIMIT
      Else 
         If _ONLY_COMPUTERS_IN_GAME
            PRESS_SPACE_LIMIT=50*4
         Else 
            PRESS_SPACE_LIMIT=999999999
         End If 
         Clear Key 
         Repeat 
            ESC_PRESSED=Key State(ESC_SCANCODE)
            SPACE_PRESSED=Key State(SPACE_SCANCODE)
            R_PRESSED=Key State(R_SCANCODE) and JUST_RECORDING
            S_PRESSED=Key State(S_SCANCODE) and ALLOW_GAME_SAVING
         Until ESC_PRESSED or SPACE_PRESSED or R_PRESSED or S_PRESSED or(Timer>PRESS_SPACE_LIMIT)
         ESC=ESC_PRESSED
         If R_PRESSED
            JUST_RECORDING=_FALSE
         End If 
         If S_PRESSED
            Trap Save GAME_SAVING_PATH$+RECORDNAME$+INDEX$,30
         End If 
      End If 
      
      If SURVIVAL_PLAYER>0
         Amal Off 
         Sprite Off 
         Bank Swap 1,23
      End If 
      
      _DO_SOUND[PRESS_SPACE_SOUND]
      Wait Vbl 
   End If 
End Proc

Procedure INITIALIZE_GAME
   
   
   '                      ________________________________
   '                     |                                | 
   '                     | Load gamerecord                | 
   '                     |________________________________| 
   
   
   If REPLAY_ALL_SAVED_ON
      Trap Load GAME_SAVING_PATH$+RECORDNAME$+INDEX$,30
   End If 
   
   If JUST_REPLAYING or JUST_RECORDING
      RECORD_BASE=Start(30)
      RECORD_MOVEMENTS_START=RECORD_BASE+$130
      Loke VA_GAME_RECORD,RECORD_MOVEMENTS_START
      
      If JUST_REPLAYING
         _DECONFIG[RECORD_BASE+$B0,False]
         SET_PLAN_USING_CONFIG[False]
      Else If JUST_RECORDING
         CONFIG[RECORD_BASE+$B0,False]
      End If 
      
   End If 
   
   '                      ________________________________
   '                     |                                | 
   '                     | Some neccessities              | 
   '                     |________________________________| 
   
   
   SOUND_FX=USER_SOUND_FX and ENABLED_SOUND
   SOUND_FX_CHANNEL=1
   
   If JUST_REPLAYING
      For I=1 To 6
         SELECTED(I)=-Peek(RECORD_BASE+72+I-1)
      Next I
      _COUNT_SELECTED
   End If 
   
   If GAMES_PLAYED>0
      _EXPECTED_GAME_LENGTH=(_EXPECTED_GAME_LENGTH*GAMES_PLAYED+CYCLES)/(GAMES_PLAYED+1)
   End If 
   
   BODY_CHANGE_COUNTER=(_EXPECTED_GAME_LENGTH*BODY_CHANGE_PERCENT)/200+Rnd((_EXPECTED_GAME_LENGTH*BODY_CHANGE_PERCENT)/100)
   BODY_CHANGE_COUNTER=Max(BODY_CHANGE_COUNTER,100)
   
   GAME_SLOWED=_FALSE
   DIE_COMPUTERS=_FALSE

   If(Prg State=-1)
      _TOPSCORE=(HRAJOU-1)*5
      If LONG_GAME
         _TOPSCORE=_TOPSCORE*2
      End If 
   Else 
      _TOPSCORE=(HRAJOU-1)*DEBUGGING_LIFELIMIT_COEFICIENT
   End If 
   
   '                     .---------------------.
   '                     |   Draw Background   |
   '                     `---------------------'
   
   If _SCREEN_SIZE>0
      Screen 2
      If Length(PLAN_BANK(PLAN))>0 : Unpack PLAN_BANK(PLAN)
      Else : Cls 0 : End If 
      
      Screen Copy 2,0,0,320,256 To 1,0,0
      Screen Copy 2,0,0,320,256 To 1,320,256
      Screen Copy 2,0,0,320,256 To 1,320,0
      Screen Copy 2,0,0,320,256 To 1,0,256
   Else 
      Screen 1
      If Length(PLAN_BANK(PLAN))>0 : Unpack PLAN_BANK(PLAN)
   Else : Cls 0 : End If 
      Ink 0 : Bar 0,256-30-3 To 320-1,256-1
   End If 
   
   
   '                     .----------------. 
   '                     |   Set bordes   | 
   '                     `----------------' 
   
   If _SCREEN_SIZE=2
      XBOTTOM=640/2-2*CENTRAL_BOX_SIZE
      XTOP=640/2+2*CENTRAL_BOX_SIZE
      YBOTTOM=(512-30)/2-2*CENTRAL_BOX_SIZE
      YTOP=(512-30)/2+2*CENTRAL_BOX_SIZE
      
      _LEFT_LIMIT=4+3+1
      _UP_LIMIT=4+3
      _RIGHT_LIMIT=320*2-5-3-1
      _DOWN_LIMIT=256*2-5-3
      
      X_SCROLL_LIMIT=640-320
      Y_SCROLL_LIMIT=512-256+31
   Else If _SCREEN_SIZE=1
      XBOTTOM=480/2-2*CENTRAL_BOX_SIZE
      XTOP=480/2+2*CENTRAL_BOX_SIZE
      YBOTTOM=(384-30)/2-2*CENTRAL_BOX_SIZE
      YTOP=(384-30)/2+2*CENTRAL_BOX_SIZE
      
      _LEFT_LIMIT=4+3+1
      _UP_LIMIT=4+3
      _RIGHT_LIMIT=320*1.5-5-3-1
      _DOWN_LIMIT=256*1.5-5-3
      
      X_SCROLL_LIMIT=480-320
      Y_SCROLL_LIMIT=384-256+31
   Else 
      XBOTTOM=320/2-CENTRAL_BOX_SIZE
      XTOP=320/2+CENTRAL_BOX_SIZE
      YBOTTOM=(256-30)/2-CENTRAL_BOX_SIZE
      YTOP=(256-30)/2+CENTRAL_BOX_SIZE
      
      _LEFT_LIMIT=4
      _UP_LIMIT=4
      _RIGHT_LIMIT=320-5
      _DOWN_LIMIT=256-30-5-2
   End If 
   
   If BOLDLINE=0
      Inc _RIGHT_LIMIT
      Inc _DOWN_LIMIT
      Inc XBOTTOM
      Inc YBOTTOM
   End If 
   
   _VIEWED_AREA_X=0
   _VIEWED_AREA_Y=0
   _DO_X_SCROLL=_FALSE
   _DO_Y_SCROLL=_FALSE
   Screen Offset 1,_VIEWED_AREA_X,_VIEWED_AREA_Y
   Sprite Off 
   
   
   
   '                     .-----------------------------------.  
   '                     |   Precount SpeedSource#           |  
   '                     `-----------------------------------'  
   
   TEMP#=SPEEDJUMP : SPEEDJUMP#=0.01*TEMP#/15
   
   For UNDER_HEAD=0 To $F
      SPEED=UNDER_HEAD
      SPEED_SOURCE#(UNDER_HEAD)=1-SPEED*SPEEDJUMP#
   Next UNDER_HEAD
   
   
   '                     .-----------------------------------.  
   '                     |   Set begin positions of players  |  
   '                     `-----------------------------------'  
   
   BEGIN_Y_MAX=256-36-10
   LIVES_ON=_FALSE
   
   For _PLAYER=1 To 6
      If SELECTED(_PLAYER)
         NC=_TRUE : Rem New Coordinates  
         While NC
            If JUST_REPLAYING
               SMER(_PLAYER)=Leek(RECORD_BASE+4*(_PLAYER-1))
               If SMER(_PLAYER)>=SMERU
                  SMER(_PLAYER)=SMERU-1
               End If 
               ANGLE#=ANGLE_CONSTANT#*SMER(_PLAYER)
               X#(_PLAYER)=Leek(RECORD_BASE+24+4*(_PLAYER-1))
               Y#(_PLAYER)=Leek(RECORD_BASE+48+4*(_PLAYER-1))
            Else 
               SMER(_PLAYER)=Rnd(SMERU)
               RADIUS=Rnd(160)+40
               ANGLE#=ANGLE_CONSTANT#*SMER(_PLAYER)
               X#(_PLAYER)=145-Sin(ANGLE#)*RADIUS
               Y#(_PLAYER)=127-Cos(ANGLE#)*RADIUS
               X#(_PLAYER)=Int(X#(_PLAYER))
               Y#(_PLAYER)=Int(Y#(_PLAYER))
            End If 
            
            NC=_FALSE
            NC=NC or(X#(_PLAYER)<10) or(X#(_PLAYER)>270) or(Y#(_PLAYER)<10) or(Y#(_PLAYER)>BEGIN_Y_MAX)
            NC=NC or((X#(_PLAYER)>XBOTTOM-10) and(X#(_PLAYER)<XTOP+10)) or((Y#(_PLAYER)>YBOTTOM-10) and(Y#(_PLAYER)<YTOP+10))
            If _PLAYER>1
               For I=1 To _PLAYER-1
                  If SELECTED(I)
                     NC=NC or(Abs(X#(I)-X#(_PLAYER))<15) and(Abs(Y#(I)-Y#(_PLAYER))<15)
                  End If 
               Next I
            End If 
         Wend 
         
         If JUST_RECORDING
            Loke RECORD_BASE+4*(_PLAYER-1),SMER(_PLAYER)
            Loke RECORD_BASE+24+4*(_PLAYER-1),Int(X#(_PLAYER))
            Loke RECORD_BASE+48+4*(_PLAYER-1),Int(Y#(_PLAYER))
         End If 
         
         If JUST_RECORDING or JUST_REPLAYING
            LINE_COUNTER(_PLAYER)=LINE_LENGTH+6
         Else 
            LINE_COUNTER(_PLAYER)=LINE_LENGTH+Rnd(12)-6
         End If 
         
         
         SPACE_COUNTER(_PLAYER)=-1
         SPEED_PERCENT#(_PLAYER)=1
         TURNING(_PLAYER)=0
         AUCH_PROTECTION(_PLAYER)=False
         LIVES(_PLAYER)=_TOP_LIVES(_PLAYER)
         LIVES_ON=LIVES_ON or(_TOP_LIVES(_PLAYER)>0)
         _PLAYER_RECORD((_PLAYER-1))=0
         BOUND_THIS_ROUND(_PLAYER)=False
         WIND_FACTOR#(_PLAYER)=1.0
         STAYED_ALIVE_BONUS(_PLAYER)=1
         ZOMBIE(_PLAYER)=_FALSE
         LINE_LENGTH_(_PLAYER)=LINE_LENGTH
         SPACE_LENGTH_(_PLAYER)=SPACE_LENGTH
      End If 

      SEMIALIVE(_PLAYER)=SELECTED(_PLAYER)
      ALIVE(_PLAYER)=SELECTED(_PLAYER)
   Next _PLAYER
   
   
   '                     .----------------------------------. 
   '                     |   Draw bordes, scores and lives  | 
   '                     `----------------------------------' 
   
   
   INITIALIZE_GAME____DRAW_BORDERS
   MAKE_SCOREPANEL
   _DRAW_SCORE
   
   
   '                      ________________________________
   '                     |                                | 
   '                     | Set Colours                    | 
   '                     |________________________________| 
   
   If SURPRISING_START
      P_COLOR(1)=Rnd(5)+1
      For _PLAYER=2 To 6
         C=Rnd(5)+1
         Repeat 
            CORRECT=_TRUE
            Add C,1,1 To 6
            For I=1 To _PLAYER-1
               If P_COLOR(I)=C : CORRECT=_FALSE : End If 
            Next I
         Until CORRECT
         P_COLOR(_PLAYER)=C
      Next _PLAYER
      For _PLAYER=1 To 6
         P_COLOR(_PLAYER)=PL_DEF_COLOR(P_COLOR(_PLAYER))
      Next _PLAYER
   Else 
      For _PLAYER=1 To 6
         P_COLOR(_PLAYER)=PL_DEF_COLOR(_PLAYER)
      Next _PLAYER
   End If 
   
   If _SCREEN_SIZE>0
      Sprite 4,0+X Hard(0),4+42,LATERAL_LEFT
      Sprite 5,320-5+X Hard(0),4+42,LATERAL_RIGHT
   End If 
   Sprite Off 6
   Sprite Off 7
   
   '                      ______________________________________
   '                     |                                      | 
   '                     | Let all players know their positions | 
   '                     |______________________________________| 
   
   Screen 1
   GAME_FADE_UP
   INIT_PUTPIX_STRATEGY_SIN_ATAN
   
   ESC=False
   
   If SURPRISING_START
   Else 
      _ANIM_FLAG$="Anim 1,(1,3)(2,2)(3,3)(4,2)(5,3)(6,2)(12,3)(11,2)(10,3)(9,2)(8,3)(7,2)(1,3)(2,2)(3,3)"
      Bank Swap 1,23
      For I=1 To 6
         If SELECTED(I) and(ESC=False)
            Volume 1,40
            _DO_SOUND[ARROW_SOUND]
            Colour $17,Colour($10+I)
            If _SCREEN_SIZE>0
               Screen 5
               Get Palette 1
               Screen 1
            End If 
            
            Sprite 0,X#(I)+X Hard(0)-15,Y#(I)+42-22+BOLDLINE,1
            Amal 0,_ANIM_FLAG$
            Amal On 
            Wait 2
            While Chanan(0) and(ESC=False)
               If Key State(ESC_SCANCODE)
                  ESC=True
               End If 
            Wend 
            Dreg(0)=X#(I) : Dreg(1)=Y#(I) : Dreg(2)=$10+I
            Call(PA_CURRENT_PIX)
            Sprite Off 0
            Wait Vbl 
         End If 
         If ESC
            Exit 
         End If 
      Next I
      Amal Off 
      For I=0 To 3
         Sprite Off I
      Next I
      Bank Swap 1,23
   End If 
   
   '                      ______________________________________
   '                     |                                      | 
   '                     | Set begin possitions of sprites      | 
   '                     |______________________________________| 
   
   For I=1 To 6
      If SELECTED(I)
         NS=_SPRITE_NUMBER(I)
         If(_SCREEN_SIZE=0) or(NS<4)
            NI=_SPRITE_IMAGE(I)
            Sprite NS,X#(I)+X Hard(0),Y#(I)+42,NI+_SPRITE_INDEX_BASE
         Else 
            Bob I-2,X#(I),Y#(I),_BOB_PLAYER_IMAGE(I-3,Abs(BOLDLINE))
            _BOBS_USED=_TRUE : Bob Update Off 
         End If 
      End If 
   Next I
   
   INITIALIZE_GAME____SET_RATE_VARIABLES
   
   J_REPLAYING_OR_J_RECORDING=JUST_REPLAYING or JUST_RECORDING
   TURBOLIMIT=0
   GO_FOR_COMPUTURBO=_FALSE
   If TURBO
      TURBOLIMIT=-1
   Else If(_ONLY_COMPUTERS_IN_GAME=_FALSE)
      GO_FOR_COMPUTURBO=COMPUTURBO or COMPUDEATH
   End If 
   
   If WIND
      WIND_ANGLE=Rnd(SMERU-1)
      WIND_STRENGTH#=WIND_STRENGTH
      WIND_STRENGTH#=WIND_STRENGTH#*0.08
   End If 
   
   
   SEMIALIVE(0)=False
   Clear Key 
   
   ' Paper 0 : Pen $12 : Locate 1,1 : Print BODY_CHANGE_COUNTER;" ";_EXPECTED_GAME_LENGTH;" ";BODY_CHANGE_PERCENT 
   
End Proc
Procedure INITIALIZE_GAME____DRAW_BORDERS
   
   Screen 1
   If _SCREEN_SIZE=2
      Ink 0 : Box 5,4 To 640-6,512-5
      Ink $D : Box 6,5 To 640-7,512-6
      Ink $10 : Box 7,6 To 640-8,512-7
      Ink 0 : Box 8,7 To 640-9,512-8
   Else If _SCREEN_SIZE=1
      Ink 0 : Box 5,4 To 480-6,384-5
      Ink $D : Box 6,5 To 480-7,384-6
      Ink $10 : Box 7,6 To 480-8,384-7
      Ink 0 : Box 8,7 To 480-9,384-8
   Else 
      _DRAW_SMALL_WOOD_FRAME
      Ink 0 : Box 4,4 To 320-5,256-32-5
   End If 
   
   If CENTRAL_BOX=1
      Ink 0 : Bar XBOTTOM,YBOTTOM To XTOP+1,YTOP+1
      If _SCREEN_SIZE>0
         Ink $10 : Box XBOTTOM+1,YBOTTOM+1 To XTOP+1-1,YTOP+1-1
         Ink $D : Box XBOTTOM+2,YBOTTOM+2 To XTOP+1-2,YTOP+1-2
      Else 
         Get Bob 100,0,10 To 5,10+YTOP-YBOTTOM
         Paste Bob XTOP-3,YBOTTOM+1,100
         Paste Bob XBOTTOM-(16-5),YBOTTOM+1,100+$8000
         
         Get Bob 100,XBOTTOM+3,0 To XTOP-3,5
         Paste Bob XBOTTOM+4,YTOP-3,100
         Paste Bob XBOTTOM+4,YBOTTOM,100+$4000 : Del Bob 100
      End If 
   End If 
End Proc
Procedure INITIALIZE_GAME____SET_RATE_VARIABLES
   
   If RATEMODE=1
      RATE_LENGTH#=USER_RATE_LENGTH*2
      STILL_SPEEDING_UP=True
      
      RATE#=0.5
      RATEJUMP#=0.01*(FINAL_RATE-50)/RATE_LENGTH#
      FINAL_RATE#=FINAL_RATE/100.0
      
      _MUSIC_TEMPO#=7+50/7.0
      _MUSIC_TEMPO_JUMP#=(FINAL_RATE-50)/RATE_LENGTH#/7.0
   Else 
      STILL_SPEEDING_UP=False
      RATE#=FINAL_RATE*0.01
      _MUSIC_TEMPO#=7+FINAL_RATE/7.0
   End If 
   
   If GAME_MUSIC_PLAYING
      Tempo _MUSIC_TEMPO#
   End If 
   
End Proc
Procedure INITIALIZE_GAMESET
   For I=1 To 6 : SCORE(I)=0 : Next I
   GR=0 : GRP=1 : WIN=False
   GAME_MUSIC_PLAYING=((_MUSIC_ON=1) and(DEMO_ON=False))
   
   JUST_REPLAYING=USER_REPLAYING or REPLAY_ALL_SAVED_ON
   JUST_RECORDING=USER_RECORDING
   
   If USER_RECORDING
      For I=1 To 6
         Poke(RECORD_BASE+72+I-1),-SELECTED(I)
      Next I
   Else If USER_REPLAYING
      If Length(31)=0
         Reserve As Work 31,CONFIG_LENGTH
      End If 
      CONFIG[Start(31),False]
   End If 
   
   If REPLAY_ALL_SAVED_ON
      INDEX=0 : _EXISTS_INDEX=False
      Repeat 
         INDEX$=Str$(INDEX)-" " : INDEX$=String$("0",2-Len(INDEX$))+INDEX$
         _EXISTS_INDEX=_EXISTS_INDEX or Exist(GAME_SAVING_PATH$+RECORDNAME$+INDEX$)
         Inc INDEX
      Until _EXISTS_INDEX or(INDEX=100)
      Dec INDEX
      If _EXISTS_INDEX
         If Length(31)=0
            Reserve As Work 31,CONFIG_LENGTH
         End If 
         CONFIG[Start(31),False]
      End If 
   End If 
   
   _ONLY_COMPUTERS_IN_GAME=_TRUE
   For _PLAYER=1 To 6
      If(_PLAYER_TYPE(_PLAYER)=1) or(_PLAYER_TYPE(_PLAYER)=3)
      _ONLY_COMPUTERS_IN_GAME=_FALSE : End If 
   Next 
   
   If _SCREEN_SIZE>0
      Screen 2 : Palette 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
      Screen Close 1
      Screen Open 1,640,512,32,Lowres
      Flash Off : Curs Off : Hide On 
      Screen Display 1,128,42,320,256-30
      Screen Offset 1,0,0
      Set Font FONT_NUMBER
   End If 
   
   GAMES_PLAYED=0
   _EXPECTED_GAME_LENGTH=(1000+250*HRAJOU)*(2^_SCREEN_SIZE)
End Proc
Procedure INITIALIZE_GAMESET____MIDDLE_PART
   If GAME_MUSIC_PLAYING
      Volume 0 : Music 1
   End If 
   
   
   Screen Open 4,640,30,16,Hires
   Flash Off : Curs Off : Hide On 
   Screen Hide 4
   
   Screen Open 3,640,30,16,Hires
   Flash Off : Curs Off : Hide On 
   Screen Display 3,128,42+300,640,30
   
   If _SCREEN_SIZE>0
      Screen Open 5,320,8,32,Lowres
      Flash Off : Curs Off : Hide On 
      Screen Display 5,128,42,320,4
      
      Paste Bob 0,0,HORIZONTAL_WOOD_IMAGE
      Paste Bob 160,0,HORIZONTAL_WOOD_IMAGE
      Paste Bob 0,0,CORNER_WOOD_IMAGE
      Paste Bob 320-16,0,CORNER_WOOD_IMAGE+$8000
      Ink 0 : Draw 5,0 To 5,4 : Draw 320-6,0 To 320-6,4
      
      Screen Open 6,320,8,32,Lowres
      Flash Off : Curs Off : Hide On 
      Screen Display 6,128,42+256-30-5,320,4
      
      Paste Bob 0,0,HORIZONTAL_WOOD_IMAGE+$4000
      Paste Bob 160,0,HORIZONTAL_WOOD_IMAGE+$4000
      Paste Bob 0,0,CORNER_WOOD_IMAGE
      Paste Bob 320-16,0,CORNER_WOOD_IMAGE+$8000
      Ink 0 : Draw 5,0 To 5,4 : Draw 320-6,0 To 320-6,4
   End If 
End Proc

Procedure ICON_AND_MUSIC_CARE_BEFORE_GAMESET
   
   '~~~ Care about music ~~~
   
   If GAME_MUSIC_PLAYING
      If Not GAME_MUSIC_IN_CHIP_RAM
         Erase 15
         DUENIX_REQUEST
         If Exist(PATH$+"Duming")
            Load PATH$+"Duming",3
         Else 
            End 
         End If 
      End If 
   End If 
   
   '~~~ Pred gamesou swapni icony~~~
   Bank Swap 2,4
   
End Proc
Procedure ICON_AND_MUSIC_CARE_AFTER_GAMESET
   
   '~~~ Vrat icony, sycaku ~~~
   Bank Swap 2,4
   
   '~~~ Vrat muziku, sycaku ~~~ 
   
   If GAME_MUSIC_PLAYING
      Volume 0 : Music Off 
      If Not GAME_MUSIC_IN_CHIP_RAM
         Erase 3
         DUENIX_REQUEST
         If Exist(PATH$+"LifeMotion")
            Load PATH$+"LifeMotion",15
         Else 
            Erase All : End 
         End If 
      End If 
   End If 
   
   If(DEMO_ON=False) and(_MUSIC_ON=1)
      Track Play 15
   End If 
End Proc
Procedure GAME_FADE_UP
   If PLAN=0
      Fade 1,$0,$1,$2,$3,$4,$15,$115,$116,$227,$228,$339,$33A,$459,$669,$779,$778
   Else If PLAN=2
      Fade 1,0,UPP(1),UPP(2),UPP(3),UPP(4),UPP(5),UPP(6),UPP(7),UPP(8),UPP(9),UPP(10),UPP(11),UPP(12),UPP(13),UPP(14),UPP(15)
   Else 
      Fade 1,0,SPP(1),SPP(2),SPP(3),SPP(4),SPP(5),SPP(6),SPP(7),SPP(8),SPP(9),SPP(10),SPP(11),SPP(12),SPP(13),SPP(14),SPP(15)
   End If 
   
   Wait 14
   Fade 1,,,,,,,,,,,,,,,,,,,,,,,,,$810,$A30,$B40,$C50,$D60,$E70,$F71,$F63
   If _SCREEN_SIZE>0
      Screen 5
      Palette ,,,,,,,,,,,,,,,,Colour($A),P_COLOR(1),P_COLOR(2),P_COLOR(3),P_COLOR(4),P_COLOR(5),P_COLOR(6),$EEE,$810,$A30,$B40,$C50,$D60,$E70,$F71,$F63
      Screen 6
      Palette ,,,,,,,,,,,,,,,,Colour($A),P_COLOR(1),P_COLOR(2),P_COLOR(3),P_COLOR(4),P_COLOR(5),P_COLOR(6),$EEE,$810,$A30,$B40,$C50,$D60,$E70,$F71,$F63
      Screen 1
   End If 
   Wait 14
   Fade 1,,,,,,,,,,,,,,,,,Colour($A),P_COLOR(1),P_COLOR(2),P_COLOR(3),P_COLOR(4),P_COLOR(5),P_COLOR(6),$EEE
   '$EEE,$DDD,$1F1,$F6E,$FF0,$5AF,$EE,$EEE
   
   ROLL_SCORE_IN
End Proc
Procedure GAME_FADE_OUT
   Fade 1,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0
   Wait 14
   Fade 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0
   If _SCREEN_SIZE>0
      Screen 5
      Palette ,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
      Screen 6
      Palette ,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
      Screen 1
   End If 
   '   Wait 14
   
   For I=256-30 To 300 Step 5
      Screen Display 3,128,42+I,640,30
      Wait Vbl 
   Next I
   
End Proc
Procedure ROLL_SCORE_IN
   Screen 3
   PAL=Rnd(4)
   If PAL=1
      Palette $0,$200,$410,$620,$930,$B40,$D50,$F60,$430,$540,PL_DEF_COLOR(1),PL_DEF_COLOR(2),PL_DEF_COLOR(3),PL_DEF_COLOR(4),PL_DEF_COLOR(5),PL_DEF_COLOR(6)
   Else If PAL=2
      Palette $0,$200,$500,$710,$A20,$C30,$E40,$F50,$430,$540,PL_DEF_COLOR(1),PL_DEF_COLOR(2),PL_DEF_COLOR(3),PL_DEF_COLOR(4),PL_DEF_COLOR(5),PL_DEF_COLOR(6)
   Else If PAL=3
      Palette $0,$112,$222,$332,$442,$552,$662,$772,$530,$740,PL_DEF_COLOR(1),PL_DEF_COLOR(2),PL_DEF_COLOR(3),PL_DEF_COLOR(4),PL_DEF_COLOR(5),PL_DEF_COLOR(6)
   Else If PAL=4
      Palette $0,$110,$230,$440,$750,$960,$B70,$D80,$31,$42,PL_DEF_COLOR(1),PL_DEF_COLOR(2),PL_DEF_COLOR(3),PL_DEF_COLOR(4),PL_DEF_COLOR(5),PL_DEF_COLOR(6)
   Else 
      Palette $0,$11,$32,$143,$453,$663,$873,$A83,$33,$44,PL_DEF_COLOR(1),PL_DEF_COLOR(2),PL_DEF_COLOR(3),PL_DEF_COLOR(4),PL_DEF_COLOR(5),PL_DEF_COLOR(6)
   End If 
   Screen 1
   Wait Vbl 
   
   For I=300 To 256-20 Step -5
      Screen Display 3,128,42+I,640,30
      Wait Vbl 
   Next I
   For I=256-20 To 256-25 Step -5
      Screen Display 3,128,42+I,640,30
      Wait Vbl 
   Next I
End Proc
Procedure WINNERS_AND_LOSERS
   'toto je nutne, aby winnerprint vytiskl vsechny selectedy  
   
   For I=1 To 6 : SEMIALIVE(I)=SELECTED(I) : Next I
   
   MAKE_SCOREPANEL
   _DRAW_SCORE
   
   WINNER=GRP : Rem winner already known 
   LOSER=GRP : Rem zatim! 
   
   '          ________________________________
   '         |                                |   
   '         | Find all losers                |     
   '         |________________________________| 
   
   
   For I=1 To 6
      If SELECTED(I) and(SCORE(I)<SCORE(LOSER))
         LOSER=I
      End If 
   Next I
   
   '      ==  Co kdyby jich bylo vic ! ==   
   
   LOWEST_SCORE=SCORE(LOSER)
   NUMBER_OF_LOSERS=0
   For I=1 To 6
      If(SCORE(I)=LOWEST_SCORE) and SELECTED(I)
         Inc NUMBER_OF_LOSERS
      End If 
   Next I
   
   '          ________________________________
   '         |                                |   
   '         | Music'n Backgorund             |     
   '         |________________________________| 
   
   
   Music Stop 
   If _MUSIC_ON : Track Play WINNER_MUSIC__BANK : End If 
   
   Screen 2
   If Length(PLAN_BANK(PLAN))>0 : Unpack PLAN_BANK(PLAN)
Else : Cls 0 : End If 
   
   
   Screen 2 : Palette 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
   Screen Close 1
   
   Screen Open 1,320,60,32,Lowres
   Flash Off : Curs Off : Hide On 
   Screen Copy 2,0,0,320,60 To 1,0,0
   Sprite Off 
   Screen Display 1,128,42,320,60
   
   _DRAW_WINNER_WOOD_FRAME[60]
   
   Screen Open 7,320,160,32,Lowres
   Flash Off : Curs Off : Hide On 
   Screen Display 7,128,42+60+3,320,160
   Screen Copy 2,0,63,320,63+160 To 7,0,0
   
   _DRAW_WINNER_WOOD_FRAME[160]
   
   Screen 2
   
   
   '          ________________________________
   '         |                                |   
   '         | Write all texts                |     
   '         |________________________________| 
   
   
   
   HLASKA$=THE_WINNER$
   Cls 0 : Ink $10+WINNER,0 : Text(40-Len(HLASKA$))*4,40-10,HLASKA$
   
   If NUMBER_OF_LOSERS=1
      Randomize Timer
      If Rnd(1)=0
         HLASKA$=THE_LOSER1$
      Else 
         HLASKA$=THE_LOSER2$
      End If 
      Ink $10+LOSER,0 : Text(40-Len(HLASKA$))*4,90,HLASKA$
   Else 
      HLASKA$=THE_LOSERS$
      CURRENT_LOSER=0
      For I=1 To 6
         If(SCORE(I)=LOWEST_SCORE) and SELECTED(I)
            Ink $10+I,0 : Text(40-Len(HLASKA$))*4,CURRENT_LOSER*20+90,HLASKA$
            Inc CURRENT_LOSER
         End If 
      Next I
   End If 
   
   '          ________________________________
   '         |                                |   
   '         | Fade Up and wait for any key   |     
   '         |________________________________| 
   
   
   Get Block 1,0,0,320,80,1
   Screen 1 : Put Block 1 : Del Block 1
   Screen 2 : Get Block 1,0,63,320,160,1
   Screen 7 : Put Block 1,0,0 : Del Block 1
   
   Screen 1
   Fade 1,$0,$101,$201,$311,$412,$512,$623,$723,$824,$935,$A35,$B36,$C46,$D47,$E47,$F48,$F17,PL_DEF_COLOR(1),PL_DEF_COLOR(2),PL_DEF_COLOR(3),PL_DEF_COLOR(4),PL_DEF_COLOR(5),PL_DEF_COLOR(6),$EEE,$810,$A30,$B40,$C50,$D60,$E70,$F71,$F63
   ROLL_SCORE_IN
   Screen 7
   Fade 1,$0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$A,$B,$C,$D,$E,$F,$F17,PL_DEF_COLOR(1),PL_DEF_COLOR(2),PL_DEF_COLOR(3),PL_DEF_COLOR(4),PL_DEF_COLOR(5),PL_DEF_COLOR(6),$EEE,$10,$111,$222,$333,$444,$555,$666,$777
   
   _ANIM_FLAG$="Anim 0,(1,3)(2,2)(3,3)(4,2)(5,3)(6,2)(12,3)(11,2)(10,3)(9,2)(8,3)(7,2)"
   Bank Swap 1,23
   Colour $17,Colour($10+GRP)
   Sprite 0,40+X Hard(0),42+23-5,1
   Sprite 4,320-40-20+X Hard(0),42+23-5,1
   Amal 0,_ANIM_FLAG$
   Amal 4,_ANIM_FLAG$
   Amal On 
   
   Wait 10 : Clear Key : Timer=0
   Repeat : A$=Inkey$ : Until(A$<>"") or(Timer>50*(60+4))
   
   Amal Off : Sprite Off 
   Bank Swap 1,23
   
   GAME_FADE_OUT
   Screen 1
   Fade 1
   Wait 14
   Screen Close 7
   
   Track Stop 
   
End Proc
Procedure IS_GAME_SAVING
   If Exist("Duenrecord:")
      Edit 
      GAME_SAVING_PATH$="DuenRecord:"
   Else 
      If Not Exist("ram:DuenRecord/")
         Mkdir "ram:DuenRecord"
      End If 
      GAME_SAVING_PATH$="ram:DuenRecord/"
   End If 
   INDEX=0
   _FREE_INDEX=False
   Repeat 
      INDEX$=Str$(INDEX)-" " : INDEX$=String$("0",2-Len(INDEX$))+INDEX$
      If Not Exist(GAME_SAVING_PATH$+RECORDNAME$+INDEX$)
         _FREE_INDEX=True
      End If 
      Inc INDEX
   Until _FREE_INDEX or(INDEX=100)
   If((PATH$="ram:DuenRecord") and(Chip Free+Fast Free<20000)) or(_FREE_INDEX=False)
      ALLOW_GAME_SAVING=False
   Else 
      ALLOW_GAME_SAVING=True
   End If 
End Proc

Procedure DEMO_ENVIRONMENT[ACTION]
   If ACTION=0
      '          ________________________________
      '         |                                | 
      '         | Store before demo              | 
      '         |________________________________| 
      
      DEMOSTORE_PLAN=PLAN
      DEMOSTORE_USER_RECORDING=USER_RECORDING
      DEMOSTORE_USER_REPLAYING=USER_REPLAYING
      DEMOSTORE_REPLAY_ALL_SAVED_ON=REPLAY_ALL_SAVED_ON
      DEMOSTORE_TEAM_GAME=TEAM_GAME
      DEMOSTORE_ENABLED_SOUND=ENABLED_SOUND
      
      '          ________________________________
      '         |                                | 
      '         | Set environment                | 
      '         |________________________________| 
      
      For I=1 To 6
         SELECTED(I)=0
         COMPUTER_STRATEGY(I)=0
         CYBORG(I)=0
      Next I
      SELECTED(2)=-1
      COMPUTER_STRATEGY(2)=-1
      SELECTED(4)=-1
      COMPUTER_STRATEGY(4)=-1
      
      PLAN=0
      USER_RECORDING=False
      USER_REPLAYING=False
      REPLAY_ALL_SAVED_ON=False
      TEAM_GAME=False
      ENABLED_SOUND=False
      
   Else If ACTION=1
      
      '          ________________________________
      '         |                                | 
      '         | Restore after demo            |  
      '         |________________________________| 
      
      PLAN=DEMOSTORE_PLAN
      USER_RECORDING=DEMOSTORE_USER_RECORDING
      USER_REPLAYING=DEMOSTORE_USER_REPLAYING
      REPLAY_ALL_SAVED_ON=DEMOSTORE_REPLAY_ALL_SAVED_ON
      TEAM_GAME=DEMOSTORE_TEAM_GAME
      ENABLED_SOUND=DEMOSTORE_ENABLED_SOUND
      
   End If 
End Proc
Procedure _GLOBAL_INITIALIZATION
   If(Chip Free+Fast Free)<MEMORY_REQUIREMENT
      Screen Open 3,640,256,2,Hires : Curs Off 
      Cls 0 : Paper 0 : Pen 1 : Locate 0,10
      Centre "Low memory." : Print : Print 
      Centre "Don't be surprised, if Duenix suddenly quits."
      Fade 1,0,$F5A : Wait Key : Fade 1,0,0 : Wait 10
      Screen Close 3
   End If 

   Set Input $A,-1 : Led Off 
   
   _COMPILED=(Prg State=-1)
   
   DEBUGGING_LIFELIMIT_COEFICIENT=2
   _LOAD_DUENIX_FONT=_TRUE
   
   Default Palette 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
   
   Screen Open 1,320,256,32,Lowres
   Flash Off : Curs Off : Hide On 
   
   SET_CONSTANTS
   SET_SCANCODE_CONSTANTS
   WRITE_INITDATA
   
   BEGIN_LOADING
   
   For _PLAYER=1 To 6
      SELECTED(_PLAYER)=_FALSE
      COMPUTER_STRATEGY(_PLAYER)=_FALSE
      CYBORG(_PLAYER)=_FALSE
      _PLAYER_TYPE(_PLAYER)=0
      _TOP_LIVES(_PLAYER)=0
   Next _PLAYER
   
   DEMO_ON=_FALSE
   U_THRU=_FALSE
   
   '-----------------------------This is temporary----------------------
   
   FAST_INTERFACE=False
   WIND_TURNING=_FALSE
   _PLAYER_COLOURS_SET=0
End Proc
Procedure MAIN
   _GLOBAL_INITIALIZATION
   
   Do 
      SELECTING
      
      INITIALIZE_GAMESET
      ICON_AND_MUSIC_CARE_BEFORE_GAMESET
      If REPLAY_ALL_SAVED_ON and(_EXISTS_INDEX=False)
         Bank Swap 2,4
         WRITEXY[-2,100,NO_GAMERECORD_SAVED$]
         Bank Swap 2,4
         
         SELECTING_FADE_UP
         Clear Key : Wait Key : FAST_FADE_OUT
         Goto INDEX_FAULT
      End If 
      
      INITIALIZE_GAMESET____MIDDLE_PART
      
      Repeat 
         If REPLAY_ALL_SAVED_ON
            JUST_REPLAYING=_TRUE
         End If 
         
         _COUNT_SELECTED
         INITIALIZE_GAME
         GAME
         If REPLAY_ALL_SAVED_ON
            JUST_REPLAYING=_FALSE
            _EXISTS_INDEX=False
            Repeat 
               Inc INDEX
               If INDEX<100
                  INDEX$=Str$(INDEX)-" " : INDEX$=String$("0",2-Len(INDEX$))+INDEX$
                  _EXISTS_INDEX=Exist(GAME_SAVING_PATH$+RECORDNAME$+INDEX$)
               End If 
            Until _EXISTS_INDEX or(INDEX=100)
            ESC=ESC or _EXISTS_INDEX
         End If 
      Until WIN or ESC or JUST_REPLAYING or DEMO_ON
      
      If(ESC or JUST_REPLAYING or DEMO_ON)=0
         WINNERS_AND_LOSERS
      End If 
      
      If _SCREEN_SIZE>0
         Screen Close 3
      End If 
      
      If REPLAY_ALL_SAVED_ON or USER_REPLAYING
         _DECONFIG[Start(31),False]
      End If 
      
      INDEX_FAULT:
      
      Screen 2 : Palette 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
      Screen Close 1
      Screen Open 1,320,256,32,Lowres
      Flash Off : Curs Off : Hide On 
      Set Font FONT_NUMBER
      
      ICON_AND_MUSIC_CARE_AFTER_GAMESET
      If DEMO_ON
         DEMO_ENVIRONMENT[1]
      End If 
      REALIZE_PLAYER_TYPE
   Loop 
End Proc

Procedure EXTRACT_PATH[EX$]
   '  58 je code of :   47 je code of / 
   
   EX_TOP=Len(EX$)
   If EX_TOP>0
      EX_POS=EX_TOP
      OK=False
      Repeat 
         EX_VAL=Asc(Mid$(EX$,EX_POS,1))
         If(EX_VAL=47) or(EX_VAL=58)
            OK=True
         Else 
            EX$=Left$(EX$,Len(EX$)-1)
         End If 
         Dec EX_POS
      Until(EX_POS=0) or OK
   End If 
End Proc[EX$]


'             ______________________________________   
'            |                                      \    
'            |  @ Globals                            \   
'            |________________________________________\          



Global _TRUE,_FALSE,_NOT(),_T,_F,PATH$,_COMPILED,YEAR$,RELEASE$
Global _LOAD_DUENIX_FONT,CONSUMED_TIME,DEBUGGING_LIFELIMIT_COEFICIENT

Global X#(),Y#(),SMER(),NEW_X#(),NEW_Y#(),NEW_SMER()
Global _SPRITE_NUMBER(),_SPRITE_IMAGE()
Global TURNING(),COMPUTER_STRATEGY(),CYBORG(),ALIVE()
Global SCORE(),SELECTED(),SEMIALIVE(),SPACE_COUNTER(),LINE_COUNTER()
Global BOUND_THIS_ROUND(),BOUND_COUNTER(),REDRAW_PLAYER()
Global ACCEPT_KEYSTROKE(),_KEYSTROKE_COUNTER()
Global SPEED_SOURCE#()
Global UPP(),SPP()
Global TEAM_MATE_THRU(),TEAM_MATE()
Global GS_GAME_NAME$()
Global STAYED_ALIVE_BONUS(),_PLAYER_TYPE(),_PLAYER_PROPRIETY(),NEW_PLAYER()
Global _PLAYER_GREY_COLOUR(),PL_DEF_COLOR(),P_COLOR()
Global WIND_FACTOR#()
Global _BOB_PLAYER_IMAGE()
Global _PUTPIX_QUEUE_X(),_PUTPIX_QUEUE_Y(),_PUTPIX_QUEUE_COLOUR(),_PUTPIX_QUEUE_TOP
Global _PLAYER_RECORD(),PL_RGB(),_FREE_VALUE(),LIVING_PLAYER()
Global _NEXT_SOUND_FX_CHANNEL()
Global PL_DEF_COLOR_LIGHT(),PL_DEF_COLOR_DARK()
Global WRITE_KOI82IMAGE(),WRITE_KOI82HOOK(),ZOMBIE(),LINE_LENGTH_(),SPACE_LENGTH_()

Global RIGHT_PUSHED,LEFT_PUSHED,HELP
Global GR,GRP,_TOPSCORE,LONG_GAME
Global SMERU,ANGLE_CONSTANT#,SMERU_QUARTER,SMERU_HALVE
Global ZIJOU,HRAJOU,SPACE_LENGTH,LINE_LENGTH,_DRAWING_LINE_LENGTH
Global SPEED(),SPEED_PERCENT#(),SPEEDJUMP#,SPEEDJUMP
Global RATE,FINAL_RATE,RATEMODE,SPEEDING_UP_COUNTER,STILL_SPEEDING_UP,USER_RATE_LENGTH,RATEJUMP#
Global BODY_CHANGE,BODY_CHANGE_COUNTER,BODY_CHANGE_PERCENT,_EXPECTED_GAME_LENGTH
Global GAMES_PLAYED

Global ESC,WIN
Global GAMEPLANS,GAMEPLAN,PLAN
Global _PLAYER,ANGLE#
Global XBOTTOM,YBOTTOM,XTOP,YTOP
Global BASE,BASE1,BASE2
Global GAME_MUSIC_PLAYING,GAME_SLOWED,SOUND_FX_CHANNEL
Global _SCREEN_SIZE,_VIEWED_AREA_X,_VIEWED_AREA_Y
Global _DO_X_SCROLL,_DO_Y_SCROLL,X_SCROLL_LIMIT,Y_SCROLL_LIMIT

Global _MUSIC_TEMPO_JUMP#,_MUSIC_TEMPO#
Global RATE#,FINAL_RATE#
Global OWN_PLAN_PATH$
Global _RIGHT_LIMIT,_DOWN_LIMIT,_LEFT_LIMIT,_UP_LIMIT
Global X_WORK#,Y_WORK#,X_WORK,Y_WORK
Global SFX,SFY
Global ENABLED_MUSIC,ENABLED_SOUND
Global DEMO_ON,DEMO_TIMER_LIMIT

Global HLASKA$,PAUSED,LOCALE_PATH$,FONT_NUMBER,EN$
Global RECALCULATE_ANGLE,RECALCULATE_COORDINATES
Global LIVES_ON,LIVES(),_TOP_LIVES(),AUCH_COUNTER(),AUCH_PROTECTION(),LIVES_TOP
Global NUMBER_OF_LIVING_HUMANS
Global SHORT_CONFIG,CONFIG_LENGTH

Global CENTRAL_BOX,CENTRAL_BOX_SIZE
Global WATERING,WATER_LIMIT#,WATER_LIMIT
Global ALWAYS_TURNING,USER_DIRECTIONS
Global TURBOLIMIT,TELEPORTING,BOLDLINE
Global TURBO,COMPUTURBO,GO_FOR_COMPUTURBO
Global TEAM_GAME,SPACE_KILL,BOUNCING,_MUSIC_ON,SURPRISING_START
Global USER_SOUND_FX,SOUND_FX,COMPUDEATH,DIE_COMPUTERS,ZOMBIES
Global FAST_INTERFACE,_ONE_PLAYER_GAME
Global WIND,WIND_ANGLE,WIND_STRENGTH#,WIND_STRENGTH

Global GAME_MUSIC_IN_CHIP_RAM,MEMORY_REQUIREMENT

Global _SPRITE_INDEX_BASE
Global ESC_QUITED,_SHOW_SQ_LOGO

Global ALLOW_GAME_SAVING,GAME_SAVING_PATH$,INDEX$,INDEX
Global JUST_REPLAYING,JUST_RECORDING,J_REPLAYING_OR_J_RECORDING
Global RECORDING_ALLOWED
Global USER_RECORDING,GAME_RECORD_EMPTY
Global USER_REPLAYING,REPLAY_ALL_SAVED_ON
Global _PLAYER_COLOURS_SET,NUMBER_OF_SEMIALIVES

Global R_THRU,G_THRU,E_THRU,U_THRU
Global _SIN_ANGLE#,_COS_ANGLE#
Global _EXISTS_INDEX
Global X_TESTPOINT,Y_TESTPOINT
Global REDRAW_ANY_PLAYER,_ONLY_COMPUTERS_IN_GAME
Global _BOBS_USED,CYCLES

Global DEMOSTORE_PLAYSTATE()
Global DEMOSTORE_PLAN,DEMOSTORE_USER_RECORDING
Global DEMOSTORE_USER_REPLAYING,DEMOSTORE_REPLAY_ALL_SAVED_ON
Global DEMOSTORE_TEAM_GAME,DEMOSTORE_ENABLED_SOUND

'                 ______________________________________   
'                |                                      |    
'                |  Assembler CatchPoints Globals       |    
'                |______________________________________|            


Global BITPLAN_BASE,PA_CURRENT_PIX,PA_SMALL_PIX,PA_BIG_PIX,PA_SMALL_PIX_BIGSCREEN,PA_BIG_PIX_BIGSCREEN,VA_PQ_X,VA_PQ_Y,VA_PQ_COL,VA_PQ_TOP,VA_PUTPIX_TYPE,PA_DRAW_PIXEL_QUEUE
Global VA_PLAYER_RECORD,VA_GAME_RECORD,VA_GAME_RECORD_POINTER,PA_SAVE_POSITION,PA_LOAD_POSITION
Global VA_BITPLAN4,VA_SIN_TABLE,VA_ATAN_TABLE,VA_DIRECTIONS,VA_DIRECTION,VA_XAMOSREAL,VA_YAMOSREAL,PA_STRATEGY,PA_COUNTSINANDCOS,VA_ROTATION,VA_PLAYER,VA_XHASH,VA_YHASH,VA_PLAYERSDIR,VA_PLAYERALIVE
Global VA_DIRSTEP0,VA_DIRSTEP1,VA_DIRSTEP2,VA_DIRSTEP3,VA_DIRSTEP4,VA_PLAYERSCHOICE,VA_TURN,VA_BIGSCREEN,PA_TESTPROCEDURE,PA_COUNTTESTANDSPEEDPOINTS,PA_COUNTTESTANDSPEEDPOINTS_1PIX,PA_COUNTTESTANDSPEEDPOINTS_2PIX
Global PA_COUNTSPEEDPOINT,PA_COUNTSPEEDPOINT_1PIX,PA_COUNTSPEEDPOINT_2PIX,RECORD_BASE
Global PA_COUNTSINANDCOSFIXED

'                 _____________________________  
'                |                             | 
'                | "Constants" Definitions     | 
'                |_____________________________| 

Global _ERROR_BADPATH

Global BS_LEFT_TOP,BS_MIDDLE_TOP,BS_RIGHT_TOP,BS_LEFT_MIDDLE,BS_MIDDLE_MIDDLE,BS_RIGHT_MIDDLE,BS_LEFT_BOTTOM,BS_MIDDLE_BOTTOM,BS_RIGHT_BOTTOM
Global RECORDNAME$,DEMO_PRESS_SPACE_LIMIT,CONFIG_LENGTH
Global _PLAYER_TYPE_IMAGE(),STANDARD_PLAN_PAL$()
Global NO_IMAGE(),YES_IMAGE(),RED_BOX_IMAGE(),_FREE_FOR_MANIPULATION_IMAGE,SCORE_PANEL_BACKGROUND_IMAGE,HORIZONTAL_WOOD_IMAGE,CORNER_WOOD_IMAGE,VERTICAL_WOOD_IMAGE,NOSCROLL_CORNER_IMAGE,LIFE_BOX_IMAGE,PRESS_SPACE_IMAGE
Global DUENIX_TITLE_IMAGE,DUENIX_ANIM_IMAGE,MOUSE_ON_LINE_IMAGE,_JOY_ON_LINE_IMAGE
Global LATERAL_LEFT,LATERAL_RIGHT
Global _PLAYER_GREY_COLOUR()
Global OS_LC_BOX(),OS_RC_BOX()
Global EN$,CZ_SEND$,EN_SEND$,EN_VALUE$,_ADDRESS$
Global BOUND_SOUND,TELEPORT_SOUND,DEATH_SOUND,ARROW_SOUND,PRESS_SPACE_SOUND,AUCH_SOUND,BODY_CHANGE_SOUND

Global OS_LEFT_COLUMN_TEXT$(),OS_RIGHT_COLUMN_TEXT$(),MAIN_OPTION_TEXT$(),MAIN_OPTION_E_TEXT$,MAIN_OPTION_G_TEXT$,MAIN_OPTION_R_TEXT$,MAIN_OPTION_U_TEXT$,PAGE_ONE$,MAIN_OPTION_LOADING_AND_SAVING$
Global CONFIGURATION$,_PRESS_SPACE_OR_ESCAPE$,ESCAPE_ACCEPT$,SELECTING_UPPER_TEXT$(),SELECTING_LOWER_TEXT$(),PAGE_TWO$,GAME_SETTINGS$,GAME_SETTINGS_SPACE1$,GAME_SETTINGS_SPACE2$,PAGE_FOUR$,RECORD_AND_REPLAY$,RECORD_AND_REPLAY_SPACE$
Global RR_COLUMN_TEXT$(),CREATE_USER_GS_EXPLANATION$(),PAGE_FIVE$,CREATING_USER_GAMESET$,CREATE_USER_GAMESET$,SORRY$,_MINIMUM_OF_DIRECTIONS$,_MAXIMUM_OF_DIRECTIONS$,INSERT_VOLUME$,_NOT_ALL_FILES$(),_NOT_FONT$
Global OPERATION_ABORTED$,DUENIX_CONFIG_ISNT_CONFIG$,DEF_CONFIG_LOADED$,CANT_FIND_DEF_CONFIG1$,CANT_FIND_DEF_CONFIG2$,CONFIG_SAVED_AS_DEF1$,CONFIG_SAVED_AS_DEF2$,ENTER_CONFIGNAME$,THIS_FILE_ISNT_CONFIG$,CONFIG_LOADED$,FILE_DOESNT_EXIST$
Global ENTER_NAME_OF_CONFIG_TO_SAVE$,CONFIG_SAVED$,CONFIG_NOT_SAVED$,THIS_FILE_ALREADY_EXISTS$,WANT_TO_OVERWRITE$,_ORIGINAL_CONFIG_LOADED$,ENTER_NAME_OF_CONFIG_LIST_FILE$
Global NONE_OF_FILES_WAS_CONFIG1$,NONE_OF_FILES_WAS_CONFIG2$,YOUR_NEW_GAMESET_IS_SAVED$,MORE_THAN_20_FILES1$,MORE_THAN_20_FILES2$,NAME_OF_EMPTY_GAME_IN_GAMESET$,YOU_HAVENT_RECORDED1$,YOU_HAVENT_RECORDED2$,YOU_HAVENT_RECORDED3$
Global YOU_HAVENT_SAVED_GAME1$,YOU_HAVENT_SAVED_GAME2$,YOU_HAVENT_SAVED_GAME3$,_MAXIMUM_OF_WATER_ANGLE$,PAGE_THREE$,GAMEPLAN$,THIS_IS_STANDARD_GAMEPLAN_NUMBER$,HERE_MAY_BE_YOUR_PLAN$,HERE_IS_YOUR_PLAN$,GAMEPLAN_L_TEXT$
Global GAMEPLAN_EXPLANATION$(),THIS_IS_DEFPLAN$,GAMEPLAN_KEY_TEXT$(),ENTER_NAME_OFF_IFF_TO_LOAD$,PRESS_U_TO_SELECT_USER_GAME$,SELECT_GAME$,SELECT_GAME_FROM_USERSET$,NO_GAMERECORD_SAVED$,THE_WINNER$,THE_LOSER1$,THE_LOSER2$,THE_LOSERS$
Global _LOADING$

Global A_SCANCODE,B_SCANCODE,C_SCANCODE,D_SCANCODE,E_SCANCODE,F_SCANCODE,G_SCANCODE,H_SCANCODE,I_SCANCODE,J_SCANCODE,K_SCANCODE,L_SCANCODE,M_SCANCODE,N_SCANCODE,O_SCANCODE,P_SCANCODE,Q_SCANCODE,R_SCANCODE,S_SCANCODE,T_SCANCODE,U_SCANCODE,V_SCANCODE
Global W_SCANCODE,X_SCANCODE,Y_SCANCODE,Z_SCANCODE,ESC_SCANCODE,ENTER_SCANCODE,SPACE_SCANCODE

Global DEF_PLAN__BANK,STANDARD_PLAN__BANK,OWN_PLAN__BANK,PRECOUNTED_SIN__BANK,PRECOUNTED_ATAN__BANK,DEF_GAMESET__BANK,CONFIG_TEMPORARY__BANK,USER_GAMESET__BANK,LIFE_MOTION_MUSIC__BANK,WINNER_MUSIC__BANK
Global PLAN_BANK()

'             ______________________________________ 
'            |                                      |  
'            |  Silly variables                     |  
'            |______________________________________|          


Global A$,TEMP,TEMP#,I,P