install: add install sources and resources
[doom2d-restoration.git] / GAME / MISCA.ASM
blob027d5a96fa2933438555b48ecad3081812ace9e4
1 ideal
2 p386
3 jumps
4 model flat,cpp
6 BM_WALL=1
8 FLDW=100
9 FLDH=100
10 MAXTXW=16
11 MAXTXH=8
12 WD=200
13 HT=98
15 extrn srand:proc
16 extrn V_spr:proc,V_pic:proc,V_clr:proc
17 extrn V_remap_rect:proc
19 udataseg
21 extrn bright:byte,mixmap:byte,flametab:byte
23 extrn fld:byte,bmap:byte,fld_need_remap:byte,clrmap:byte
24 extrn walp:dword,walf:dword
25 extrn w_o:dword,w_x:dword,w_y:dword
27 dpmi_mem_info dd ?
28         db 44 dup(?)
30 dataseg
32 rndseed dd 1
34 codeseg
36 proc Z_calc_time uses ebx, @@t:dword,@@h:dword,@@m:dword,@@s:dword
37 public Z_calc_time
38         mov ax,[word @@t]
39         mov dx,[word @@t+2]
40         mov bx,65455
41         div bx
42         mov ebx,[@@h]
43         mov [ebx],ax
44         mov ax,dx
45         xor dx,dx
46         mov bx,1091
47         div bx
48         mov ebx,[@@m]
49         mov [ebx],ax
50         mov ax,dx
51         xor dx,dx
52         mov bx,18
53         div bx
54         mov ebx,[@@s]
55         mov [ebx],ax
56         ret
57 endp
59 proc BM_remapfld uses bx ecx esi edi
60 public BM_remapfld
61   lea esi,[fld]
62   lea edi,[bmap]
63   mov dx,FLDH/4
64   mov bl,BM_WALL
65   mov bh,255-BM_WALL
66   cld
67 @@l1:
68   mov ecx,FLDW/4
69 @@l2:
70   push esi
71   mov ax,[esi+FLDW]
72   cmp al,1
73   je @@a1
74   cmp al,2
75   je @@a1
76   cmp ah,1
77   je @@a1
78   cmp ah,2
79   je @@a1
80   mov ax,[esi+FLDW*2]
81   cmp al,1
82   je @@a1
83   cmp al,2
84   je @@a1
85   cmp ah,1
86   je @@a1
87   cmp ah,2
88   je @@a1
89   mov ax,[esi+FLDW*3]
90   cmp al,1
91   je @@a1
92   cmp al,2
93   je @@a1
94   cmp ah,1
95   je @@a1
96   cmp ah,2
97   je @@a1
98   lodsw
99   cmp al,1
100   je @@a1
101   cmp al,2
102   je @@a1
103   cmp ah,1
104   je @@a1
105   cmp ah,2
106   je @@a1
107   mov ax,[esi+FLDW]
108   cmp al,1
109   je @@a1
110   cmp al,2
111   je @@a1
112   cmp ah,1
113   je @@a1
114   cmp ah,2
115   je @@a1
116   mov ax,[esi+FLDW*2]
117   cmp al,1
118   je @@a1
119   cmp al,2
120   je @@a1
121   cmp ah,1
122   je @@a1
123   cmp ah,2
124   je @@a1
125   mov ax,[esi+FLDW*3]
126   cmp al,1
127   je @@a1
128   cmp al,2
129   je @@a1
130   cmp ah,1
131   je @@a1
132   cmp ah,2
133   je @@a1
134   lodsw
135   cmp al,1
136   je @@a1
137   cmp al,2
138   je @@a1
139   cmp ah,1
140   je @@a1
141   cmp ah,2
142   jne @@a2
143 @@a1:
144   or [edi],bl
145   jmp @@nxt
146 @@a2:
147   and [edi],bh
148 @@nxt:
149   pop esi
150   add esi,4
151   inc edi
152   loop @@l2
153   add esi,FLDW*3
154   dec dx
155   jnz @@l1
156   mov [fld_need_remap],0
157   ret
158 endp
160 proc BM_clear uses ebx ecx, @@f:byte
161 public BM_clear
162   lea ebx,[bmap]
163   mov ecx,FLDW/4*FLDH/4/4
164   mov al,[@@f]
165   not al
166   mov ah,al
167   push ax ax
168   pop eax
169 @@1:
170   and [ebx],eax
171   add ebx,4
172   loop @@1
173   and [ebx],al
174   ret
175 endp
177 udataseg
179 __x dd ?
180 __y dd ?
181 __sx dd ?
182 __sy dd ?
183 __ex dd ?
184 __ey dd ?
186 codeseg
188 proc Z_drawfld uses ebx ecx esi edi, @@f:dword
189 public Z_drawfld
190         mov eax,[w_x]
191         sub eax,WD/2
192         mov edx,eax
193         and edx,7
194         neg edx
195         add edx,(1-MAXTXW)*8
196         mov [__x],edx
197         shr eax,3
198         add eax,1-MAXTXW
199         mov [__sx],eax
200         add eax,MAXTXW+WD/8+1
201         mov [__ex],eax
202         mov eax,[w_y]
203         sub eax,HT/2
204         mov edx,eax
205         and edx,7
206         neg edx
207         inc edx
208         add edx,[w_o]
209         add edx,(1-MAXTXH)*8
210         mov [__y],edx
211         shr eax,3
212         add eax,1-MAXTXH
213         mov [__sy],eax
214         add eax,MAXTXH+HT/8+1
215         mov [__ey],eax
216         mov eax,FLDW
217         mul [__sy]
218         add eax,[__sx]
219         add eax,[@@f]
220         mov esi,eax
221         cld
222 @@1:    mov eax,[__sy]
223         or eax,eax
224         js @@1z
225         cmp eax,[__ey]
226         jge @@1x
227         cmp eax,FLDH
228         jge @@1x
229         push esi
230         push [__x]
231         mov edi,[__sx]
232 @@2:    lodsb
233         or edi,edi
234         js @@2z
235         cmp edi,[__ex]
236         jge @@2x
237         cmp edi,FLDW
238         jge @@2x
239         or al,al
240         jz @@2z
241         xor ah,ah
242         movzx ebx,ax
243         shl ebx,2
244         mov eax,[walp+ebx]
245 ;       or eax,eax
246 ;       jz @@2z
247         cmp eax,3
248         jbe @@water
249 @@wall:
250         push eax
251         push [__y]
252         push [__x]
253         test [walf+ebx],1
254         jnz short @@2b
255         call V_pic
256         jmp short @@2c
257 @@2b:   call V_spr
258 @@2c:   add sp,12
259 @@2z:   add [__x],8
260         inc edi
261         jmp @@2
262 @@2x:   pop [__x]
263         pop esi
264 @@1z:   add [__y],8
265         inc [__sy]
266         add esi,FLDW
267         jmp @@1
268 @@1x:   ret
270 ;water effects
272 @@water:
273         add al,7
274         mov ah,al
275         xor al,al
276         movzx eax,ax
277         add eax,offset clrmap
278         push eax 8 [__y] 8 [__x]
279         call V_remap_rect
280         add sp,20
281         jmp @@2z
282 endp
284 proc gotoxy uses bx, @@x:dword,@@y:dword
285 public gotoxy
286         mov ah,2
287         mov bh,0
288         mov dl,[byte @@x]
289         mov dh,[byte @@y]
290         dec dl
291         dec dh
292         int 10h
293         ret
294 endp
296 proc wherex uses bx cx
297 public wherex
298         mov ah,3
299         mov bh,0
300         int 10h
301         inc dl
302         movzx eax,dl
303         ret
304 endp
306 proc wherey uses bx cx
307 public wherey
308         mov ah,3
309         mov bh,0
310         int 10h
311         inc dh
312         movzx eax,dh
313         ret
314 endp
316 proc textmode
317 public textmode
318         mov ax,3
319         int 10h
320         ret
321 endp
323 proc putcn uses bx cx, @@c:dword,@@a:dword,@@n:dword
324 public putcn
325         mov ah,9
326         mov bh,0
327         mov bl,[byte @@a]
328         mov al,[byte @@c]
329         mov cx,[word @@n]
330         int 10h
331         ret
332 endp
334 proc cputstr uses bx esi, @@p:dword
335 public cputstr
336         mov esi,[@@p]
337 @@1:    cld
338         lodsb
339         or al,al
340         jz @@x
341         mov ah,14
342         int 10h
343         jmp @@1
344 @@x:    ret
345 endp
347 proc cputch uses bx, @@c:byte
348 public cputch
349         mov ah,14
350         mov al,[@@c]
351         int 10h
352         ret
353 endp
355 proc randomize uses cx
356 public randomize
357         mov ah,0
358         int 1Ah
359         push cx dx
360         call srand
361         pop eax
362         mov ax,ds
363         mov es,ax
364         ret
365 endp
367 proc K_slow uses bx
368 public K_slow
369         mov ax,305h
370         mov bx,31Fh
371         int 16h
372         ret
373 endp
375 proc K_fast uses bx
376 public K_fast
377         mov ax,305h
378         mov bx,0
379         int 16h
380         ret
381 endp
383 proc dpmi_memavl
384 public dpmi_memavl
385         mov ax,ds
386         mov es,ax
387         lea edi,[dpmi_mem_info]
388         mov ax,500h
389         int 31h
390         mov eax,[dpmi_mem_info]
391         ret
392 endp
394 proc smoke_sprf uses ebx
395 public smoke_sprf
396         movzx ebx,[byte edi]
397         add al,[bright+ebx]
398         add al,060h
399         xor al,0Fh
400         mov bh,al
401         mov al,[mixmap+ebx]
402         stosb
403         ret
404 endp
406 proc flame_sprf uses ebx
407 public flame_sprf
408         movzx ebx,[byte edi]
409         add al,[bright+ebx]
410         mov bl,al
411         mov al,[flametab+ebx]
412         stosb
413         ret
414 endp