;select word from table
 
;by index
 
;in A - index HL - table
 
;out HL -adress from table
 
 
 
sel_word:
 
        add a,a
 
        ld c,a
 
        ld b,0
 
        add hl,bc
 
        ld a,(hl)
 
        inc hl
 
        ld h,(hl)
 
        ld l,a
 
        ret
 
 
 
;hl-src de-dest string limiter -  0
 
copystr_hlde:
 
        ld a,(hl)
 
        and a
 
        ret z
 
        ld (de),a
 
        inc hl
 
        inc de
 
        jr copystr_hlde
 
 
 
;------------------------
 
;-setup interrupt
 
int_set:
 
        di
 
        ld hl,0x0038
 
        ld de,int_orig
 
        ld bc,5
 
        ldir
 
        ld hl,0x0038
 
        ld a,0xC3 ;jp
 
        ld (hl),a
 
        inc hl
 
        ld de,int_proc
 
        ld a,e
 
        ld (hl),a
 
        inc hl
 
        ld a,d
 
        ld (hl),a
 
        ei
 
        ret
 
 
 
int_reset:
 
        di
 
        ld de,0x0038
 
        ld hl,int_orig
 
        ld bc,3
 
        ldir
 
        ei
 
        ret
 
 
 
int_proc
 
        push af
 
        ex af,af'
 
        push af
 
        push bc
 
        push de
 
        push hl
 
        push ix
 
        push iy
 
        exx
 
        push bc
 
        push de
 
        push hl
 
        ld a,1
 
        out (0xfe),a
 
        ld a,(setpalflag)
 
        or a
 
        call nz,setpal_proc
 
;       ld a,(setscreenflag)
 
;       or a
 
;       call nz,setscreen_proc
 
        GET_KEY
 
        ld a,c
 
        ld (keyreg),a
 
        OS_GETKEYMATRIX
 
        ld (keymatrixbc),bc
 
        ld (keymatrixde),de
 
        ld (keymatrixhl),hl
 
        ld (keymatrixix),ix
 
 
 
 
 
        ld a,0
 
wlock equ $-1        
 
        CALL nz,anim_wait
 
 
 
        ld a,0
 
        out (0xfe),a
 
 
 
        pop hl
 
        pop de
 
        pop bc
 
        exx
 
        pop iy
 
        pop ix
 
        pop hl
 
        pop de
 
        pop bc
 
        pop af
 
        ex af,af'
 
        pop af
 
int_orig ds 5
 
        jp 0x0038+5        
 
 
 
no_mus
 
          call setmusicpage
 
          ld a,(music_buf)
 
          ld hl,PLR_MUTE
 
          OS_SETMUSIC
 
          call unsetmusicpage
 
          halt
 
          ret 
 
;---------------------
 
filecreateeerror:
 
        ld hl,txt_fcreateerror
 
        jr openerror        
 
filewriteerror:
 
        call closestream_file
 
        ld hl,txt_fwriteerror
 
        jr openerror
 
filereaderror:
 
        call closestream_file
 
        ld hl,txt_freaderror
 
        jr openerror
 
dirchangeerror
 
        ld hl,txt_dircherror
 
        jr openerror
 
fileopenerror
 
        ld hl,txt_fopenerror
 
openerror:
 
        push hl
 
        ld e,6+0x80
 
        OS_SETGFX
 
        ld e,0
 
        OS_CLS
 
        pop  hl
 
        call print_hl
 
        ld hl,buf
 
        call print_hl
 
        ld hl,txt_nl
 
        call print_hl
 
        YIELDGETKEYLOOP
 
        jp cmd_quit
 
 
 
 
 
memoryerror
 
        OS_CLOSEHANDLE
 
        ld e,6+0x80
 
        OS_SETGFX
 
        ld e,0
 
        OS_CLS
 
        ld hl,txt_memoryerror
 
        call print_hl
 
        YIELDGETKEYLOOP
 
        jp cmd_quit
 
 
 
 
 
cmd_quit
 
;;      call closestream_file
 
        ld e,6+0x80
 
        OS_SETGFX
 
        call int_reset
 
;;       call disablemusic
 
        QUIT        
 
 
 
;----------------------------------------        
 
load_mus
 
        ld b,0
 
old_mus EQU $-1
 
        cp b
 
        ret z
 
        ld (old_mus),a
 
 
 
        and a
 
        jp z,no_mus
 
        
 
        call calc_mus
 
 
 
        call no_mus
 
        
 
        ;generate path to music file in 'buf'
 
        ld hl,mus_path1
 
        ld de,buf
 
        call copystr_hlde ;'copy path  'mus/' '
 
        
 
        ld a,(mus_mode)
 
        ld hl,mus_modes
 
        call sel_word
 
        call copystr_hlde ;copy "aym / s98 path"
 
        ld hl,mus_path2
 
        call copystr_hlde ;copy name without ext
 
        
 
        ld a,(mus_mode)
 
        ld hl,plr_ext
 
        call sel_word
 
        call copystr_hlde  ;copy file ext
 
        xor a
 
        ld (de),a  ;string terminator
 
 
 
 
 
 
 
        call setmusicpage
 
 
 
                ld de,buf
 
                call openstream_file
 
                or a
 
                jp nz,fileopenerror
 
 
 
                ld hl,0x3000 ;len
 
                ld de,module ;addr
 
                call readstream_file
 
                or a
 
                jp nz,filereaderror 
 
 
 
                call closestream_file
 
 
 
                ld a,0b00100000
 
                ld (SETUP),a
 
                ld hl,module
 
 
 
                call PLR_INIT        ;init music
 
 
 
                ld a,(music_buf)
 
                ld hl,PLR_PLAY
 
                OS_SETMUSIC         
 
        jp unsetmusicpage
 
 
 
calc_mus:
 
        call a_to_dec
 
 
 
        LD (mus_path2+5),A
 
        LD A,B
 
        LD (mus_path2+4),A
 
        RET        
 
 
 
a_to_dec:
 
        CP 30
 
        JR C,calc_m0
 
        SUB 30
 
        LD B,"3"
 
        JR calc_mus_f
 
calc_m0   CP 20
 
        JR C,calc_m1
 
        SUB 20
 
        LD B,"2"
 
        jr calc_mus_f
 
calc_m1   CP 10
 
        JR C,calc_m2
 
        SUB 10
 
        LD B,"1"
 
        JR calc_mus_f
 
calc_m2   LD B,"0"
 
calc_mus_f:
 
         ADD A,"0"
 
         ret
 
;------------------
 
setmusicpage
 
        OS_GETMAINPAGES
 
        ld a,e
 
        ld (tbank1),a
 
        ld a,(music_buf)
 
        SETPG4000
 
        ret
 
 
 
unsetmusicpage
 
        ld a,(tbank1)
 
        SETPG4000
 
        ret
 
 
 
;---------------------
 
 
 
store8000c000
 
        OS_GETMAINPAGES
 
        ld a,h
 
        ld (tbank2),a
 
        ld a,l
 
        ld (tbank3),a
 
        ret
 
 
 
restore8000c000
 
        ld a,(tbank2)
 
        SETPG8000
 
        ld a,(tbank3)
 
        SETPGC000        
 
        ret
 
;========================
 
storec000
 
        OS_GETMAINPAGES
 
        ld a,l
 
        ld (tbank3),a
 
        ret
 
 
 
restorec000
 
        ld a,(tbank3)
 
        SETPGC000        
 
        ret
 
;========================
 
store8000
 
        OS_GETMAINPAGES
 
        ld a,h
 
        ld (tbank2),a
 
        ret
 
 
 
restore8000
 
        ld a,(tbank2)
 
        SETPG8000        
 
        ret
 
;========================
 
 
 
 
 
 
 
getkey
 
        ld a,(keyreg)
 
        ret
 
 
 
 
 
 
 
waitkey
 
waitkey_unpress ;Wait for enter unpress
 
        ld a,(keymatrixix+1)
 
        bit 0,a
 
        jr z,waitkey_unpress
 
waitkey_loop
 
        call getkey
 
        cp NOKEY
 
        jr z,waitkey_loop
 
waitkey0
 
        ld (lastkey),a
 
        call getkey
 
        cp NOKEY
 
        jr nz,waitkey0 ; purge key buffer
 
        ld a,(lastkey)
 
        ret
 
        ;cp key_esc
 
        ;jp z,cmd_quit
 
        ;ret
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 
 
change_cp1 ;#
 
            LD A,186
 
            RET
 
change_cp2   ;@
 
          LD A,188
 
          RET
 
change_cp
 
         PUSH HL,DE
 
         LD HL,TABLE_W
 
CODEPAGE EQU $-2
 
         SUB 128
 
         LD D,0
 
         LD E,A
 
         ADD HL,DE
 
         LD A,[HL]
 
         POP DE,HL
 
         RET
 
 
 
TABLE_W  DS 40,32
 
         DB 134
 
         DS 15,32
 
         DB 194
 
         DS 7,32
 
         DB 129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160
 
         DB 161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,188,189,190,191,192,193
 
 
 
TABLE_J  DS 13,32
 
         DB 186,188 ;╨бтА░ ╨б╨Й        141 142
 
         DS 15,32
 
         DB 186,188 ;╨бтА░ ╨б╨Й        158 159
 
         DB 189,190,191,192,193,129,130,131,132,133,134,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154
 
         DB 155,156,157,158,159,160,161,162,163,164,165,166,194,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185
 
         DB 186,188,189,190,191,192,193
 
         DS 6,32
 
         DB 143
 
         DB 32,32,150 ;╨а╥Р
 
         DB 32,154,155
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;         
 
introduction
 
        ;---load resources
 
        ; '1' - load image
 
 
 
        ld hl,TABLE_J
 
        ld (CODEPAGE),hl
 
 
 
        ld hl,intro_pic
 
        call load_gfx_to_load_buf
 
 
 
 
 
        ld hl,into_text
 
        call load_ovl_to_script_buf
 
 
 
 
 
        ;ld a,0x3d
 
        ;ld (outtyp),a
 
        ;call _buffer_output
 
 
 
        call _immed_big
 
 
 
 
 
 
 
        ld hl,ovl_start
 
        ld bc,0x1702
 
        call _pradd
 
        call _ppp
 
        ld a,1
 
        ld (intro_),a
 
        ret
 
 
 
 
 
 
 
_ppp:
 
        ld a,(hl)
 
        inc hl
 
        cp 32
 
        jr  c,_ppp1
 
        cp 128
 
        call nc,change_cp
 
        CP "#"
 
        call z,change_cp1
 
        CP "@"
 
        call z,change_cp2
 
        sub 32
 
_ppp_o:        
 
        push hl
 
        call _type
 
        pop hl
 
 
 
        ld b,10
 
_ppp_o1        
 
        halt
 
        call getkey
 
        cp NOKEY
 
        jp nz,_ppp_exit        
 
        djnz _ppp_o1
 
        jr _ppp
 
 
 
 
 
 
 
_ppp1:  cp 3      ;3 end of text
 
        jp z,_ppp_exit
 
 
 
        cp 0x0a   ;0x0a next line
 
        jr z,_ppp_line_feed
 
 
 
        and a     ;0?  0 +0 end of line. pause.
 
        jr z,_ppp2
 
 
 
        ld a,"?"  ;unknown opcode print '?' char
 
        jr _ppp_o
 
_ppp2:        
 
        ld a,(hl)
 
        inc hl
 
        and a   ; second 0
 
        jr nz,_ppp
 
 
 
 
 
 
 
;double zero. end of line. pause.
 
        ld b,245
 
_ppp_halt_loop:
 
        halt
 
        call getkey
 
        cp NOKEY
 
        jr nz,_ppp_exit
 
_ppp_p2:
 
        djnz _ppp_halt_loop
 
 
 
        push hl
 
 
 
        call _clear_textbox
 
        ld bc,0x1702
 
        call _pradd
 
 
 
        pop hl
 
 
 
        jr _ppp
 
 
 
 
 
 
 
_ppp_line_feed:
 
        push hl
 
        ld bc,(CORDS)
 
        inc b
 
        ld c,0
 
        call _pradd
 
        pop hl
 
        jp _ppp
 
 
 
 
 
_ppp_exit:
 
        call clear_whole_screen
 
        ret
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
;in - none/ out - hl -point to script name to load
 
save_to_globals:
 
        ld hl,buf
 
        ld de,GLOBVARS
 
        ld b,0
 
_stg_loop:
 
        ld a,(hl)
 
        ld (de),a
 
        inc hl
 
        inc hl
 
        inc de
 
        djnz _stg_loop
 
        ld bc,6
 
        add hl,bc
 
        ret
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
;in - none/ out - hl -point to script name to load
 
globals_to_save:
 
        ld hl,buf
 
        ld de,GLOBVARS
 
        ld b,0
 
_gts_loop:
 
        ld a,(de)
 
        ld (hl),a
 
        inc hl
 
        ld (hl),0
 
        inc hl
 
        inc de
 
        djnz _gts_loop
 
        ld (hl),0
 
        inc hl
 
        ld (hl),0
 
        inc hl
 
        ld (hl),0
 
        inc hl
 
        ld (hl),0
 
        inc hl
 
        ld (hl),0
 
        inc hl
 
        ld (hl),0
 
        inc hl          ;copy global variables to save
 
 
 
        ld de,LOADED
 
        ex de,hl
 
        call copystr_hlde
 
        xor a
 
        ld (de),a ;copy loaded ovl name
 
        ret        
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
_ftp:
 
       LD HL,#4002  ;FIRST TEXT POINTER
 
        LD B,(HL)
 
        INC HL
 
        LD H,(HL)
 
        LD A,#40
 
        ADD A,H
 
        LD H,A
 
        LD L,B
 
        LD B,(HL)
 
        INC HL
 
        LD H,(HL)
 
        LD A,#40
 
        ADD A,H
 
        LD H,A
 
        LD L,B  ;HL-FIRST TEXT ADRESS
 
        RET        
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
;ыбкс╜нємбмсди хм┐ явлцд╖цои юбвщдаэ╜жэ╢аЁРма
 
_precache:
 
        LD IX,ILINK
 
        LD A,1
 
        LD (MM),A
 
        LD (SM),A
 
        LD HL,#4000
 
        LD L,(HL)
 
        LD E,(HL)
 
        INC HL
 
        LD D,(HL)
 
        LD HL,#4002
 
        LD L,(HL)
 
        INC DE
 
        LD A,E
 
        OR D
 
        RET Z
 
        DEC DE
 
        LD A,E
 
        OR D
 
        RET Z
 
        LD A,E
 
        CP (HL)
 
        JR NZ,$+6
 
        INC HL
 
        LD A,D
 
        CP (HL)
 
        RET Z
 
        LD HL,#4004
 
        LD L,(HL)
 
        LD E,(HL)
 
        INC HL
 
        LD D,(HL)
 
        LD A,D
 
        OR E
 
        RET Z
 
        DEC HL
 
        LD (TREEE),HL
 
        LD DE,#4006
 
        LD A,(DE)
 
        LD (LIMIT4),A;LOW
 
        LD A,D
 
        LD (LIMIT3),A;HI
 
        LD DE,#4000
 
        LD A,(DE)
 
        LD E,A
 
        LD (STRUCTURE),DE
 
PRECAH  LD HL,(TREEE)
 
        LD A,H
 
        CP 0
 
LIMIT3  EQU $-1
 
        JR NZ,PRECAH1
 
        LD A,L
 
        CP 0
 
LIMIT4  EQU $-1
 
        RET Z   ;END OF TREE
 
 
 
PRECAH1
 
        LD E,(HL)
 
        INC HL
 
        LD D,(HL)
 
        LD A,#40
 
        ADD A,D
 
        LD D,A
 
 
 
        LD A,(DE)
 
        LD (STORE),A
 
        INC DE
 
        LD A,(DE)
 
        LD (STORE+1),A
 
        INC DE
 
        LD A,(DE)
 
        INC A
 
        JR NZ,PRECAH2
 
        INC DE
 
        LD A,(DE)
 
        INC A
 
        JR Z,PRECAH3 ;NONE OF SUBMENU
 
        DEC DE
 
 
 
PRECAH2 LD A,(DE)
 
        LD (STORE1),A
 
        INC DE
 
        LD A,(DE)
 
        LD (STORE1+1),A
 
        DEC DE
 
        PUSH DE
 
        LD A,4
 
        CALL SEARCHING
 
        LD A,1
 
MM      EQU $-1
 
        LD (IX),A
 
        INC IX
 
        LD A,1
 
SM      EQU $-1
 
        LD (IX),A
 
        INC IX
 
        LD (IX),L
 
        INC IX
 
        LD (IX),H
 
        INC IX
 
        LD A,(SM)
 
        INC A
 
        LD (SM),A
 
        POP DE
 
        INC DE,DE
 
        LD A,(DE)
 
        INC A
 
        JR NZ,PRECAH2
 
        INC DE
 
        LD A,(DE)
 
        DEC DE
 
        INC A
 
        JR NZ,PRECAH2
 
 
 
PRECAH4 LD A,1
 
        LD (SM),A
 
        LD HL,MM
 
        INC (HL)
 
        LD HL,0
 
TREEE   EQU $-2
 
        INC HL,HL
 
        LD (TREEE),HL
 
        JP PRECAH
 
PRECAH3 LD HL,#FFFF
 
        LD (STORE1),HL
 
        LD A,2
 
        CALL SEARCHING
 
        LD A,(MM)
 
        LD (IX),A
 
        INC IX
 
        XOR A
 
        LD (IX),A
 
        INC IX
 
        LD (IX),L
 
        INC IX
 
        LD (IX),H
 
        INC IX
 
        JR PRECAH4
 
STORE   DW 0
 
STORE1  DW 0
 
 
 
SEARCHING
 
          LD (SEAR2-1),A
 
          LD HL,0
 
STRUCTURE EQU $-2
 
SEAR1   PUSH HL
 
         LD E,(HL)
 
        INC HL
 
        LD D,(HL)
 
        LD A,#40
 
        ADD A,D
 
        LD D,A
 
        LD HL,STORE
 
        LD B,4
 
SEAR2   LD A,(DE)
 
        CP (HL)
 
        JR NZ,SEAR3
 
        INC DE
 
        INC HL
 
        DJNZ SEAR2
 
        POP HL
 
        RET
 
SEAR3   POP HL
 
        INC HL,HL
 
        JR SEAR1
 
;---------------------------------------------------------------
 
 
 
;PRINT ROUTEINES WITH TOKENS
 
_print
 
        ld a,(script_buf1)
 
        SETPG4000
 
        ld a,(script_buf2)
 
        SETPG8000 
 
 
 
 
 
 
 
        LD A,(HL)
 
        INC HL
 
        CP 32
 
        JR C,PRINT1
 
        CP "%"
 
        JR Z,_print_hero_name
 
 
 
        cp 128
 
        call nc,change_cp
 
        CP "#"
 
        call z,change_cp1
 
        CP "@"
 
        call z,change_cp2
 
 
 
PRINT0  SUB 32
 
        PUSH HL
 
        CALL _type
 
        POP HL
 
        JR _print
 
 
 
PRINT1  PUSH HL
 
        LD HL,TOKENTABLE
 
        LD C,A
 
PRINT2  LD A,(HL)
 
        INC HL
 
        CP 255
 
        JR Z,PRINT4     ;END OF TABLE
 
        CP C
 
        JR Z,PRINT3     ;CODE FOUND
 
        INC HL
 
        INC HL
 
        JR PRINT2
 
PRINT3  LD A,(HL)
 
        INC HL
 
        LD H,(HL)
 
        LD L,A
 
        EX (SP),HL
 
        RET
 
PRINT4  POP HL
 
        JR _print
 
 
 
PRINT5  LD C,A
 
PRINT6  LD A,(HL)
 
        INC HL
 
        CP 255
 
        JR Z,PRINT8     ;END OF TABLE
 
        CP C
 
        JR Z,PRINT7     ;CODE FOUND
 
        INC HL
 
        INC HL
 
        JR PRINT6
 
PRINT7  LD A,(HL)
 
        INC HL
 
        LD H,(HL)
 
        LD L,A
 
        EX (SP),HL
 
        RET
 
PRINT8  POP HL
 
        JP _print
 
 
 
_print_hero_name
 
        INC HL,HL,HL
 
        PUSH HL
 
 
 
        ld hl,TABLE_W
 
        ld (CODEPAGE),HL
 
 
 
 
 
        
 
        ld a,(language)
 
        ld hl,loc_hero_name
 
        call sel_word    ;hl - point to localized name
 
 
 
PRINTA  LD A,(HL)
 
        INC HL
 
        AND A
 
        JR Z,PRINTB
 
 
 
        CP 128
 
        CALL NC,change_cp
 
 
 
        SUB 32
 
        PUSH HL
 
        CALL _type
 
        POP HL
 
        JR PRINTA
 
PRINTB  LD HL,TABLE_J
 
        ld (CODEPAGE),HL
 
        POP HL
 
        JP _print        
 
 
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
TOKENTABLE
 
        DB 00
 
        DW ENDTEXT                              ;++++
 
        DB 01
 
        DW WINCLR  ;IF PRESSED KEY              ;++++
 
        DB 03
 
        DW _print   ;SKIP UNKNOWN COMMAND       ;++++
 
        DB 04
 
        DW LOADOVL  ;04NAM_000.OVL              ;++++
 
        DB 06
 
        DW SELMUSIC ;07XX                       ;++++
 
        DB 08
 
        DW WAITKEY_SUB                          ;++++
 
        DB #0A
 
        DW LINEFEED                             ;++++
 
        DB #0F
 
        DW EXITLIGHT                            ;-
 
        DB #10
 
        DW EXITDARK     ;GAME OVER              ;++++
 
        DB #16
 
        DW FLASH ;#16XX XX-BLINKS               ;++++
 
        DB #17
 
        DW PAUSE                                ;++++
 
        DB #18
 
        DW SHAKE ;#18XX XX-SHAKES               ;++++
 
        DB #0B
 
        DW GROUP0B
 
        DB #0C
 
        DW GROUP0C
 
        DB #12
 
        DW GROUP12
 
        DB #13
 
        DW GROUP13
 
        DB #14
 
        DW GROUP14
 
        DB #15
 
        DW GROUP15
 
        DB #FF
 
TOKENTABLE0C
 
             DB 01
 
             DW GLOBTOLOC                       ;++++
 
             DB 02
 
             DW LOCTOGLOB                       ;++++
 
             DB 03
 
             DW GLOBLET                         ;++++
 
             DB 255
 
 
 
TOKENTABLE0B
 
        DB 01
 
        DW ADDNUM                               ;++++
 
        DB 2
 
        DW ADDVAR                               ;++++
 
        DB 3
 
        DW SUBVAR                               ;++++
 
        DB 5
 
        DW LOCLET                               ;++++
 
        DB 6
 
        DW SUBSTRACT                            ;++++
 
        DB 7
 
        DW SUBNUM                               ;++++
 
        DB 8
 
        DW COMPAND                              ;++++
 
        DB 9
 
        DW COMPOR                               ;++++
 
        DB #0A
 
        DW TRUECONT                             ;++++
 
        DB #0B
 
        DW GRPAND                               ;++++
 
        DB #0C
 
        DW GRPOR                                ;++++
 
        DB #14
 
        DW RANDOMIZE                            ;++++
 
        DB #32
 
        DW ISPOSITIVEGOTO                       ;++++
 
        DB #33
 
        DW ISZEROGOTO                           ;++++
 
        DB #34
 
        DW ISNEGATIVEGOTO                       ;++++
 
        DB #35
 
        DW ISNOTZEROGOTO                         ;++++
 
        DB #36
 
        DW GOTO                                 ;++++
 
        DB #39
 
        DW EXPANDGOTO                           ;++++
 
        DB 255
 
TOKENTABLE12
 
        DB 01
 
        DW MENUOFF                              ;????
 
        DB 02
 
        DW MENUON                               ;????
 
        DB 04
 
        DW SUBMENUOFF                           ;????
 
        DB 05
 
        DW SUBMENUON                            ;????
 
        DB 255
 
TOKENTABLE13
 
        DB 01
 
        DW SCREENLOAD1                          ;++++
 
        DB 02
 
        DW SCREENOUTPUT1                        ;++++
 
        DB 03
 
        DW SPRITELOAD1
 
        DB 04
 
        DW SCREENLOAD2                          ;++++
 
        DB #0F
 
        DW RESTOREBGND                          ;++++
 
        DB #10
 
        DW STOREBGND                            ;++++
 
        DB 255
 
TOKENTABLE14
 
        DB 01
 
        DW CLRVARS                              ;+++++
 
        DB 03
 
        DW CLRSCREEN                            ;+++++
 
        DB 255
 
TOKENTABLE15  ;GROUP15 IS IGNORING
 
        DB 01
 
        DW LOADANIM                             ;++++
 
        DB 03
 
        DW ANIMON                               ;++++
 
        DB 04
 
        DW ALLANIMOFF                           ;++++
 
        DB 05
 
        DW CLRANIM                              ;++++
 
        DB 255
 
GROUP0C LD DE,TOKENTABLE0C
 
        JR GROUPS
 
GROUP0B LD DE,TOKENTABLE0B
 
        JR GROUPS
 
GROUP12 LD DE,TOKENTABLE12
 
        JR GROUPS
 
GROUP13 LD DE,TOKENTABLE13
 
        JR GROUPS
 
GROUP14 LD DE,TOKENTABLE14
 
        JR GROUPS
 
GROUP15 LD DE,TOKENTABLE15
 
GROUPS  LD A,(HL)
 
        INC HL
 
        PUSH HL
 
        EX DE,HL
 
        JP PRINT5
 
ENDTEXT
 
SUBLOCK XOR A
 
        JP NC,WINCLR1
 
        LD A,#AF
 
        LD (SUBLOCK),A
 
RETURN  LD HL,0
 
        ;CALL WINCLR1
 
        JP _print
 
 
 
 
 
;=;=;=;=;=;=;=;=;=;=;
 
SELMUSIC PUSH HL
 
        LD A,(HL)
 
        CALL load_mus
 
        POP HL
 
        INC HL
 
        JP _print
 
;;;;====
 
WAITKEY_SUB
 
;TODO  - add  'wait' animation enable | disable
 
        push hl
 
        call waitkey
 
        pop hl 
 
        jp _print
 
;;;;====
 
LINEFEED LD BC,(CORDS)
 
         INC B
 
        LD C,0
 
         CALL _pradd
 
         JP _print
 
;;;;====
 
WINCLR  CALL WINCLR1
 
        JP _print
 
 
 
WINCLR1 CALL waitkey
 
WINCLR2
 
        PUSH HL
 
        CALL _clear_textbox  ;-0-0-3423566400------------------
 
        POP HL
 
COOOR   LD BC,#1500
 
        CALL _pradd
 
        ret
 
;;;;;;=====
 
LOADOVL POP DE
 
        ld de,OVL
 
        call copystr_hlde
 
        xor a
 
        ld (DE),a
 
        JP BEG
 
;;;;;;=====
 
PAUSE
 
        LD A,(HL)
 
        LD B,A
 
        INC HL
 
        PUSH HL
 
        RLCA
 
        LD B,A
 
PAUSE1  HALT
 
        HALT
 
        HALT
 
        HALT
 
        DJNZ PAUSE1
 
        POP HL
 
        JP _print
 
;;;;;-------------
 
 
 
GLOBTOLOC
 
        LD A,(HL);LOC
 
        INC HL
 
        LD B,(HL);GLOB
 
        INC HL
 
        PUSH HL
 
        LD H,HIGH GLOBVARS
 
        LD L,B
 
        LD C,(HL)
 
        LD H,HIGH LOCVARS
 
        LD L,A
 
        LD (HL),C
 
        POP HL
 
        JP _print
 
 
 
LOCTOGLOB
 
        LD A,(HL)
 
        INC HL
 
        LD B,(HL)
 
        INC HL
 
        PUSH HL
 
        LD H,HIGH LOCVARS
 
        LD L,B
 
        LD C,(HL)
 
        LD H,HIGH GLOBVARS
 
        LD L,A
 
        LD (HL),C
 
        POP HL
 
        JP _print
 
 
 
GLOBLET LD A,(HL)
 
        INC HL
 
        LD B,(HL)
 
        INC HL
 
        PUSH HL
 
        LD H,HIGH GLOBVARS
 
        LD L,A
 
        LD (HL),B
 
        POP HL
 
        JP _print        
 
 
 
LOCLET LD A,(HL)
 
        INC HL
 
        LD B,(HL)
 
        INC HL
 
        PUSH HL
 
        LD H,HIGH LOCVARS
 
        LD L,A
 
        LD (HL),B
 
        POP HL
 
        JP _print
 
 
 
ADDNUM  LD A,(HL)
 
        INC HL
 
        LD B,(HL)
 
        INC HL
 
        PUSH HL
 
        LD H,HIGH LOCVARS
 
        LD L,A
 
        LD A,(HL)
 
        ADD A,B
 
        LD (HL),A
 
        POP HL
 
        JP _print
 
ADDVAR  LD A,(HL)
 
        INC HL
 
        LD B,(HL)
 
        INC HL
 
        PUSH HL
 
        LD H,HIGH LOCVARS
 
        LD L,B
 
        LD B,(HL)
 
        LD L,A
 
        LD A,(HL)
 
        ADD A,B
 
        LD (HL),A
 
        POP HL
 
        JP _print
 
 
 
SUBVAR  LD A,(HL)
 
        INC HL
 
        LD B,(HL)
 
        INC HL
 
        PUSH HL
 
        LD H,HIGH LOCVARS
 
        LD L,B
 
        LD B,(HL)
 
        LD L,A
 
        LD A,(HL)
 
        SUB B
 
        LD (HL),A
 
        POP HL
 
        JP _print
 
 
 
SUBNUM  LD D,(HL);X
 
        INC HL
 
        LD A,(HL)  ;Y
 
        INC HL
 
        LD B,(HL)  ;Z
 
        INC HL
 
        PUSH HL
 
        LD H,HIGH LOCVARS
 
        LD L,A
 
        LD A,(HL)
 
        SUB B
 
        LD L,D
 
        LD (HL),A
 
        POP HL
 
        JP _print
 
 
 
SUBSTRACT LD D,(HL);X
 
        INC HL
 
        LD A,(HL)  ;Y
 
        INC HL
 
        LD B,(HL)  ;Z
 
        INC HL
 
        PUSH HL
 
        LD H,HIGH LOCVARS
 
        LD L,A
 
        LD A,(HL)
 
        LD L,B
 
        LD B,(HL)
 
        SUB B
 
        LD L,D
 
        LD (HL),A
 
        POP HL
 
        JP _print
 
 
 
COMPAND LD D,(HL)
 
        INC HL
 
        LD A,(HL)
 
        INC HL
 
        LD B,(HL)
 
        INC HL
 
        PUSH HL
 
        LD H,HIGH LOCVARS
 
        LD L,A
 
        LD A,(HL)
 
        CP 1
 
        JP M,COMPAND1
 
        LD L,B
 
        LD A,(HL)
 
        CP 1
 
        JP M,COMPAND1
 
        LD A,1
 
        JR COMPAND1+1
 
COMPAND1 XOR A
 
        LD L,D
 
        LD (HL),A
 
         POP HL
 
        JP _print
 
 
 
COMPOR  LD D,(HL)
 
        INC HL
 
        LD A,(HL)
 
        INC HL
 
        LD B,(HL)
 
        INC HL
 
        PUSH HL
 
        LD H,HIGH LOCVARS
 
        LD L,A
 
        LD A,(HL)
 
        CP 1
 
        JP P,COMPOR0
 
        LD L,B
 
        LD A,(HL)
 
        CP 1
 
        JP P,COMPOR0
 
        XOR A
 
        JR COMPOR1
 
COMPOR0 LD A,1
 
COMPOR1 LD L,D
 
        LD (HL),A
 
        POP HL
 
        JP _print
 
 
 
 
 
GRPAND  LD B,(HL)
 
        DEC B
 
        INC HL
 
        LD D,(HL)
 
        INC HL
 
GRPAND0 LD E,(HL)
 
        INC HL
 
        PUSH HL
 
        LD H,HIGH LOCVARS
 
        LD L,D
 
        LD A,(HL)
 
        CP 1
 
        JP M,GRPAND1
 
        LD L,E
 
        LD A,(HL)
 
        CP 1
 
        JP M,GRPAND1
 
        LD A,1
 
        JR GRPAND1+1
 
GRPAND1 XOR A
 
        LD L,D
 
        LD (HL),A
 
        POP HL
 
        DJNZ GRPAND0
 
        JP _print
 
 
 
GRPOR   LD B,(HL)
 
        DEC B
 
        INC HL
 
        LD D,(HL)
 
        INC HL
 
GRPOR0 LD E,(HL)
 
        INC HL
 
        PUSH HL
 
        LD H,HIGH LOCVARS
 
        LD L,D
 
        LD A,(HL)
 
        CP 1
 
        JP P,GRPOR2
 
        LD L,E
 
        LD A,(HL)
 
        CP 1
 
        JP P,GRPOR2
 
        XOR A
 
        JR GRPOR1
 
GRPOR2  LD A,1
 
GRPOR1  LD L,D
 
        LD (HL),A
 
        POP HL
 
        DJNZ GRPOR0
 
        JP _print
 
 
 
TRUECONT LD E,(HL)
 
         LD D,HIGH LOCVARS
 
         LD A,(DE)
 
         AND A
 
         JP Z,ENDTEXT
 
;        CP 1
 
;        JP M,ENDTEXT
 
         INC HL
 
         JP _print
 
 
 
GOTO    LD A,(HL)
 
        INC HL
 
        LD H,(HL)
 
        LD L,A
 
        LD A,#40
 
        ADD A,H
 
        LD H,A
 
        JP _print
 
 
 
ISPOSITIVEGOTO:
 
        LD E,(HL)
 
        LD D,HIGH LOCVARS
 
        INC HL
 
        LD C,(HL)
 
        INC HL
 
        LD B,(HL)
 
        INC HL
 
        LD A,(DE)
 
        CP 1
 
        JP M,_print      ;A={0 FALSE
 
        LD A,#40        ;A}0 TRUE
 
        ADD A,B
 
        LD  H,A
 
        LD L,C
 
        JP _print
 
 
 
ISZEROGOTO:
 
        LD E,(HL)
 
        LD D,HIGH LOCVARS
 
        INC HL
 
        LD C,(HL)
 
        INC HL
 
        LD B,(HL)
 
        INC HL
 
        LD A,(DE)
 
        AND A
 
        JP NZ,_print ;A{}0
 
        LD A,#40        ;A=0
 
        ADD A,B
 
        LD  H,A
 
        LD L,C
 
        JP _print
 
 
 
ISNEGATIVEGOTO:
 
         LD E,(HL)
 
        LD D,HIGH LOCVARS
 
        INC HL
 
        LD C,(HL)
 
        INC HL
 
        LD B,(HL)
 
        INC HL
 
        LD A,(DE)
 
        AND A
 
        JP P,_print      ;}=0
 
        LD A,#40    ;{0
 
        ADD A,B
 
        LD  H,A
 
        LD L,C
 
        JP _print
 
 
 
ISNOTZEROGOTO:
 
        LD E,(HL)
 
        LD D,HIGH LOCVARS
 
        INC HL
 
        LD C,(HL)
 
        INC HL
 
        LD B,(HL)
 
        INC HL
 
        LD A,(DE)
 
        and a
 
        JP z,_print      ;A={0 FALSE
 
        LD A,#40        ;A}0 TRUE
 
        ADD A,B
 
        LD  H,A
 
        LD L,C
 
        JP _print 
 
 
 
EXPANDGOTO
 
        LD E,(HL)
 
        LD D,HIGH LOCVARS
 
        LD A,(DE)
 
        ADD A,A
 
        INC HL
 
        LD D,0
 
        LD E,A
 
        ADD HL,DE
 
        LD C,(HL)
 
        INC HL
 
        LD B,(HL)
 
        EX DE,HL
 
        LD A,#40
 
        ADD A,B
 
        LD H,A
 
        LD L,C
 
 
 
EXP_GT1 INC DE
 
        LD A,(DE)
 
        CP #FF
 
        JR NZ,EXP_GT1
 
        INC DE
 
        LD A,(DE)
 
        CP #FF
 
        JR NZ,EXP_GT1
 
        INC DE
 
        ;ex de,hl
 
        LD (RETURN+1),DE
 
        LD A,#37
 
        LD (SUBLOCK),A
 
        JP _print
 
 
 
RANDOMIZE
 
        LD E,(HL)
 
        INC HL
 
        LD D,(HL)
 
        INC HL
 
        PUSH HL
 
SEED    LD HL,26356
 
        LD B,H
 
        ld C,L
 
        DB "))))"
 
        ADD HL,BC
 
        LD BC,20981
 
        ADD HL,BC
 
        LD (SEED+1),HL
 
        LD A,H
 
        ADD A,D
 
        JR NC,$-1
 
        LD D,HIGH LOCVARS
 
        LD (DE),A
 
        POP HL
 
        JP _print
 
;-------------------------------------
 
MENUOFF LD A,(HL)
 
        DEC A
 
        INC HL
 
        PUSH HL
 
        LD H,HIGH ACTMENU
 
        RLCA
 
        RLCA
 
        RLCA
 
        RLCA
 
        LD L,A
 
        XOR A
 
        LD (g_curpos),A
 
        LD (g_curpos+1),A
 
        INC A
 
        LD (HL),A
 
        POP HL
 
        JP _print
 
 
 
MENUON  LD A,(HL)
 
        DEC A
 
        INC HL
 
        PUSH HL
 
        LD H,HIGH ACTMENU
 
        RLCA
 
        RLCA
 
        RLCA
 
        RLCA
 
        LD L,A
 
        XOR A
 
        LD (HL),A
 
        LD (g_curpos),A
 
        LD (g_curpos+1),A
 
        POP HL
 
        JP _print
 
 
 
SUBMENUOFF
 
        LD A,(HL)
 
        DEC A   ;;;
 
        INC HL
 
        LD B,(HL)
 
        INC HL
 
        PUSH HL
 
        LD H,HIGH ACTMENU
 
        RLCA
 
        RLCA
 
        RLCA
 
        RLCA
 
        OR B
 
        LD L,A
 
        XOR A
 
        LD (g_curpos+1),A
 
        INC A
 
        LD (HL),A
 
        POP HL
 
        JP _print
 
 
 
SUBMENUON
 
        LD A,(HL)
 
        DEC A   ;;;;;;
 
        INC HL
 
        LD B,(HL)
 
        INC HL
 
        PUSH HL
 
        LD H,HIGH ACTMENU
 
        RLCA
 
        RLCA
 
        RLCA
 
        RLCA
 
        OR B
 
        LD L,A
 
        XOR A
 
        LD (HL),A
 
        POP HL
 
        LD (g_curpos+1),A
 
        JP _print
 
 
 
;LOAD SCREEN TO BUFFER & OUTPUT
 
SCREENLOAD1
 
        INC HL,HL
 
        LD A,(HL) ;DELAY
 
        LD (DELAY),A
 
        INC HL,HL
 
        LD A,(HL)
 
        LD (outtyp),A
 
 
 
        INC HL
 
 
 
 
 
        push hl
 
        call load_gfx_to_load_buf
 
        call _buffer_output
 
 
 
        pop hl
 
 
 
        ld de,buf
 
        call copystr_hlde
 
        inc hl
 
        JP _print
 
 
 
SCREENOUTPUT1A:
 
;out load buffer to screen by mask index8
 
        INC HL
 
        LD A,(HL) ;DELAY
 
        LD (DELAY),A
 
        INC HL,HL
 
        LD A,(HL)
 
        LD (outtyp),A
 
        INC HL
 
        LD A,(HL)
 
        INC HL,HL
 
        PUSH HL
 
        CP 3       ;SELECTOR 3-FROM OUTPUT BUFER
 
        JR Z,scrop2m   ;         4- FROM MEMORY BUFFER
 
        CALL _memory_output_mask
 
        JR scrop1
 
scrop2m:
 
        CALL _buffer_output_mask
 
scrop1m:
 
        POP HL
 
        JP _print
 
 
 
SCREENOUTPUT1  ;SHOW FROM BUFFERS
 
        INC HL
 
        ld a,(hl)
 
        cp 8
 
        jr z,SCREENOUTPUT1A
 
 
 
        INC HL
 
        LD A,(HL) ;DELAY
 
        LD (DELAY),A
 
        INC HL,HL
 
        LD A,(HL)
 
        LD (outtyp),A
 
        INC HL
 
        LD A,(HL)
 
        INC HL,HL
 
        PUSH HL
 
        CP 3       ;SELECTOR 3-FROM OUTPUT BUFER
 
        JR Z,scrop2   ;         4- FROM MEMORY BUFFER
 
        CALL _memory_output
 
        JR scrop1
 
scrop2:
 
        CALL _buffer_output
 
scrop1:
 
        POP HL
 
        JP _print
 
;--------------------
 
;LOAD SCREEN TO MEMORY
 
SCREENLOAD2
 
        INC HL,HL
 
 
 
        push hl
 
        call load_gfx_to_mem_buf
 
 
 
        pop hl
 
 
 
        ld de,buf
 
        call copystr_hlde
 
        inc hl
 
        JP _print
 
 
 
;-----CLR GLOB VARS----
 
CLRVARS  LD B,(HL)
 
         XOR A
 
         INC HL
 
CLRVARS1 LD E,(HL)
 
         LD D,HIGH GLOBVARS
 
         LD (DE),A
 
         INC HL
 
         DJNZ CLRVARS1
 
        JP _print
 
;--------------------------
 
;==========================
 
_menu:
 
        ;clear stk_menu
 
        ld hl,STK_MENU
 
        ld de,STK_MENU+1
 
        ld bc,355
 
        ld (hl),0xff
 
        ldir
 
 
 
        ld hl,ACTMENU
 
        ld (ACTTMP),hl ;
 
        ld hl,STK_MENU
 
        ld (STK_MTMP),hl 
 
        xor a
 
        ld (COUNTER),a ;....
 
        ld hl,0x1500
 
        ld (g_atpos),hl   ;...
 
 
 
        ld hl,0x4006 ; pic pointer (limiter)
 
 
 
        ld a,(hl)
 
        ld (LIMIT1),a ;low  
 
 
 
        inc hl
 
        ld a,(hl)
 
        ld b,0x40
 
        add a,b
 
        ld (LIMIT2),a ;high
 
 
 
        ld hl,0x4004 ;tree pointer
 
        ld b,(hl)
 
        inc hl
 
        ld h,(hl)
 
        ld a,0x40
 
        add a,h
 
        ld h,a
 
        ld l,b ;hl pointer to tree root
 
_menu1:
 
        ld a,0
 
LIMIT2 equ $-1
 
        cp h
 
        jr nz,_menu2
 
        ld a,0
 
LIMIT1  equ $-1
 
        cp l
 
        jp z,SELECTOR ; end of tree
 
_menu2:
 
        ld e,(hl)
 
        inc hl
 
        ld d,(hl)
 
        inc hl
 
        ld a,d
 
        or e
 
        jp z,SELECTOR ;no menu tree
 
 
 
        push hl
 
        ld bc,0
 
ACTTMP  equ $-2
 
 
 
        LD A,(BC)
 
        LD B,A
 
        LD  A,C
 
        ADD A,16
 
        LD (ACTTMP),A
 
        LD A,B
 
        AND A
 
        JP NZ,_menu5     ;NOT ACTIVE
 
        LD A,#40
 
        ADD A,D
 
        LD D,A
 
        LD HL,0
 
STK_MTMP EQU $-2
 
        LD A,(COUNTER)
 
        LD (HL),A
 
        INC HL
 
        LD (HL),E
 
        INC HL
 
        LD (HL),D
 
        INC HL
 
        LD (STK_MTMP),HL ;
 
        LD (HL),#FF
 
        EX DE,HL
 
        LD E,(HL)
 
        INC HL
 
        LD D,(HL)
 
        LD A,#40
 
        ADD A,D
 
        LD D,A
 
        INC DE ;SKIP MENUNAME NUM
 
        EX DE,HL
 
 
 
;---╨┐╨╡╤З╨░╤В╤М ╨╜╨░╨╖╨▓╨░╨╜╨╕╤П ╨╝╨╡╨╜╤О--
 
 
 
        LD BC,(g_atpos)
 
        CALL _pradd
 
 
 
_menu3:
 
        LD A,(HL)
 
        INC HL
 
        AND A
 
        JR Z,_menu4
 
        CP 128
 
        CALL NC,change_cp        
 
        SUB 32
 
        PUSH HL
 
        CALL _type
 
        POP HL
 
        JR _menu3
 
 
 
_menu4:
 
        LD A,(g_atpos) ;x-coord
 
        add a,16
 
        ld (g_atpos),a
 
        cp 64
 
        jr c,_menu5
 
 
 
        and 0x3f
 
        LD (g_atpos),A
 
 
 
        ld a,(g_atpos+1)
 
        inc a
 
        ld (g_atpos+1),a
 
_menu5
 
        LD A,0
 
COUNTER EQU $-1
 
        INC A
 
        LD (COUNTER),A
 
        POP HL
 
        JP _menu1
 
 
 
SELECTOR:
 
        ld a,8
 
        ld (_line_lenght),a
 
 
 
        LD DE,STK_MENU
 
        LD A,(g_curpos)
 
        LD L,A
 
        ADD A,A
 
        ADD A,L
 
        LD L,A
 
        LD H,0
 
        ADD HL,DE
 
        EX DE,HL
 
 
 
SELS0:
 
        ld a,(g_curpos)
 
        ld hl,MENUCURHELPER
 
        call sel_word
 
        ld (SELS4),hl
 
 
 
        call _highlight_selected
 
SELS3:
 
        call waitkey
 
 
 
        cp key_esc
 
        jp z,TO_MENU
 
 
 
        cp key_left
 
        jr z,SELS_keyleft
 
        cp key_right
 
        jp z,SELS_keyright
 
 
 
        cp key_up
 
        jr z,SELS_keyup
 
        cp key_down
 
        jr z,SELS_keydown
 
 
 
        cp key_enter
 
        jp z,SELECTED1
 
        cp ' '
 
        jp z,SELECTED1
 
        jr SELS3       
 
 
 
SELS_keyup:
 
;        ;de - modified pos in stk_menu
 
;
 
        push de        
 
        pop hl
 
 
 
        ld bc,0xfff4 ;(-12)
 
        add hl,bc
 
        ld bc,STK_MENU
 
        and a
 
        sbc hl,bc
 
        jp m,SELS3
 
        
 
        ex de,hl
 
        ld bc,-12
 
        add hl,bc
 
        ex de,hl
 
 
 
 
 
        ld hl,(SELS4)
 
        call _highlight_selected
 
        ld a,(g_curpos)
 
        add a,-4
 
        ld (g_curpos),a
 
        xor a
 
        ld (g_curpos+1),a
 
        jp SELS0
 
 
 
 
 
SELS_keydown:
 
        ;de - modified pos in stk_menu
 
        push de
 
        pop hl
 
        ld bc,12
 
        add hl,bc
 
        ld a,(hl)
 
        inc a
 
        jr  z,SELS3
 
        ex de,hl
 
 
 
        ld a,(g_curpos)
 
        add a,4
 
        ld (g_curpos),a        
 
        ld hl,(SELS4)
 
        call _highlight_selected
 
        xor a
 
        ld (g_curpos+1),a        
 
        jp SELS0   
 
 
 
 
 
SELS_keyleft:
 
        push de        
 
        pop hl
 
        ld bc,STK_MENU
 
        and a
 
        SBC HL,BC
 
        ld  a,h
 
        or l
 
        jp z,SELS3
 
        ex de,hl
 
        ld bc,3
 
        and a
 
 
 
        sbc hl,bc
 
 
 
        ex de,hl
 
        ld hl,(SELS4)
 
        call _highlight_selected
 
        ld hl,g_curpos
 
        dec (hl)
 
        xor a
 
        ld (g_curpos+1),a
 
        jp SELS0
 
SELS_keyright:
 
        push de
 
        pop hl
 
        ld bc,3
 
        add hl,bc
 
        ld a,(hl)
 
        inc a
 
        jp  z,SELS3
 
        ex de,hl
 
 
 
        ld hl,g_curpos
 
        inc (hl)        
 
        ld hl,0
 
SELS4   equ $-2
 
        call _highlight_selected
 
        xor a
 
        ld (g_curpos+1),a        
 
        jp SELS0        
 
SELECTED1:
 
        push de
 
        call WINCLR2
 
        ld hl,ACTMENU
 
        ld (ACTTMP1),hl
 
        xor a
 
        ld (COUNTER),a
 
 
 
        ;clear stk_sub
 
        ld hl,STK_SUB
 
        ld de,STK_SUB+1
 
        ld bc,355
 
        ld (hl),0xff
 
        ldir
 
 
 
        LD HL,STK_SUB
 
        LD (STK_STMP),HL
 
        LD HL,#1500
 
        LD (g_atpos),HL        
 
        POP DE
 
        LD A,(DE)
 
        LD (RESULT),A;╤Б╨╛╤Е╤А╨░╨╜╤П╨╡╨╝ ╨╜╨╛╨╝╨╡╤А ╨▓╤Л╨▒╤А╨░╨╜╨╜╨╛╨│╨╛ ╨╝╨╡╨╜╤О
 
        RLCA
 
        RLCA
 
        RLCA
 
        RLCA
 
        INC A
 
        LD (ACTTMP1),A
 
        INC DE
 
        LD A,(DE)
 
        LD L,A
 
        INC DE
 
        LD A,(DE)
 
        LD H,A
 
        INC HL,HL
 
        ;HL-TREE          SUBMENU NAMES
 
SMENU1:
 
        LD E,(HL)
 
        INC HL
 
        LD D,(HL)
 
        INC HL,DE
 
        LD A,D
 
        OR E
 
        JP Z,SELECTOR2
 
        DEC DE
 
        PUSH HL
 
        LD BC,0
 
ACTTMP1 EQU $-2
 
 
 
        LD A,(BC)
 
        LD B,A
 
        LD  A,C
 
        INC A
 
        LD (ACTTMP1),A
 
        LD A,B
 
        AND A
 
        JP NZ,SMENU5    ;IF NOT ACTIVE
 
        LD A,0x40
 
        ADD A,D
 
        LD D,A
 
;DE - ADR OF SUBMENU NAME1              ;
 
        LD HL,0                         ;
 
STK_STMP EQU $-2                        ;
 
        LD A,(COUNTER)                  ;
 
        LD (HL),A                       ;
 
        INC HL                          ;
 
        LD (STK_STMP),HL ;              ;
 
        LD (HL),#FF                     ;
 
 
 
        INC DE ;SKIP MENUNAME NUMBER
 
        EX DE,HL        
 
;HL-NAME OF MENUITEM
 
 
 
;---╨┐╨╡╤З╨░╤В╤М ╨╜╨░╨╖╨▓╨░╨╜╨╕╤П ╨╝╨╡╨╜╤О--
 
 
 
        LD BC,(g_atpos)
 
        CALL _pradd
 
 
 
SMENU3
 
        LD A,(HL)
 
        INC HL
 
        AND A
 
        JR Z,SMENU4
 
        CP 128
 
        CALL NC,change_cp        
 
        SUB 32
 
        PUSH HL
 
        CALL _type
 
        POP HL
 
        JR SMENU3
 
 
 
SMENU4:
 
        LD A,(g_atpos) ;x-coord
 
        add a,16
 
        ld (g_atpos),a
 
        cp 64
 
        jr c,SMENU5
 
 
 
        and 0x3f
 
        LD (g_atpos),A
 
 
 
        ld a,(g_atpos+1)
 
        inc a
 
        ld (g_atpos+1),a
 
 
 
SMENU5  LD HL,COUNTER
 
        INC (HL)
 
        POP HL
 
        JP SMENU1
 
 
 
SELECTOR2:
 
        ld hl,(STK_STMP)
 
        ld de,STK_SUB
 
        and a
 
        sbc hl,de
 
        ld a,h
 
        or l
 
        jp z,RESULT1
 
        ld a,(g_curpos+1)
 
        ld l,a
 
        ld h,0
 
        add hl,de
 
        ex de,hl
 
 
 
SSELS0:
 
        ld a,(g_curpos+1)
 
        ld hl,MENUCURHELPER
 
        call sel_word
 
SSELS2:        
 
        ld (SSELS4),hl
 
        call _highlight_selected
 
SSELS3:
 
        call waitkey
 
;        cp key_up
 
;        jr z,SELS_keyup
 
;        cp key_down
 
;        jr z,SELS_keydown
 
        cp key_esc
 
        jp z,SSELLL
 
 
 
 
 
        cp key_left
 
        jr z,SSELS_keyleft
 
        cp key_right
 
        jr z,SSELS_keyright
 
 
 
        cp key_up
 
        jr z,SSELS_keyup
 
        cp key_down
 
        jr z,SSELS_keydown
 
 
 
 
 
        cp key_enter
 
        jr z,SELECTED
 
        cp ' '
 
        jr z,SELECTED
 
        jr SSELS3        
 
 
 
SSELS_keyup:
 
        push de        
 
        pop hl
 
        
 
        ld bc,-4 ;-1
 
        add hl,bc
 
        ld bc,STK_SUB
 
        and a
 
        SBC HL,BC
 
        jp m,SSELS3
 
 
 
        ex de,hl
 
        ld bc,-4
 
        add hl,bc
 
        ex de,hl
 
 
 
        ld hl,(SSELS4)
 
        call _highlight_selected
 
        ld a,(g_curpos+1)
 
        add a,-4
 
        ld (g_curpos+1),a
 
        jp SSELS0
 
 
 
 
 
 
 
 
 
SSELS_keydown:
 
        push de
 
        pop hl
 
        
 
        ld bc,4
 
        add hl,bc
 
 
 
        ld a,(hl)
 
        inc a
 
        jr  z,SSELS3
 
        ex de,hl
 
 
 
        ld a,(g_curpos+1)
 
        add a,4
 
        ld (g_curpos+1),a
 
        ld hl,(SSELS4)
 
        call _highlight_selected
 
        jp SSELS0  
 
 
 
SSELS_keyleft:
 
        push de        
 
        pop hl
 
        ld bc,STK_SUB
 
        and a
 
        SBC HL,BC
 
        ld  a,h
 
        or l
 
        jp z,SSELS3
 
        dec de
 
        ld hl,(SSELS4)
 
        call _highlight_selected
 
        ld hl,g_curpos+1
 
        dec (hl)
 
        jp SSELS0
 
SSELS_keyright:
 
        push de
 
        pop hl
 
        inc hl
 
        ld a,(hl)
 
        inc a
 
        jp  z,SSELS3
 
        ex de,hl
 
        ld hl,g_curpos+1
 
        inc (hl)        
 
        ld hl,0
 
SSELS4   equ $-2
 
        call _highlight_selected
 
        jp SSELS0  
 
SELECTED:
 
        LD A,(DE)
 
        LD H,A
 
        PUSH HL
 
        LD HL,(SSELS4)
 
        CALL _highlight_selected
 
        POP HL
 
RESSULT   LD L,0
 
RESULT  EQU $-1
 
;L-MENU NUM H-SUBMENUNUM
 
        INC H
 
        INC L
 
        RET
 
RESULT1 LD H,#FF
 
        JR RESSULT
 
SSELLL:
 
        pop hl
 
        jp TXTOUT1
 
;---------------------------------
 
;╨╖╨░╨│╨╗╤Г╤И╨║╨╕
 
EXITLIGHT
 
        ld a,(hl)
 
        push af
 
                add a,"0"
 
                ld (endingovl+6),a
 
                call _load_cdata
 
        pop af
 
        dec a
 
        push af   
 
                ld e,a
 
                ld d,0
 
                ld hl,_op_end_slct
 
                add hl,de
 
                ld e,(hl)
 
                ld d,0
 
                ld hl,CDATA
 
                add hl,de
 
                ld (hl),0x33
 
 
 
                call _save_cdata
 
 
 
                call clear_whole_screen
 
 
 
        pop af
 
        ld hl,_op_gfx_ending
 
        call sel_word
 
        call load_big_img_dark
 
 
 
        ld hl,endingovl
 
        call load_ovl_to_script_buf
 
 
 
        ld hl,TABLE_J
 
        ld (CODEPAGE),hl
 
 
 
 
 
        LD B,250
 
        HALT
 
        DJNZ $-1
 
 
 
 
 
        call _clear_textbox
 
 
 
        ld hl,ovl_start
 
        ld bc,0x1500
 
        call _pradd
 
        call _print
 
 
 
        call _immed_big
 
        LD B,250
 
        HALT
 
        DJNZ $-1
 
        CALL clear_whole_screen
 
prebegin        
 
        JP begin        
 
 
 
 
 
 
 
 
 
;;;;;;;;;;;;;;;;;;;;;;;;;;        
 
TO_MENU:
 
        pop hl
 
 
 
        ld a,2
 
        ld (_ingame_m_downlimit),a
 
 
 
        ld hl,loc_m1_menu
 
        ld de,menu_m1_action
 
        jr _ingame_menu_mnu
 
 
 
_ingame_menu_mnu:
 
 
 
        push hl
 
        push de
 
 
 
        ld hl,TABLE_W
 
        ld (CODEPAGE),hl
 
        
 
        CALL WINCLR2
 
 
 
 
 
        LD HL,#1500
 
        LD (_ingame_m_mnpos),HL
 
 
 
        xor a
 
        ld (_ingame_m_curpos),a
 
 
 
        pop de
 
        pop hl
 
 
 
        push de
 
        ld a,(language)
 
        call sel_word
 
 
 
        call _prt_ingame_menu
 
 
 
        call _sel_ingame_menu
 
 
 
        pop hl
 
 
 
        cp 0xff
 
        jp z,TO_MENU_ESC
 
        call sel_word
 
        jp (hl)
 
TO_MENU_ESC
 
       ; pop hl ; ;;??????
 
        ld hl,TABLE_J
 
        ld (CODEPAGE),hl       
 
        jp TXTOUT1
 
 
 
 
 
_confirm_quit:
 
        ld a,1
 
        ld (_ingame_m_downlimit),a
 
 
 
        ld  hl,loc_m2_menu
 
        ld  de,menu_m2_action
 
        jp _ingame_menu_mnu
 
_ram_save:
 
        ld a,4
 
        ld (_ingame_m_downlimit),a
 
 
 
        ld  hl,loc_save_menu_ingame
 
        ld  de,loc_save_menu_ingame_action
 
        jp _ingame_menu_mnu
 
_ram_load:
 
        ld a,4
 
        ld (_ingame_m_downlimit),a
 
        
 
        ld  hl,loc_load_menu_ingame
 
        ld  de,loc_load_menu_ingame_action
 
        jp _ingame_menu_mnu
 
 
 
_save_slot_1:
 
        ld a,1
 
        jr _save_slot
 
_save_slot_2:
 
        ld a,2
 
        jr _save_slot
 
_save_slot_3:
 
        ld a,3
 
        jr _save_slot
 
_save_slot_4:
 
        ld a,4
 
        jr _save_slot
 
_save_slot_5:
 
        ld a,5
 
_save_slot:
 
        add a,"0"
 
        ld (SAVETEMPL_N),a
 
 
 
_retry_save:
 
        ld de,SAVETEMPL
 
        call openstream_file
 
        or a
 
        jp z,_save_slot_is_present
 
        ; we should create file here
 
 
 
         LD DE,SAVETEMPL
 
         OS_CREATEHANDLE
 
         OR A
 
         JP NZ,filecreateeerror
 
         ld a,b
 
         ld (filehandle),a
 
 
 
 
 
 
 
 
 
_save_slot_is_present:
 
        ld hl,buf
 
        ld de,buf+1
 
        ld bc,537
 
        ld (hl),0
 
        ldir            ;clear buffer
 
 
 
        call globals_to_save
 
 
 
        ld hl,538 ;len
 
        ld de,buf ;addr
 
        call savestream_file
 
        or a
 
        jp nz,filewriteerror 
 
 
 
        call closestream_file        
 
        jp TO_MENU_ESC
 
 
 
 
 
 
 
_load_slot_1:
 
        ld a,1
 
        jr _load_slot_o
 
_load_slot_2:
 
        ld a,2
 
        jr _load_slot_o
 
_load_slot_3:
 
        ld a,3
 
        jr _load_slot_o
 
_load_slot_4:
 
        ld a,4
 
        jr _load_slot_o
 
_load_slot_5:
 
        ld a,5
 
_load_slot_o:
 
        add a,"0"
 
        ld (SAVETEMPL_N),a
 
 
 
        ld de,SAVETEMPL
 
        call openstream_file
 
        or a
 
        jp nz,TO_MENU_ESC
 
 
 
        jp _load_common