Rev 775 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
762 | bw | 1 | unit LRLEditor; |
2 | |||
775 | bw | 3 | {$mode objfpc} |
4 | {$asmmode intel} |
||
5 | |||
6 | |||
762 | bw | 7 | interface |
8 | |||
9 | |||
775 | bw | 10 | uses |
11 | LRLRoutines, LRLSprites, LRLLevels; |
||
12 | |||
13 | |||
762 | bw | 14 | procedure LRLEditLevels; |
15 | |||
775 | bw | 16 | |
762 | bw | 17 | implementation |
18 | |||
775 | bw | 19 | |
20 | const |
||
21 | RefreshDelay = 5; { 1 = 1/100 sec } |
||
22 | |||
762 | bw | 23 | var |
775 | bw | 24 | CurrentLevel: Word; |
25 | CurrentTool: Word; |
||
26 | TotalLevels: Word; |
||
27 | MouseX, MouseY: Integer; |
||
762 | bw | 28 | |
775 | bw | 29 | TimeToRefresh : Boolean; |
30 | LastRefreshTime: DWord; |
||
31 | |||
32 | |||
762 | bw | 33 | procedure LRLRedrawLevel; |
34 | var |
||
775 | bw | 35 | i, j: Integer; |
762 | bw | 36 | begin |
37 | ImageClear(LRLScreen^); |
||
775 | bw | 38 | |
39 | for i := 1 to 16 do for j := 1 to 30 do |
||
40 | with LRLLevel.Field[j, i] do |
||
41 | ImagePut(LRLScreen^, LRLEnvironment[Image].Image[Count].Data^, j * 10, i * 10, 0, 0, 319, 199); |
||
42 | |||
762 | bw | 43 | for i := 1 to 10 do |
775 | bw | 44 | with LRLLevel.Player[i] do |
45 | if Controller <> 0 then |
||
46 | ImagePutTransparent(LRLScreen^, LRLFigure[Colour, SpriteData].Image[Sprite].Data^, Position.x * 10 + Position.xoffs, Position.y * 10 + Position.yoffs, 0, 0, 319, 199); |
||
47 | |||
762 | bw | 48 | ImageFill(LRLFontBuffer^, 12, 12, 252); |
49 | ImagePut(LRLScreen^, LRLFontBuffer^, 10, 184, 0, 0, 319, 199); |
||
775 | bw | 50 | |
762 | bw | 51 | for i := 1 to 13 do |
775 | bw | 52 | if i > 9 then |
53 | ImagePut(LRLScreen^, LRLFigure[i - 9, 1].Image[1].Data^, i * 15 - 4, 185, 0, 0, 319, 199) else |
||
54 | ImagePut(LRLScreen^, LRLEnvironment[i].Image[1].Data^, i * 15 - 4, 185, 0, 0, 319, 199); |
||
55 | |||
762 | bw | 56 | for i := 1 to 6 do |
775 | bw | 57 | if LRLEditorButton[i].Lit then |
58 | ImagePut(LRLScreen^, LRLEditorButton[i].LightIcon^, LRLEditorButton[i].x1, LRLEditorButton[i].y1, 0, 0, 319, 199) else |
||
59 | ImagePut(LRLScreen^, LRLEditorButton[i].DarkIcon^, LRLEditorButton[i].x1, LRLEditorButton[i].y1, 0, 0, 319, 199); |
||
60 | |||
762 | bw | 61 | LRLDrawOrnamental(0, 0, 31, 17, 1); |
62 | end; |
||
63 | |||
64 | |||
65 | procedure LRLMoveMouse; |
||
66 | var |
||
775 | bw | 67 | s, s2: String[20]; |
762 | bw | 68 | begin |
775 | bw | 69 | MSMouseGetXY(MouseX, MouseY); |
70 | |||
762 | bw | 71 | if not MSMouseInArea(200, 180, 325, 205) then |
72 | if CurrentTool < 10 then |
||
775 | bw | 73 | ImagePut(LRLScreen^, LRLEnvironment[CurrentTool].Image[1].Data^, MouseX - 5, MouseY - 5, 0, 0, 319, 199) else |
74 | ImagePut(LRLScreen^, LRLFigure[CurrentTool - 9, 1].Image[1].Data^, MouseX - 5, MouseY - 5, 0, 0, 319, 199); |
||
75 | |||
762 | bw | 76 | if not MSMouseInArea(-2, -2, 55, 20) then |
77 | begin |
||
78 | ImageFill(LRLFontBuffer^, 50, 15, 0); |
||
79 | ImagePut(LRLScreen^, LRLFontBuffer^, 0, 0, 0, 0, 319, 199); |
||
775 | bw | 80 | Str(CurrentLevel, s); |
81 | Str(TotalLevels, s2); |
||
762 | bw | 82 | ImageStringGet(s + '/' + s2, LRLFont^, LRLFontBuffer^, 251); |
83 | ImagePut(LRLScreen^, LRLFontBuffer^, 25 - ImageSizex(LRLFontBuffer^) div 2, 0, 0, 0, 319, 199); |
||
84 | end; |
||
775 | bw | 85 | |
1007 | bw | 86 | {ImagePutTransparent(LRLScreen^, LRLMousePointer^, MouseX, MouseY, 0, 0, 319, 199);} |
762 | bw | 87 | end; |
88 | |||
775 | bw | 89 | |
90 | procedure Repress; |
||
762 | bw | 91 | var |
775 | bw | 92 | x, y: Integer; |
762 | bw | 93 | begin |
775 | bw | 94 | MSMouseButtonWasPressed(0, x, y); |
95 | MSMouseButtonWasReleased(0, x, y); |
||
762 | bw | 96 | MSMouseButtonWasPressed(1, x, y); |
97 | MSMouseButtonWasReleased(1, x, y); |
||
98 | end; |
||
99 | |||
775 | bw | 100 | |
762 | bw | 101 | procedure LRLEditLevels; |
102 | var |
||
775 | bw | 103 | Keypress: Word; |
104 | DrawNow: Boolean; |
||
105 | i, j: Integer; |
||
106 | x, y: Integer; |
||
107 | Cmd: Word; |
||
762 | bw | 108 | begin |
109 | if not MSMouseDriverExist then Exit; |
||
110 | Repress; |
||
775 | bw | 111 | Palette256Set(LRLPalette^); |
112 | |||
762 | bw | 113 | ShowLives := False; |
114 | ShowScore := False; |
||
775 | bw | 115 | Keypress := 0; |
762 | bw | 116 | CurrentLevel := 1; |
775 | bw | 117 | CurrentTool := 2; |
118 | TotalLevels := LRLLevelCount; |
||
119 | |||
120 | DrawNow := False; |
||
121 | TimeToRefresh := True; |
||
122 | LastRefreshTime := 0; |
||
123 | |||
762 | bw | 124 | MSMouseSetXY(160, 100); |
125 | LRLLoadLevel(CurrentLevel); |
||
775 | bw | 126 | |
127 | WaitForEvent(1); |
||
128 | |||
762 | bw | 129 | repeat |
775 | bw | 130 | if not TimeToRefresh then |
131 | TimeToRefresh := kos_timecounter() - LastRefreshTime >= RefreshDelay; |
||
132 | |||
762 | bw | 133 | if TimeToRefresh then |
134 | begin |
||
135 | LRLRedrawLevel; |
||
136 | LRLMoveMouse; |
||
137 | ScreenApply(LRLScreen^); |
||
775 | bw | 138 | TimeToRefresh := False; |
139 | LastRefreshTime := kos_timecounter(); |
||
762 | bw | 140 | end; |
775 | bw | 141 | |
762 | bw | 142 | if Keypressed then |
143 | Keypress := Readkey; |
||
775 | bw | 144 | |
762 | bw | 145 | if MSMouseButtonWasReleased(1, x, y) then |
146 | begin |
||
147 | LRLScore := 0; |
||
775 | bw | 148 | |
762 | bw | 149 | FadeClear; |
150 | ImageClear(LRLScreen^); |
||
151 | ScreenApply(LRLScreen^); |
||
152 | Palette256Set(LRLPalette^); |
||
153 | LRLPlayLevel(CurrentLevel); |
||
775 | bw | 154 | |
762 | bw | 155 | FadeClear; |
156 | ImageClear(LRLScreen^); |
||
157 | ScreenApply(LRLScreen^); |
||
158 | Palette256Set(LRLPalette^); |
||
159 | LRLLoadLevel(CurrentLevel); |
||
775 | bw | 160 | |
762 | bw | 161 | Repress; |
162 | end; |
||
775 | bw | 163 | |
762 | bw | 164 | if MSMouseButtonWasPressed(0, x, y) then |
165 | DrawNow := True; |
||
775 | bw | 166 | |
762 | bw | 167 | if MSMouseButtonWasReleased(0, x, y) then |
168 | begin |
||
169 | DrawNow := False; |
||
775 | bw | 170 | |
762 | bw | 171 | Cmd := 0; |
775 | bw | 172 | |
762 | bw | 173 | for i := 1 to 6 do |
174 | LRLEditorButton[i].Lit := False; |
||
775 | bw | 175 | |
762 | bw | 176 | for i := 1 to 6 do |
775 | bw | 177 | if MSMouseInArea(LRLEditorButton[i].x1, LRLEditorButton[i].y1, LRLEditorButton[i].x2, LRLEditorButton[i].y2) then |
762 | bw | 178 | begin |
775 | bw | 179 | Cmd := LRLEditorButton[i].Command; |
180 | Break; |
||
762 | bw | 181 | end; |
775 | bw | 182 | |
183 | if Cmd = 1 then |
||
184 | begin |
||
762 | bw | 185 | LRLSaveLevel(CurrentLevel); |
775 | bw | 186 | |
187 | Repress; |
||
188 | end; |
||
189 | |||
190 | if Cmd = 2 then |
||
762 | bw | 191 | begin |
192 | LRLInsertLevel(CurrentLevel); |
||
193 | Inc(CurrentLevel); |
||
194 | TotalLevels := LRLLevelCount; |
||
195 | LRLLoadLevel(CurrentLevel); |
||
775 | bw | 196 | |
762 | bw | 197 | Repress; |
198 | end; |
||
775 | bw | 199 | |
762 | bw | 200 | if (Cmd = 3) and (CurrentLevel < TotalLevels) then |
201 | begin |
||
202 | Inc(CurrentLevel); |
||
203 | LRLLoadLevel(CurrentLevel); |
||
775 | bw | 204 | |
762 | bw | 205 | Repress; |
206 | end; |
||
775 | bw | 207 | |
208 | if Cmd = 4 then |
||
762 | bw | 209 | begin |
775 | bw | 210 | for i := 1 to 16 do for j := 1 to 30 do |
211 | LRLLevel.Field[j, i].Image := 1; |
||
762 | bw | 212 | for i := 1 to 10 do |
213 | LRLLevel.Player[i].Controller := 0; |
||
775 | bw | 214 | |
762 | bw | 215 | Repress; |
216 | end; |
||
775 | bw | 217 | |
762 | bw | 218 | if (Cmd = 5) and (TotalLevels > 1) then |
219 | begin |
||
220 | LRLDeleteLevel(CurrentLevel); |
||
221 | TotalLevels := LRLLevelCount; |
||
222 | if CurrentLevel > TotalLevels then |
||
223 | CurrentLevel := TotalLevels; |
||
224 | LRLLoadLevel(CurrentLevel); |
||
775 | bw | 225 | |
762 | bw | 226 | Repress; |
227 | end; |
||
775 | bw | 228 | |
762 | bw | 229 | if (Cmd = 6) and (CurrentLevel > 1) then |
230 | begin |
||
231 | Dec(CurrentLevel); |
||
232 | LRLLoadLevel(CurrentLevel); |
||
775 | bw | 233 | |
762 | bw | 234 | Repress; |
235 | end; |
||
775 | bw | 236 | |
237 | MSMouseGetXY(MouseX, MouseY); |
||
238 | |||
239 | if MouseY > 180 then |
||
762 | bw | 240 | for i := 1 to 13 do |
775 | bw | 241 | if (MouseY > 184) and (MouseY < 195) and (MouseX > i * 15 - 5) and (MouseX < i * 15 + 6) then |
762 | bw | 242 | begin |
775 | bw | 243 | CurrentTool := i; |
244 | Break; |
||
762 | bw | 245 | end; |
246 | end; |
||
775 | bw | 247 | |
762 | bw | 248 | if DrawNow then |
249 | begin |
||
250 | for i := 1 to 6 do |
||
251 | LRLEditorButton[i].Lit := False; |
||
775 | bw | 252 | |
762 | bw | 253 | for i := 1 to 6 do |
775 | bw | 254 | if MSMouseInArea(LRLEditorButton[i].x1, LRLEditorButton[i].y1, LRLEditorButton[i].x2, LRLEditorButton[i].y2) then |
762 | bw | 255 | begin |
775 | bw | 256 | LRLEditorButton[i].Lit := True; |
257 | Break; |
||
762 | bw | 258 | end; |
775 | bw | 259 | |
260 | MSMouseGetXY(MouseX, MouseY); |
||
261 | |||
262 | x := MouseX div 10; |
||
263 | y := MouseY div 10; |
||
264 | |||
762 | bw | 265 | if (x > 0) and (x < 31) and (y > 0) and (y < 17) then |
266 | begin |
||
267 | for i := 1 to 10 do |
||
775 | bw | 268 | if (LRLLevel.Player[i].Controller <> 0) and (LRLLevel.Player[i].Position.x = x) and (LRLLevel.Player[i].Position.y = y) and |
269 | (CurrentTool <> 2) and (CurrentTool <> 3) and (CurrentTool <> 4) and (CurrentTool <> 7) then |
||
762 | bw | 270 | begin |
775 | bw | 271 | LRLLevel.Player[i].Controller := 0; |
272 | Break; |
||
762 | bw | 273 | end; |
775 | bw | 274 | |
762 | bw | 275 | if CurrentTool < 10 then |
775 | bw | 276 | LRLLevel.Field[x, y].Image := CurrentTool else |
277 | if (LRLLevel.Field[x, y].Image = 2) or (LRLLevel.Field[x, y].Image = 3) or |
||
278 | (LRLLevel.Field[x, y].Image = 4) or (LRLLevel.Field[x, y].Image = 1) then |
||
762 | bw | 279 | begin |
775 | bw | 280 | if CurrentTool = 10 then |
762 | bw | 281 | begin |
775 | bw | 282 | LRLLevel.Player[1].Controller := 1; |
283 | LRLLevel.Player[1].Position.x := x; |
||
284 | LRLLevel.Player[1].Position.y := y; |
||
285 | LRLLevel.Player[1].Colour := 1; |
||
286 | end else |
||
287 | begin |
||
288 | j := 2; |
||
289 | for i := 2 to 10 do |
||
290 | if LRLLevel.Player[i].Controller = 0 then |
||
762 | bw | 291 | begin |
775 | bw | 292 | j := i; |
293 | Break; |
||
762 | bw | 294 | end; |
775 | bw | 295 | LRLLevel.Player[j].Controller := 2; |
296 | LRLLevel.Player[j].Position.x := x; |
||
297 | LRLLevel.Player[j].Position.y := y; |
||
298 | LRLLevel.Player[j].Colour := CurrentTool - 9; |
||
762 | bw | 299 | end; |
300 | end; |
||
301 | end; |
||
302 | end; |
||
775 | bw | 303 | |
304 | WaitForEvent(5); |
||
305 | |||
306 | until (Keypress = KEY_ESC); |
||
762 | bw | 307 | end; |
308 | |||
775 | bw | 309 | |
762 | bw | 310 | end.>>>>>>>>>>>>> |