        IF1
INCLUDE COMDEF.INC              ; Include command definition
        ENDIF
VOL     EQU     0               ; Define volume number
LOGIC   SEGMENT BYTE
        ASSUME  CS:LOGIC
        BEGIN                   ; Start up

; Процедура вывода заставки ГРОЗА;  log02.asm
; А.В.Хорев, обучающая программа "ГРОЗА", 1991 год.

        if_
          isset  5         ; новая комната исполняется впервые ?
        else_   NotNr      ; нет: переход на NotNr
                           ; да, =>
          set_horizon 1         ; установить линию горизонта y =1
          status_line_off       ; не отображать строку состояния
          clear_lines 23, 24, 0 ; очистить строки с 23 по 24 цветом 0
          assignn 201, 0        ; присвоить v201 значение 0

          set 25  ; управление выводом инф. в строках 23 и 24
          set 50  ; инф. об окончании движения радуги

          load_logic 20 ; загрузить логику (мерцание звезд)

          load_pic    0  ; в var(0) передается номер комнаты,
          draw_pic    0  ; каждой комнате соответствует почти всегда
          discard_pic 0  ; одна декорация, имеющая тот же номер

          load_view 21   ; загрузить view-ресурс ном.21 (радужная полоска)
          load_sound 23  ; загрузить sound-ресурс ном.23

          animate_obj    1 ; вкл.объект 1 в список управляемых объектов 
          ignore_horizon 1 ; разрешить объекту 1 игнорировать линию горизонта
          ignore_objs    1 ; ему же не обращать внимания на другие объекты
          ignore_blocks  1 ; и установленные блоки (если есть таковые)
   	  set_view       1, 21      ; связать объект 1 с view 21
          set_priority   1,  5      ; объекту 1 установить приоритет 5
          position       1,  9, 135 ; нач.поз.объекта 1: х=9, у=135
          draw           1          ; изобразить объект 1 (радуга) на экране

          call_ 20            ; вызвать явно logic 20 (мерцание звезд)
          set_priority 12, 15 ;
          set_priority 13, 15 ; объектам 12,13,14,15 установить приоритет 15
          set_priority 14, 15 ;
          set_priority 15, 15 ;

          show_pic   ; вывести содержимое внутреннего буфера фона,
	             ; подготовленное командой draw_pic на экран
          set 21     ; f21 -> 1
          return     ; вернуть управление в log0

; -----------------------------------------------------

NotNr:                   ; новая комната исполн. не впервые 
			 ; (не первый вход в log02)
        if_
          isset 50       ; движение радуги закончено (f50 -> 1)?
        else_ E          ; нет: переход на E
                         ; да =>
           reset 50      ; f50->0
           increment 201 ; v201 = v201 + 1

E:      if_
          equaln 201, 1  ; v201 = 1?
        else_ E1         ; нет: переход на E1
                         ; да:
           move_obj 1, 9, 35, 1, 50 ; переместить радугу (объект 1) в точку с
	                            ; х=9 и у=35 (т.е.вверх) с шагом 1;
				    ; по окончании движения установить f50 -> 1

E1:     if_              ; если
          isset 25       ;   f25 -> 1 и
          equaln 201, 2  ;   v201 = 2 ?
        else_ F          ; иначе на F
			    ; тогда:
	   reset 25         ;  f25 -> 0
           display 23, 10, 1;  написать название фирмы (m1) в стр.23, поз.10
           display 24, 10, 2;  вывести сообщ. m2 в строку 24 с позиции 10

F:      if_
          equaln 201, 2  ; v201 = 2?
        else_ G          ; нет: переход на G
                         ; да:
           move_obj 1, 9, 135, 1, 50 ; перем.радугу вниз (см.выше),end - f50->1

G:      if_                   ; если
          greatern 201, 2     ;   v201 > 2 и
          not_                ;   не
          isset 25            ;   установлен (равен 0) f25,
        else_ G1              ; иначе на G1
			      ; тогда :
          set 25                ; f25 -> 1
          set_priority 1, 9     ; объекту 1 назначить приоритет 9
	                        ; (сделать радугу видимой)
          clear_lines 23, 24, 0 ; очистить строки 23,24 цветом 0
          display 23, 10, 3     ; вывести сообщ.3 в стр.23, поз.10

G1:     if_            ; если
          isset 9      ;   установлен f9 и
          isset 21     ;   установлен f21
        else_ G2       ; иначе G2
		       ; тогда :
          reset 21         f21 -> 0
          sound 23, 20 ;   исполнить мелодию 23 и по окончании установить f20

G2:     call_ 20 ; вызвать log20 (мерцание звезд)

        if_                ; если
	  isset 20         ;   установлен f20 и
	  greatern 201, 2  ;   v201 > 2
        else_ G3           ; иначе на G3
			   ; тогда :
          erase 1               ; уничтожить объект 1 (радуга)
          clear_lines 23, 24, 0 ; очистить строки 23,24 цветом 0
	  new_room 2            ; прокрутить заставку ГРОЗА заново

G3:     return  ; возврат управления в log0

         MESSAGES 3 ; сообщения

m1        db   " Intep  Software, Inc.", 0
m2        db   "  (C) Copyright 1991", 0
m3        db   "Обучающая программа", 0

VERYEND EQU $
LOGIC   ENDS
        END