Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
670 | bw | 1 | unit LRLMainMenu; |
2 | |||
3 | |||
4 | interface |
||
5 | |||
6 | |||
7 | uses |
||
8 | LRLRoutines, LRLSprites; |
||
9 | |||
10 | |||
11 | procedure LRLSelectItem(var Item: Word); |
||
12 | |||
13 | |||
14 | implementation |
||
15 | |||
16 | |||
17 | var |
||
18 | MainScreen: Pointer; |
||
19 | Selection: array[1..4] of Pointer; |
||
20 | SelectionDark: array[1..4] of Pointer; |
||
21 | SelectionSize: array[1..4] of Word; |
||
22 | SelectionDarkSize: array[1..4] of Word; |
||
23 | |||
24 | |||
25 | procedure LoadData; |
||
26 | var |
||
27 | size, j: Word; |
||
28 | i: Integer; |
||
29 | begin |
||
30 | GetMem(MainScreen, 64004); |
||
31 | Seek(ImageFile, LRLImagesFilePosition + 7940); |
||
32 | BlockRead(ImageFile, MainScreen^, 64004, j); |
||
33 | for i := 1 to 4 do |
||
34 | begin |
||
35 | BlockRead(ImageFile, SelectionSize[i], 2, j); |
||
36 | GetMem(Selection[i], SelectionSize[i]); |
||
37 | BlockRead(ImageFile, Selection[i]^, SelectionSize[i], j); |
||
38 | BlockRead(ImageFile, SelectionDarkSize[i], 2, j); |
||
39 | GetMem(SelectionDark[i], SelectionDarkSize[i]); |
||
40 | BlockRead(ImageFile, SelectionDark[i]^, SelectionDarkSize[i], j); |
||
41 | end; |
||
42 | end; |
||
43 | |||
44 | |||
45 | procedure DisposeData; |
||
46 | var |
||
47 | i: Integer; |
||
48 | begin |
||
49 | FreeMem(MainScreen, 64004); |
||
50 | for i := 1 to 4 do |
||
51 | begin |
||
52 | FreeMem(Selection[i], SelectionSize[i]); |
||
53 | FreeMem(SelectionDark[i], SelectionDarkSize[i]); |
||
54 | end; |
||
55 | end; |
||
56 | |||
57 | |||
58 | procedure LRLSelectItem(var Item: Word); |
||
59 | var |
||
60 | Keypress: Word; |
||
61 | RedrawAll: Boolean; |
||
62 | NeedToFade: Boolean; |
||
63 | p: Pointer; |
||
64 | i: Integer; |
||
65 | begin |
||
66 | GetMem(p, 768); |
||
67 | DataFill(p^, 768, 0, 0); |
||
68 | Palette256Set(p^); |
||
69 | FreeMem(p, 768); |
||
70 | LoadData; |
||
71 | NeedToFade := True; |
||
72 | ImagePut(LRLScreen^, MainScreen^, 0, 0, 0, 0, 319, 199); |
||
73 | RedrawAll := True; |
||
74 | KeyboardFlush; |
||
75 | |||
76 | repeat |
||
77 | if RedrawAll then |
||
78 | begin |
||
79 | for i := 1 to 4 do |
||
80 | if i = Item then |
||
81 | ImagePutTransparent(LRLScreen^, Selection[i]^, 63, 66 + (i - 1) * 30, 0, 0, 319, 199) else |
||
82 | ImagePutTransparent(LRLScreen^, SelectionDark[i]^, 63, 66 + (i - 1) * 30, 0, 0, 319, 199); |
||
83 | |||
84 | ScreenApply(LRLScreen^); |
||
85 | |||
86 | if NeedToFade then |
||
87 | begin |
||
88 | FadeTo(LRLMenuPalette); |
||
89 | NeedToFade := False; |
||
90 | end; |
||
91 | |||
92 | RedrawAll := False; |
||
93 | end; |
||
94 | |||
95 | Keypress := ReadKey; |
||
96 | |||
97 | if (Keypress = $B1) and (Item < 4) then |
||
98 | begin |
||
99 | Inc(Item); |
||
100 | RedrawAll := True; |
||
101 | end; |
||
102 | if (Keypress = $B2) and (Item > 1) then |
||
103 | begin |
||
104 | Dec(Item); |
||
105 | RedrawAll := True; |
||
106 | end; |
||
107 | until Keypress = $0D; |
||
108 | |||
109 | FadeClear; |
||
110 | ImageClear(LRLScreen^); |
||
111 | ScreenApply(LRLScreen^); |
||
112 | DisposeData; |
||
113 | end; |
||
114 | |||
115 | |||
116 | end.> |