Rev 2021 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
213 | alone | 1 | IF corr_coord |
2 | CORR_COORD |
||
3 | LD A,L |
||
4 | OR A |
||
5 | jr NZ,$+3 |
||
6 | INC L |
||
7 | INC A |
||
8 | jr NZ,$+3 |
||
9 | DEC L |
||
10 | LD A,H |
||
11 | OR A |
||
12 | jr NZ,$+3 |
||
13 | INC H |
||
14 | INC A |
||
15 | RET NZ |
||
16 | DEC H |
||
17 | RET |
||
18 | ENDIF |
||
19 | |||
775 | alone | 20 | RAYPREPXY |
21 | ;TODO न 뢠!!! |
||
213 | alone | 22 | IF optfast |
23 | LD HL,(IMcurDX) |
||
24 | LD A,H |
||
25 | OR L |
||
26 | LD HL,(IMcurDY) |
||
27 | OR H |
||
28 | OR L |
||
29 | LD A,lowmaxscale |
||
30 | jr Z,$+4 |
||
31 | LD A,0;-1 |
||
32 | LD (foptfast),A |
||
33 | ENDIF |
||
34 | IMcurXx=$+1 |
||
35 | LD HL,#0F80 ;#0580 |
||
36 | IF corr_coord |
||
37 | CALL CORR_COORD |
||
38 | ENDIF |
||
39 | LD (curXx),HL |
||
40 | IMcurYy=$+1 |
||
41 | LD HL,#0180+(map&#FF00) ;#A580 |
||
42 | IF corr_coord |
||
43 | CALL CORR_COORD |
||
44 | ENDIF |
||
45 | LD (curYy),HL |
||
46 | LD A,(IMavision+1) |
||
47 | LD (curangle),A |
||
48 | SUB 32 |
||
49 | LD L,A |
||
50 | LD H,0 |
||
51 | ADD HL,HL |
||
52 | ADD HL,HL |
||
53 | LD A,L |
||
54 | LD (avision4L),A |
||
55 | LD A,H |
||
56 | LD (avision4H),A |
||
57 | LD HL,(cury-1) |
||
58 | LD A,(curx) |
||
59 | LD L,A |
||
60 | LD (cur00yx),HL |
||
61 | LD (cur01yx),HL |
||
62 | ;LD A,L ;᭮ ࠢ |
||
63 | CPL ;1-᭮ ࠢ |
||
64 | LD L,A |
||
65 | LD (cur10yx),HL |
||
66 | LD (cur11yx),HL |
||
67 | CPL ;᭮ ࠢ |
||
68 | LD L,H,H,A |
||
69 | LD (cur00xy),HL |
||
70 | LD (cur01xy),HL |
||
71 | LD A,L ;1-᭮ ࠢ |
||
72 | CPL ;᭮ ࠢ |
||
73 | LD L,A |
||
74 | LD (cur10xy),HL |
||
75 | LD (cur11xy),HL |
||
76 | LD HL,(curX) |
||
77 | LD A,(curY) |
||
78 | LD H,A |
||
79 | ;LD (curYX),HL |
||
80 | LD (ray00yx_YX),HL |
||
81 | LD (ray01yx_YX),HL |
||
82 | LD (ray10yx_YX),HL |
||
83 | LD (ray11yx_YX),HL |
||
84 | LD (ray00xy_YX),HL |
||
85 | LD (ray01xy_YX),HL |
||
86 | LD (ray10xy_YX),HL |
||
87 | LD (ray11xy_YX),HL |
||
88 | SET mapdifbit,L |
||
89 | LD (ray00xy_YX2),HL |
||
90 | LD (ray01xy_YX2),HL |
||
91 | LD (ray10xy_YX2),HL |
||
92 | LD (ray11xy_YX2),HL |
||
775 | alone | 93 | ret |
94 | SCAN |
||
95 | call RAYPREPXY |
||
213 | alone | 96 | |
765 | alone | 97 | ;TODO ⮡ 㧭, 뢠, ⬥ ᠬ ( ) |
98 | |||
213 | alone | 99 | IF interpolate == 0 |
100 | |||
101 | IF lores |
||
102 | LD L,0;2*(32-scrwid) |
||
775 | alone | 103 | LD HY,SCRWIDPIX;scrwid*4 |
213 | alone | 104 | ELSE |
105 | LD L,0;4*(32-scrwid) |
||
775 | alone | 106 | LD HY,SCRWIDPIX;scrwid*8 |
213 | alone | 107 | ENDIF |
108 | RAY0 |
||
109 | LD A,L |
||
110 | LD (cura),A |
||
111 | CALL RAYCAST |
||
112 | LD HL,(cura) |
||
113 | LD H,distbuf/256+2 |
||
775 | alone | 114 | LD (HL),C ;dist (scale#) |
213 | alone | 115 | DEC H |
116 | LD (HL),B ;texx |
||
117 | DEC H |
||
118 | RRCA ;CY=0 |
||
1912 | alone | 119 | LD A,(DE) ;ID(YX) |
1917 | alone | 120 | ;ld a,0xc0 |
213 | alone | 121 | LD (HL),A ;ID |
122 | INC L |
||
123 | DEC HY |
||
124 | JP NZ,RAY0 |
||
125 | |||
126 | ELSE ;interpolate |
||
127 | main_step=interpolate;16 |
||
128 | ;oldscan=RAYCAST(0) |
||
129 | XOR A |
||
130 | LD L,A |
||
131 | LD (cura),A |
||
132 | CALL RAYCAST |
||
133 | EXX |
||
134 | ;main_a=main_step-1 |
||
135 | LD L,main_step-1 |
||
775 | alone | 136 | ;IF lores |
137 | ; LD HY,scrwid*4/main_step |
||
138 | ;ELSE |
||
139 | ; LD HY,scrwid*8/main_step |
||
140 | ;ENDIF |
||
141 | ld hy,SCRWIDPIX/main_step |
||
213 | alone | 142 | ;repeat { |
143 | ;L=main_a |
||
144 | ;BCDE'=oldscan |
||
145 | ;BCDE=newscan |
||
146 | RAY0 |
||
147 | ;newscan=RAYCAST(main_a) |
||
148 | LD A,L |
||
149 | LD (cura),A |
||
150 | CALL RAYCAST |
||
151 | LD HL,(cura) |
||
152 | ;INTERPOLATE_SUB(main_a, main_step, oldscan, newscan) |
||
153 | LD A,main_step |
||
154 | LD H,distbuf/256+2 |
||
775 | alone | 155 | LD (HL),C ;dist (scale#) |
213 | alone | 156 | DEC H |
157 | LD (HL),B ;texx |
||
158 | DEC H |
||
159 | RRCA ;CY=0 |
||
160 | CALL INTERPOLATE_SUB |
||
1912 | alone | 161 | LD A,(DE) ;ID(YX) |
1917 | alone | 162 | ;ld a,0xc0 |
213 | alone | 163 | LD (HL),A ;ID |
164 | ;oldscan=newscan |
||
165 | LD A,L |
||
166 | EXX |
||
167 | ;main_a+=main_step |
||
168 | ADD A,main_step |
||
169 | LD L,A |
||
170 | ;} until(main_a>255) |
||
171 | DEC HY |
||
172 | JP NZ,RAY0 |
||
173 | ENDIF ;interpolate |
||
174 | RET |
||
175 | |||
176 | ;((b+f)/2)^2-b^2/4-f^2/4 |
||
177 | ;a=e |
||
178 | MACRO MULPOS |
||
179 | LD H,tsqr2/256 |
||
180 | ADD A,C |
||
181 | RRA |
||
182 | LD L,A |
||
183 | LD A,(HL) |
||
184 | INC H |
||
185 | LD L,C |
||
186 | SUB (HL) |
||
187 | LD L,E |
||
188 | SUB (HL) |
||
189 | ENDM |
||
190 | |||
191 | MACRO DIVPOS |
||
192 | SRL C |
||
193 | DUP 7 |
||
194 | ADD A,C |
||
195 | jr NC,$+3 |
||
196 | SUB C |
||
197 | RL B |
||
198 | ADD A,A |
||
199 | EDUP |
||
200 | ADD A,C |
||
201 | LD A,B |
||
202 | RLA |
||
203 | ENDM |
||
204 | |||
205 | MACRO DIVNEG |
||
206 | SRL C |
||
207 | DUP 7 |
||
208 | SUB C |
||
209 | jr NC,$+3 |
||
210 | ADD A,C |
||
211 | RL B |
||
212 | ADD A,A |
||
213 | EDUP |
||
214 | SUB C |
||
215 | LD A,B |
||
216 | RLA |
||
217 | ENDM |
||
218 | |||
219 | |||
220 | ;Y |
||
221 | RAYCAST |
||
222 | ;L=(cura)=㣮 ࠭ |
||
223 | ; ABCDEHLIX |
||
772 | alone | 224 | ld a,(doortimer) |
766 | alone | 225 | ld ly,a |
213 | alone | 226 | LD H,tda/256 |
227 | LD A,(HL) |
||
228 | avision4L=$+1 |
||
229 | ADD A,0 |
||
230 | LD (rayrealangle),A |
||
231 | LD L,A |
||
232 | avision4H=$+1 |
||
233 | ADC A,0 |
||
234 | SUB L ;a1..0 = 0..3 ~ sector 1..4 |
||
235 | ;LD H,tctg/256 ;-pi/4..+pi/4 |
||
236 | INC H |
||
237 | LD C,(HL) ;ystep or xstep |
||
238 | LD HX,-1 ;IX=dist*cos |
||
239 | RRA |
||
240 | jr NC,ray13 |
||
241 | RRA |
||
242 | JP NC,ray2 |
||
243 | JP ray4 |
||
244 | ray13 RRA |
||
245 | JP NC,ray1 |
||
246 | JP ray3 |
||
247 | |||
248 | macro INCR num ;0..5 = bcdehl |
||
763 | alone | 249 | db 0x04+(8*(num)) |
213 | alone | 250 | endm |
251 | |||
252 | macro DECR num ;0..5 = bcdehl |
||
763 | alone | 253 | db 0x05+(8*(num)) |
213 | alone | 254 | endm |
255 | |||
763 | alone | 256 | ;RAY 1,1,H,D,y,x |
257 | MACRO RAY mainplus,secplus,maindirhlreg,maindirdereg,maindir,secdir |
||
213 | alone | 258 | ;mainplus=\0 ;᭮ ࠢ ⥫쭮 |
259 | ;secplus=\1 ;筮 ࠢ ⥫쭮 |
||
763 | alone | 260 | ;\2=᭮ ࠢ hl (YX) |
261 | ;\4=᭮ ࠢ de (yx) |
||
262 | ;\6=᭮ ࠢ (0=x, 1=y) |
||
263 | ;\7=筮 ࠢ (0=x, 1=y) |
||
264 | ;c= 蠣 |
||
213 | alone | 265 | LD A,E ;᭮ ࠢ |
266 | LD LX,A ;IX=dist*cos |
||
763 | alone | 267 | MULPOS ;a = a*c |
268 | IF secplus ;筮 ࠢ ⥫쭮 |
||
213 | alone | 269 | ADD A,D ;筮 ࠢ |
763 | alone | 270 | LD B,A ;texx |
213 | alone | 271 | ray0176_YX=$+1 |
763 | alone | 272 | LD HL,0 ;hl = ᭮ ⥭ |
213 | alone | 273 | IF maindir != 0 ;"\6\6"-"xx" |
274 | ray0176_YX2=$+1 |
||
763 | alone | 275 | LD DE,0 ;set mapdifbit ;.. y, 筮 x |
213 | alone | 276 | ELSE |
763 | alone | 277 | LD D,H ;.. x, 筮 y |
213 | alone | 278 | ld E,L |
763 | alone | 279 | ENDIF ;de = 筠 ⥭ |
280 | jr NC,2f;raynshort\0\1\7\6 ;筮 祭 .. |
||
281 | INCR maindirdereg^1 ;secdirdereg;INC \5 ;e/d |
||
213 | alone | 282 | LD A,(DE) |
766 | alone | 283 | add a,a |
284 | cp ID_DOOR*2;128+(22*2) |
||
763 | alone | 285 | jr z,9f |
766 | alone | 286 | ld a,(de) |
213 | alone | 287 | RLA |
764 | alone | 288 | jp C,1f;raysec\0\1\7\6 ;室 筮 ⥭ |
763 | alone | 289 | 9 |
290 | INCR maindirhlreg^1 ;secdirhlreg;INC \3 ;l/h |
||
213 | alone | 291 | 2;raynshort\0\1\7\6 |
292 | IF maindir != 1 ;"\6\6"-"yy" |
||
293 | SET mapdifbit,L |
||
294 | ENDIF |
||
763 | alone | 295 | ELSE ;筮 ࠢ ⥫쭮 |
213 | alone | 296 | LD L,A |
297 | LD A,D ;筮 ࠢ |
||
298 | SUB L |
||
763 | alone | 299 | LD B,A ;texx |
213 | alone | 300 | ray0176_YX=$+1 |
763 | alone | 301 | LD HL,0 ;hl = ᭮ ⥭ |
213 | alone | 302 | IF maindir != 0 ;"\6\6"-"xx" |
303 | ray0176_YX2=$+1 |
||
763 | alone | 304 | LD DE,0 ;set mapdifbit ;.. y, 筮 x |
213 | alone | 305 | ELSE |
763 | alone | 306 | LD D,H ;.. x, 筮 y |
213 | alone | 307 | ld E,L |
763 | alone | 308 | ENDIF ;de = 筠 ⥭ |
309 | jr NC,2f;raynshort\0\1\7\6 ;筮 祭 .. |
||
213 | alone | 310 | LD A,(DE) |
766 | alone | 311 | add a,a |
312 | cp ID_DOOR*2;128+(22*2) |
||
763 | alone | 313 | jr z,9f |
766 | alone | 314 | ld a,(de) |
213 | alone | 315 | RLA |
764 | alone | 316 | jp C,1f;raysec\0\1\7\6 ;室 筮 ⥭ |
763 | alone | 317 | 9 |
318 | ;த ᭮ ࠢ |
||
319 | DECR maindirhlreg^1 ;secdirhlreg |
||
320 | DECR maindirdereg^1 ;secdirdereg |
||
213 | alone | 321 | 2;raynshort\0\1\7\6 |
322 | IF maindir != 1 ;"\6\6"-"yy" |
||
323 | SET mapdifbit,L |
||
324 | ENDIF |
||
763 | alone | 325 | ENDIF |
326 | ; (⪨) 蠣 祭, ⥯ 묨 蠣 横 |
||
213 | alone | 327 | 3;raynsec=$;\0\1\7\6 |
328 | INC HX |
||
329 | IF mainplus ;᭮ ࠢ ⥫쭮 |
||
330 | INCR maindirhlreg;INC \2 ;h/l |
||
331 | ENDIF |
||
332 | LD A,(HL) |
||
766 | alone | 333 | add a,a |
334 | cp ID_DOOR*2;128+(22*2) |
||
335 | jp z,4f;doorhlq ; |
||
336 | ld a,(hl) |
||
213 | alone | 337 | RLA |
763 | alone | 338 | JP C,rayhlq ;b=texx ;室 ᭮ ⥭ |
764 | alone | 339 | 13 |
213 | alone | 340 | IF mainplus ;᭮ ࠢ ⥫쭮 |
341 | INCR maindirdereg;INC \4 ;d/e |
||
342 | ELSE |
||
343 | DECR maindirhlreg |
||
344 | DECR maindirdereg |
||
345 | ENDIF |
||
763 | alone | 346 | LD A,B ;texx |
213 | alone | 347 | IF secplus ;筮 ࠢ ⥫쭮 |
763 | alone | 348 | ADD A,C ; 蠣 |
213 | alone | 349 | ELSE |
763 | alone | 350 | SUB C ; 蠣 |
213 | alone | 351 | ENDIF |
763 | alone | 352 | LD B,A ;texx |
353 | jr NC,3b;raynsec;\0\1\7\6 ;筮 祭 .. |
||
764 | alone | 354 | 12 |
213 | alone | 355 | IF secplus ;筮 ࠢ ⥫쭮 |
763 | alone | 356 | INCR maindirdereg^1 ;secdirdereg;INC \5 ;e/d |
213 | alone | 357 | ENDIF |
358 | LD A,(DE) |
||
766 | alone | 359 | add a,a |
360 | cp ID_DOOR*2;128+(22*2) |
||
764 | alone | 361 | jr z,5f |
766 | alone | 362 | ld a,(de) |
213 | alone | 363 | RLA |
764 | alone | 364 | jp C,1f;raysec\0\1\7\6 ;室 筮 ⥭ |
763 | alone | 365 | 9 |
213 | alone | 366 | IF secplus ;筮 ࠢ ⥫쭮 |
763 | alone | 367 | INCR maindirhlreg^1 ;secdirhlreg;INC \3 ;l/h |
213 | alone | 368 | ELSE ;筮 ࠢ ⥫쭮 |
763 | alone | 369 | DECR maindirhlreg^1 ;secdirhlreg |
370 | DECR maindirdereg^1 ;secdirdereg |
||
213 | alone | 371 | ENDIF |
372 | JP 3b;raynsec;\0\1\7\6 |
||
373 | |||
764 | alone | 374 | 7 ; 㡠 , ( 饩 ⥭ !!!) |
375 | LD A,B ;texx |
||
376 | IF secplus ;筮 ࠢ ⥫쭮 |
||
377 | ADD A,C ; 蠣 |
||
378 | ELSE |
||
379 | SUB C ; 蠣 |
||
380 | ENDIF |
||
381 | LD B,A ;texx |
||
382 | jr C,12b;raynsec;\0\1\7\6 ;筮 祭 .. |
||
383 | ;3;raynsec=$;\0\1\7\6 |
||
384 | INC HX |
||
385 | IF mainplus ;᭮ ࠢ ⥫쭮 |
||
386 | INCR maindirhlreg;INC \2 ;h/l |
||
387 | ENDIF |
||
388 | jr 13b ;⠥, ⥭ । , த 筮 |
||
389 | |||
763 | alone | 390 | ; 筮 蠣 |
391 | 5 |
||
766 | alone | 392 | ld a,(de) |
393 | rla |
||
394 | jr nc,$+5 ; |
||
395 | ld ly,0 |
||
763 | alone | 396 | IF secplus ;筮 ࠢ ⥫쭮 |
397 | INCR maindirhlreg^1 ;secdirhlreg;INC \3 ;l/h |
||
398 | ELSE ;筮 ࠢ ⥫쭮 |
||
399 | DECR maindirhlreg^1 ;secdirhlreg |
||
400 | DECR maindirdereg^1 ;secdirdereg |
||
401 | ENDIF |
||
402 | INC HX |
||
764 | alone | 403 | bit 7,B ;texx |
763 | alone | 404 | IF secplus ;筮 ࠢ ⥫쭮 |
764 | alone | 405 | jp z,rayhlq ; ᭮ ⥭ |
763 | alone | 406 | ELSE |
764 | alone | 407 | jp nz,rayhlq ; ᭮ ⥭ |
763 | alone | 408 | ENDIF |
764 | alone | 409 | ;ld b,10 ;ᯫ譮 㡮 (0=ᯫ譮 ) |
410 | ;jp z,rayhlq |
||
411 | |||
412 | IF secplus ;筮 ࠢ ⥫쭮 |
||
413 | INCR maindirdereg^1 ;secdirdereg;INC \5 ;e/d |
||
414 | ENDIF |
||
415 | ;jp rayhlq ; , 室 ᭮ ⥭ |
||
416 | ;dec hx |
||
417 | ld a,b ;texx |
||
418 | add a,128 |
||
419 | ;ld b,a |
||
420 | ;jr 1f ;jr C,8f;raysec\0\1\7\6 ;室 筮 ⥭ |
||
421 | ;LD A,B |
||
422 | IF secplus ;筮 ࠢ ⥫쭮 |
||
423 | SUB C |
||
424 | else |
||
425 | ADD A,C |
||
426 | endif |
||
427 | ;a=texx |
||
1985 | alone | 428 | ex de,hl;EXD |
764 | alone | 429 | ;ex de,hl |
430 | ;jp rayhlq ; , 室 ᭮ ⥭ |
||
431 | push bc |
||
432 | IF secplus ;筮 ࠢ ⥫쭮 |
||
433 | DIVPOS ;texx(a)/step(c), b,c |
||
434 | ELSE |
||
435 | DIVNEG ;texx(a)/step(c), b,c |
||
436 | ENDIF |
||
437 | pop bc |
||
438 | IF mainplus ;᭮ ࠢ ⥫쭮 |
||
439 | CPL |
||
765 | alone | 440 | ;push hl |
441 | ;ld hl,timer |
||
442 | add a,ly;(hl) |
||
764 | alone | 443 | jr c,6f ;b=texx, 室 . ⥭ ( ) |
444 | LD B,A ;b=texx |
||
765 | alone | 445 | sub ly;(hl) |
446 | ;pop hl |
||
764 | alone | 447 | ELSE |
765 | alone | 448 | ;push hl |
449 | ;ld hl,timer |
||
450 | add a,ly;(hl) |
||
764 | alone | 451 | jr c,6f ;室 . ⥭ ( ) |
452 | LD B,A ;b=texx |
||
765 | alone | 453 | sub ly;(hl) |
764 | alone | 454 | CPL |
765 | alone | 455 | ;pop hl |
764 | alone | 456 | ENDIF |
457 | dec hx |
||
458 | JP raydeq ;c,de |
||
459 | 6 ;室 . ⥭ ( ) |
||
765 | alone | 460 | ;pop hl |
764 | alone | 461 | ex de,hl |
462 | jp rayhlq ;b=texx |
||
463 | |||
763 | alone | 464 | ; ᭮ 蠣 |
465 | 4 |
||
766 | alone | 466 | bit 7,(HL) |
467 | jr z,$+5 ; |
||
468 | ld ly,0 |
||
765 | alone | 469 | ;, , ⮣ 室 13b (.. । ) |
470 | IF mainplus ;᭮ ࠢ ⥫쭮 |
||
471 | DECR maindirhlreg;INC \4 ;d/e |
||
472 | ELSE |
||
473 | INCR maindirhlreg |
||
474 | ENDIF |
||
475 | ld a,(hl) |
||
476 | IF mainplus ;᭮ ࠢ ⥫쭮 |
||
477 | INCR maindirhlreg;INC \4 ;d/e |
||
478 | ELSE |
||
479 | DECR maindirhlreg |
||
480 | ENDIF |
||
766 | alone | 481 | add a,a |
482 | cp ID_DOOR*2;128+(22*2) |
||
483 | jp z,13b ; , , । |
||
765 | alone | 484 | ; |
763 | alone | 485 | srl c ; 蠣 |
486 | IF mainplus ;᭮ ࠢ ⥫쭮 |
||
487 | INCR maindirdereg;INC \4 ;d/e |
||
488 | ELSE |
||
489 | DECR maindirhlreg |
||
490 | DECR maindirdereg |
||
491 | ENDIF |
||
492 | LD A,B ;texx |
||
493 | IF secplus ;筮 ࠢ ⥫쭮 |
||
494 | ADD A,C ; 蠣 |
||
764 | alone | 495 | LD B,A ;texx |
496 | SUB C ; 蠣 |
||
763 | alone | 497 | ELSE |
498 | SUB C ; 蠣 |
||
764 | alone | 499 | LD B,A ;texx |
500 | ADD A,C ; 蠣 |
||
763 | alone | 501 | ENDIF |
764 | alone | 502 | jr c,2f |
503 | ex af,af' ;' |
||
765 | alone | 504 | ld a,ly;(timer) |
764 | alone | 505 | add a,b |
506 | ld b,a |
||
507 | jr nc,11f ; ᭮ ࠢ |
||
508 | ex af,af' ;' |
||
509 | ld b,a ;texx |
||
510 | sla c ; 蠣 |
||
511 | jp 7b ; |
||
512 | 11 |
||
513 | jp doorhlq;3b;raynsec;\0\1\7\6 ;筮 祭 .. |
||
514 | 2; ᭮ 蠣 - 室 筮 ⥭ |
||
763 | alone | 515 | IF secplus ;筮 ࠢ ⥫쭮 |
516 | INCR maindirdereg^1 ;secdirdereg;INC \5 ;e/d |
||
517 | ENDIF |
||
764 | alone | 518 | |
763 | alone | 519 | ;筠 ⥭ 蠣 |
520 | sla c ; 蠣 |
||
764 | alone | 521 | jr 8f |
763 | alone | 522 | |
523 | ;筠 ⥭ |
||
213 | alone | 524 | 1;raysec\0\1\7\6 |
525 | LD A,B |
||
526 | IF secplus ;筮 ࠢ ⥫쭮 |
||
527 | SUB C |
||
764 | alone | 528 | else |
529 | ADD A,C |
||
530 | endif |
||
531 | 8 |
||
532 | ;a=texx |
||
1985 | alone | 533 | ex de,hl;EXD |
764 | alone | 534 | IF secplus ;筮 ࠢ ⥫쭮 |
535 | DIVPOS ;texx(a)/step(c) |
||
213 | alone | 536 | ELSE |
764 | alone | 537 | DIVNEG ;texx(a)/step(c) |
213 | alone | 538 | ENDIF |
539 | IF mainplus ;᭮ ࠢ ⥫쭮 |
||
540 | CPL |
||
541 | LD B,A ;b=texx |
||
542 | ELSE |
||
543 | LD B,A ;b=texx |
||
544 | CPL |
||
545 | ENDIF |
||
546 | JP raydeq |
||
547 | ENDM |
||
548 | |||
549 | ;mainplus=\0 ;᭮ ࠢ ⥫쭮 |
||
550 | ;secplus=\1 ;筮 ࠢ ⥫쭮 |
||
551 | ;\2=᭮ ࠢ hl = 4..5 |
||
552 | ;\4=᭮ ࠢ de = 2..3 |
||
553 | ;\6=᭮ ࠢ |
||
554 | ;\7=筮 ࠢ |
||
763 | alone | 555 | ;c = ystep or xstep (蠣 筮 ࠢ) ᥣ ⥫ |
556 | ;HX=-1 ;IX=dist*cos |
||
213 | alone | 557 | ;ᥩ l=angle |
558 | ray1 |
||
559 | BIT 7,L |
||
560 | JP NZ,ray1b |
||
763 | alone | 561 | ;RAY 1,1,L,E,x,y ;1a |
213 | alone | 562 | cur11yx=$+1 |
563 | LD DE,0 |
||
763 | alone | 564 | RAY 1,1,5,3,0,1;x,y ;1a |
213 | alone | 565 | ;cur11yx=cur0176 |
566 | ray11yx_YX=ray0176_YX |
||
567 | ;ray11yx_YX2=ray0176_YX2 |
||
568 | ray1b |
||
763 | alone | 569 | ;RAY 1,1,H,D,y,x ;1b |
213 | alone | 570 | cur11xy=$+1 |
571 | LD DE,0 |
||
763 | alone | 572 | RAY 1,1,4,2,1,0;y,x ;1b |
213 | alone | 573 | ;cur11xy=cur0176 |
574 | ray11xy_YX=ray0176_YX |
||
575 | ray11xy_YX2=ray0176_YX2 |
||
576 | ray2 |
||
577 | BIT 7,L |
||
578 | JP NZ,ray2b |
||
763 | alone | 579 | ;RAY 1,0,H,D,y,x ;2a |
213 | alone | 580 | cur10xy=$+1 |
581 | LD DE,0 |
||
763 | alone | 582 | RAY 1,0,4,2,1,0;y,x ;2a |
213 | alone | 583 | ;cur10xy=cur0176 |
584 | ray10xy_YX=ray0176_YX |
||
585 | ray10xy_YX2=ray0176_YX2 |
||
586 | ray2b |
||
763 | alone | 587 | ;RAY 0,1,L,E,x,y ;2b |
213 | alone | 588 | cur01yx=$+1 |
589 | LD DE,0 |
||
763 | alone | 590 | RAY 0,1,5,3,0,1;x,y ;2b |
213 | alone | 591 | ;cur01yx=cur0176 |
592 | ray01yx_YX=ray0176_YX |
||
593 | ;ray01yx_YX2=ray0176_YX2 |
||
594 | ray3 |
||
595 | BIT 7,L |
||
596 | JP NZ,ray3b |
||
763 | alone | 597 | ;RAY 0,0,L,E,x,y ;3a |
213 | alone | 598 | cur00yx=$+1 |
599 | LD DE,0 |
||
763 | alone | 600 | RAY 0,0,5,3,0,1;x,y ;3a |
213 | alone | 601 | ;cur00yx=cur0176 |
602 | ray00yx_YX=ray0176_YX |
||
603 | ;ray00yx_YX2=ray0176_YX2 |
||
604 | ray3b |
||
763 | alone | 605 | ;RAY 0,0,H,D,y,x ;3b |
213 | alone | 606 | cur00xy=$+1 |
607 | LD DE,0 |
||
763 | alone | 608 | RAY 0,0,4,2,1,0;y,x ;3b |
213 | alone | 609 | ;cur00xy=cur0176 |
610 | ray00xy_YX=ray0176_YX |
||
611 | ray00xy_YX2=ray0176_YX2 |
||
612 | ray4 |
||
613 | BIT 7,L |
||
614 | JP NZ,ray4b |
||
763 | alone | 615 | ;RAY 0,1,H,D,y,x ;4a |
213 | alone | 616 | cur01xy=$+1 |
617 | LD DE,0 |
||
763 | alone | 618 | RAY 0,1,4,2,1,0;y,x ;4a |
213 | alone | 619 | ;cur01xy=cur0176 |
620 | ray01xy_YX=ray0176_YX |
||
621 | ray01xy_YX2=ray0176_YX2 |
||
622 | ray4b |
||
763 | alone | 623 | ;RAY 1,0,L,E,x,y ;4b |
213 | alone | 624 | cur10yx=$+1 |
625 | LD DE,0 |
||
763 | alone | 626 | RAY 1,0,5,3,0,1;x,y ;4b |
213 | alone | 627 | ;cur10yx=cur0176 |
628 | ray10yx_YX=ray0176_YX |
||
629 | ;ray10yx_YX2=ray0176_YX2 |
||
630 | |||
763 | alone | 631 | doorhlq |
632 | ld a,128 |
||
633 | jr raydeq |
||
764 | alone | 634 | rayhlq_texxaxorb |
635 | xor b |
||
636 | ld b,a |
||
213 | alone | 637 | rayhlq |
638 | XOR A |
||
639 | raydeq |
||
640 | ;b=texx |
||
641 | ;hl=YX |
||
642 | ;dist*cos=ix+a |
||
643 | |||
644 | PUSH HL |
||
645 | ADD A,LX |
||
646 | LD L,A |
||
647 | ADC A,HX |
||
648 | SUB L |
||
649 | LD H,A |
||
650 | ;HL=dist*cos=128..#3fff |
||
651 | ;ਢ 128..255 |
||
652 | LD DE,#000 |
||
653 | LD A,L |
||
654 | jr Z,TOLOGRLQ |
||
655 | DUP 5;6 |
||
656 | INC D |
||
657 | SRL H |
||
658 | RRA |
||
659 | jr Z,TOLOGRLE |
||
660 | EDUP |
||
661 | TOLOGRLQ ; |
||
1977 | alone | 662 | if antizalom;debug |
663 | cp 64 |
||
664 | jr nc,$+4 |
||
665 | ld a,64 |
||
666 | else |
||
213 | alone | 667 | OR A |
668 | JP M,$+5 ;>=128 |
||
669 | LD A,128 ;<128 |
||
1977 | alone | 670 | endif |
213 | alone | 671 | TOLOGRLE ; |
672 | LD L,A ;128..255 |
||
673 | ;D=0..5 |
||
674 | LD H,tlogd/256 |
||
675 | ;2. cos |
||
676 | rayrealangle=$+1 |
||
677 | LD A,(tlogcos) ;0..63 |
||
678 | ADD A,(HL) ;log(dist/2^N) = 128..255 for arg>=128 |
||
1977 | alone | 679 | IF antizalom;debug |
213 | alone | 680 | jr NC,$+3 |
681 | INC D |
||
682 | ENDIF |
||
683 | |||
684 | ;3.㬭 corrdist(scrX) - 砥 k/⠡ |
||
685 | ;(᮪頥 ﭨ sqrt(2) ࠧ) |
||
686 | ;corrdist(scrX)=1/sqrt(1+scrX^2), scrX=-1..+1 |
||
687 | ; ⠡ ⠡ |
||
688 | cura=$+1 |
||
689 | LD HL,tcorrlogd ;L=scrX=0..255="-127.5..127.5" |
||
690 | SUB (HL) ;64..128 |
||
1977 | alone | 691 | IF antizalom;debug |
213 | alone | 692 | jr NC,DEBBP |
693 | DEC D |
||
694 | JP P,DEBBP |
||
695 | INC D |
||
696 | XOR A |
||
697 | DEBBP ; |
||
698 | ENDIF |
||
699 | LD L,A |
||
700 | LD H,tlogd2sca/256 |
||
701 | SRA D |
||
702 | RR E ;DE=+0,+#80,..+#300 |
||
703 | ADD HL,DE |
||
1977 | alone | 704 | IF 0;debug |
213 | alone | 705 | BIT 7,(HL) |
706 | jr NZ,$ |
||
707 | ENDIF |
||
775 | alone | 708 | LD C,(HL) ;dist(scale#)=63..1;127..1 |
213 | alone | 709 | ;todo linear scale, recalc in DRAWWALLS |
710 | SCF |
||
435 | alone | 711 | RR B ;texx=0x80..0xFF |
213 | alone | 712 | IF scale64 |
435 | alone | 713 | SRL B ;texx=0x40..0x7F |
213 | alone | 714 | ENDIF |
715 | POP DE |
||
716 | RET |
||
717 | |||
718 | IF interpolate |
||
719 | IF 0 |
||
720 | I_SUB_INTERt ; |
||
721 | POP HL ; |
||
722 | PUSH HL ;de |
||
723 | LD A,D |
||
724 | SUB H |
||
725 | jr NZ,holeny |
||
726 | LD A,E |
||
727 | SUB L |
||
728 | JP Z,I_SUB_INTER ;த ⥭ |
||
729 | DEC A |
||
730 | CP 3 |
||
731 | jr C,nhole |
||
732 | JP isubneq |
||
733 | holeny ; |
||
734 | DEC A |
||
735 | CP 3 |
||
736 | jr NC,isubneq |
||
737 | LD A,E |
||
738 | CP L |
||
739 | jr NZ,isubneq |
||
740 | nhole ; |
||
741 | ENDIF |
||
742 | I_SUB_INTER |
||
743 | ; rightscan=Middlescan |
||
744 | LD A,C |
||
745 | EXX |
||
746 | ADD A,C |
||
747 | RRA |
||
748 | LD C,A ;dist |
||
749 | EXX |
||
750 | LD A,B |
||
751 | EXX |
||
752 | ADD A,B |
||
753 | RRA |
||
754 | LD B,A ;texx |
||
755 | I_SUB_SCANQ ; |
||
756 | ;INTERPOLATE_SUB(a-step, step, leftscan, rightscan);r=M |
||
757 | PUSH HL ;step,a |
||
758 | LD A,L |
||
759 | SUB H |
||
760 | LD L,A ;a-step |
||
761 | LD A,H |
||
762 | LD H,distbuf/256+2 |
||
763 | LD (HL),C ;dist |
||
764 | DEC H |
||
765 | LD (HL),B ;texx |
||
766 | DEC H |
||
767 | RRCA |
||
768 | CALL NC,INTERPOLATE_SUB |
||
1917 | alone | 769 | LD A,(DE) ;ID |
770 | ;ld a,0xc0 |
||
213 | alone | 771 | LD (HL),A ;ID |
772 | ;leftscan=rightscan ;=Middlescan |
||
773 | EXX |
||
774 | POP HL ;step,a |
||
775 | ;pop(rightscan) |
||
435 | alone | 776 | POP DE |
777 | pop BC |
||
213 | alone | 778 | ;INTERPOLATE_SUB(a, step, leftscan, rightscan) ;l=M,r=R |
779 | ;scan[a]=rightscan |
||
780 | ;if (step==1) exit |
||
781 | LD A,H |
||
782 | LD H,distbuf/256+2 |
||
783 | LD (HL),C ;dist |
||
784 | DEC H |
||
785 | LD (HL),B ;texx |
||
786 | DEC H |
||
787 | RRCA |
||
788 | RET C |
||
789 | INTERPOLATE_SUB |
||
790 | ;L=a |
||
791 | ;A=step/2 ;not preserved |
||
792 | ;BCDE'=leftscan ;(a-step) ;not preserved |
||
793 | ;BCDE=rightscan ;(a) |
||
794 | ;CY=0 |
||
795 | EXA |
||
1917 | alone | 796 | LD A,(DE) ;ID |
213 | alone | 797 | LD (HL),A ;ID ;texx,dist are written already |
798 | EXA |
||
799 | ;step=step/2 |
||
800 | LD H,A |
||
801 | ;push(rightscan) |
||
435 | alone | 802 | PUSH BC |
803 | push DE |
||
213 | alone | 804 | ;if(rightscan.yx==leftscan.yx) |
805 | ;LD A,(DE) |
||
806 | EXX |
||
807 | ;EXD |
||
808 | ;XOR (HL) |
||
809 | ;EXD |
||
810 | ;JP Z,I_SUB_INTERt |
||
811 | POP HL ; |
||
812 | PUSH HL ;de |
||
813 | ;OR A |
||
814 | SBC HL,DE ;CY=0 |
||
815 | JP Z,I_SUB_INTER |
||
816 | isubneq |
||
817 | ; rightscan=RAYCAST(a-step) |
||
818 | EXX |
||
819 | PUSH HL |
||
820 | LD A,L |
||
821 | SUB H |
||
822 | LD L,A ;a-step |
||
823 | LD (cura),A |
||
824 | CALL RAYCAST |
||
825 | POP HL |
||
826 | JP I_SUB_SCANQ |
||
827 | ;else - see above |
||
828 | ENDIF ;interpolate |
||
829 | |||
830 | |||
831 | ;============================ |
||
832 | IF sprites |
||
775 | alone | 833 | DOSORTSPRITES=1 |
1903 | alone | 834 | ;CURSPRITES_RECSZ=5;4 |
775 | alone | 835 | |
213 | alone | 836 | SCANMONS |
837 | LD A,(curX) |
||
838 | SUB viewrange |
||
839 | LD (scmonX),A |
||
840 | LD A,(curY) |
||
841 | SUB viewrange |
||
842 | LD (scmonY),A |
||
843 | LD HL,cursprites |
||
775 | alone | 844 | if DOSORTSPRITES |
213 | alone | 845 | LD (HL),0 ;end of sprites |
775 | alone | 846 | endif |
213 | alone | 847 | LD (scaneof),HL |
848 | LD HL,MONSTRS+1 ;1+砫 ⠡./।⮢ |
||
775 | alone | 849 | ld hx,-1 ;monster index |
850 | jp SCMONS0 ;横 ᪠- /।⮢ |
||
213 | alone | 851 | SCMONNx |
852 | LD A,L |
||
853 | ADD A,8 |
||
854 | LD L,A |
||
855 | JR C,SCMxIH |
||
856 | SCMONS0 |
||
775 | alone | 857 | inc hx ;monster index |
858 | LD A,(HL) ;X |
||
213 | alone | 859 | INC A |
860 | RET Z |
||
861 | scmonX=$+1 |
||
862 | SUB 0 |
||
863 | CP viewrange*2+1 |
||
864 | JP NC,SCMONNx |
||
435 | alone | 865 | INC L |
866 | inc L |
||
213 | alone | 867 | LD A,(HL) |
868 | scmonY=$+1 |
||
869 | SUB 0 |
||
870 | CP viewrange*2+1 |
||
871 | JR C,SCMONY |
||
872 | LD A,L |
||
873 | ADD A,6 |
||
874 | LD L,A |
||
875 | JP NC,SCMONS0 |
||
876 | SCMxIH INC H |
||
877 | JP SCMONS0 |
||
435 | alone | 878 | SCMONY DEC L |
879 | dec L |
||
880 | dec L |
||
213 | alone | 881 | LD C,(HL) |
882 | INC L |
||
883 | LD B,(HL) ;Xx |
||
884 | INC L |
||
885 | LD E,(HL) |
||
886 | INC L |
||
887 | LD D,(HL) ;Yy |
||
888 | INC L |
||
775 | alone | 889 | PUSH HL |
213 | alone | 890 | PUSH BC |
2021 | alone | 891 | ld a,(IMavision+1) |
892 | sub (hl) ;DIR |
||
1985 | alone | 893 | inc l ;skip DIR (TODO use) |
894 | LD L,(HL) ;TYPE*8+phase |
||
895 | ld H,0 |
||
440 | alone | 896 | LD BC,MONSTAB-8 |
213 | alone | 897 | ADD HL,BC |
2021 | alone | 898 | if doublescr |
899 | ;a=mydir-objdir. 128, ᬮ . 0 - . 64 - ? |
||
900 | sub 32 |
||
901 | rlca |
||
902 | rlca |
||
903 | rlca |
||
904 | and 6 |
||
905 | add a,ZOMBIEMANrotate-ZOMBIEMANgo |
||
906 | ld c,a ;mydir-objdir |
||
907 | endif |
||
1985 | alone | 908 | LD A,(HL) ;ID ⥪ ( ᨬ 䠧) |
2002 | alone | 909 | ld lx,a ;!=0 |
2021 | alone | 910 | if doublescr |
911 | ld a,l |
||
912 | cp 0xff&(3*8+0 + (MONSTAB-8)) |
||
913 | jr z,goside_phase1 |
||
914 | cp 0xff&(3*8+1 + (MONSTAB-8)) |
||
915 | ;jr z,goside_phase2 |
||
916 | jr nz,nogoside |
||
917 | goside_phase2 |
||
918 | goside_phase1 |
||
919 | ld b,0 |
||
920 | add hl,bc |
||
921 | ld a,(hl) |
||
922 | ld lx,a |
||
923 | nogoside |
||
924 | endif |
||
213 | alone | 925 | POP BC |
926 | ;calculate sprite position |
||
927 | LD HL,(curYy) |
||
928 | SBC HL,DE ;Yy |
||
1985 | alone | 929 | ex de,hl;EXD |
213 | alone | 930 | LD HL,(curXx) |
931 | SBC HL,BC ;Xx |
||
932 | CALL OBJMUL |
||
933 | ;BC=dist |
||
934 | ;DE=xscr |
||
935 | IF lores |
||
936 | SRA D |
||
937 | RR E |
||
938 | ENDIF |
||
939 | LD HL,pixperchr*scrwid/2-256 |
||
940 | SBC HL,DE |
||
941 | INC H |
||
942 | jr NZ,SCANnSPR ;X out of screen |
||
943 | IF lores |
||
944 | BIT 7,L |
||
945 | jr NZ,SCANnSPR ;X out of screen |
||
946 | ENDIF |
||
947 | ;write data to cursprites |
||
775 | alone | 948 | ;ID 8 (0=end) |
949 | ;dist 16 |
||
950 | ;xscr 8 |
||
951 | ;monster index |
||
952 | if DOSORTSPRITES == 0 |
||
953 | LD A,L ;xscr |
||
954 | scaneof=$+1 |
||
955 | ld hl,0 |
||
956 | ld e,lx |
||
957 | ld (hl),e ;id |
||
958 | inc l |
||
959 | ld (hl),c |
||
960 | inc l |
||
961 | ld (hl),b ;bc=dist |
||
962 | inc l |
||
963 | ld (hl),a ;xscr |
||
964 | inc l |
||
965 | if CURSPRITES_RECSZ == 5 |
||
966 | ld a,hx |
||
967 | ld (hl),a ;monster index |
||
968 | inc l |
||
969 | endif |
||
970 | ld (hl),0 |
||
971 | ld (scaneof),hl |
||
972 | else |
||
973 | |||
213 | alone | 974 | PUSH BC |
975 | EXX |
||
976 | POP BC |
||
775 | alone | 977 | LD HL,cursprites+((-(CURSPRITES_RECSZ-2))&0xff) |
213 | alone | 978 | SCANsort0 |
775 | alone | 979 | if CURSPRITES_RECSZ == 5 |
435 | alone | 980 | INC L |
775 | alone | 981 | endif |
982 | INC L |
||
435 | alone | 983 | inc L |
213 | alone | 984 | LD A,(HL) |
985 | OR A |
||
986 | jr Z,SCANins |
||
987 | INC L |
||
988 | LD E,(HL) |
||
989 | INC L |
||
775 | alone | 990 | LD D,(HL) ;de=dist |
1985 | alone | 991 | ex de,hl;EXD |
213 | alone | 992 | SBC HL,BC |
1985 | alone | 993 | ex de,hl;EXD |
213 | alone | 994 | jr NC,SCANsort0 |
435 | alone | 995 | DEC L |
996 | dec L |
||
213 | alone | 997 | SCANins |
998 | PUSH BC |
||
999 | scaneof=$+1 |
||
1000 | LD DE,0 |
||
1001 | LD A,E |
||
1002 | SUB L |
||
1003 | INC A ;bytes to move |
||
1004 | LD C,A |
||
1005 | LD B,0 |
||
440 | alone | 1006 | LD H,D |
1007 | ld L,E |
||
213 | alone | 1008 | LD A,E |
775 | alone | 1009 | ADD A,CURSPRITES_RECSZ;4 |
213 | alone | 1010 | LD E,A |
1011 | LD (scaneof),A |
||
1012 | LDDR |
||
1013 | INC HL |
||
1014 | POP BC |
||
440 | alone | 1015 | LD A,lx;1 |
1016 | ;A=ID ⥪ |
||
213 | alone | 1017 | ;BC'=dist |
1018 | ;L'=xscr |
||
1019 | LD (HL),A |
||
1020 | INC L |
||
1021 | LD (HL),C |
||
1022 | INC L |
||
1023 | LD (HL),B |
||
1024 | INC L |
||
1025 | EXX |
||
1026 | LD A,L |
||
1027 | EXX |
||
1028 | LD (HL),A ;xscr |
||
1029 | INC L |
||
775 | alone | 1030 | if CURSPRITES_RECSZ == 5 |
1031 | ld a,hx |
||
1032 | ld (hl),a ;monster index |
||
1033 | inc l |
||
1034 | endif |
||
213 | alone | 1035 | EXX |
775 | alone | 1036 | endif |
213 | alone | 1037 | SCANnSPR ; |
775 | alone | 1038 | |
1039 | POP HL |
||
435 | alone | 1040 | INC L |
1041 | inc L |
||
1042 | inc L |
||
1043 | inc HL |
||
213 | alone | 1044 | INC L |
1045 | JP SCMONS0 |
||
1046 | |||
1047 | DRAWSPRITES |
||
775 | alone | 1048 | ;ID 8 (0=end) |
1049 | ;dist 16 |
||
1050 | ;xscr 8 |
||
1051 | ;monster index |
||
213 | alone | 1052 | LD IY,cursprites |
1053 | DRAWSPRITES0 ; |
||
775 | alone | 1054 | LD A,(IY) ;id |
213 | alone | 1055 | OR A |
1056 | RET Z |
||
1057 | INC IY |
||
1058 | LD C,(IY) |
||
1059 | INC IY |
||
775 | alone | 1060 | LD B,(IY) ;bc=dist |
213 | alone | 1061 | INC IY |
440 | alone | 1062 | ;A=ID |
1063 | EXX |
||
1962 | alone | 1064 | LD D,a ;ID ( ) |
440 | alone | 1065 | EXX |
2002 | alone | 1066 | |
775 | alone | 1067 | LD L,(IY) ;xscr |
213 | alone | 1068 | INC IY |
775 | alone | 1069 | if CURSPRITES_RECSZ == 5 |
1070 | INC IY |
||
1071 | endif |
||
213 | alone | 1072 | ;L=xscr |
1073 | ;BC=dist |
||
1074 | INC B |
||
1075 | DJNZ gFILLNCLOSE |
||
448 | alone | 1076 | LD A,108;64 ; ⮣ ⮫쪮 ਭ ࠩ ᨬ쭮 ਡ, ᨬ쭠 ( ࠭祭 ⨬ ࠢ , ) ;108 ATM ࠭, 128 8 ᭨ |
213 | alone | 1077 | CP C |
2062 | alone | 1078 | ;jr nc,DRAWSPRITES0 ; 㬥蠥 ;TODO 㬥 ⫨ ࠣ |
213 | alone | 1079 | jr C,$+3 |
439 | alone | 1080 | LD C,A ;ࠩ 誮 !!! 㬥訬 |
213 | alone | 1081 | gFILLNCLOSE |
1082 | PUSH BC ;dist |
||
1083 | ;ਢ 128..255 |
||
1084 | LD DE,#000 |
||
1085 | INC B |
||
1086 | DEC B |
||
1087 | LD A,C |
||
1088 | jr Z,MOTOLOGRLQ |
||
1089 | DUP 5;6 |
||
1090 | INC D |
||
1091 | SRL B |
||
1092 | RRA |
||
1093 | jr Z,MOTOLOGRLE |
||
1094 | EDUP |
||
1095 | MOTOLOGRLQ ; |
||
448 | alone | 1096 | ;OR A |
1097 | ;JP M,$+5 ;>=128 |
||
1098 | ;LD A,128 ;<128 |
||
1099 | ;;cp 96 |
||
1100 | ;;jr nc,$+4 |
||
1101 | ;;ld a,96 ;ࠩ 誮 !!! 㢥稬 dist 㬥襭 |
||
213 | alone | 1102 | MOTOLOGRLE ; |
1103 | LD C,A ;128..255 ;D=0..5 |
||
1104 | LD B,tlogd/256 |
||
1105 | LD A,(BC) ;log(dist) = 128..255 for arg>=128 |
||
448 | alone | 1106 | if atm==0 |
1107 | SUB 16;64 ;0..127 for arg=64..127 ;??? |
||
1108 | endif |
||
213 | alone | 1109 | LD C,A ;0 for arg<64 |
1110 | LD B,tlogd2sca/256 |
||
1111 | SRA D |
||
1112 | RR E ;DE=+0,+#80,..+#300 |
||
1985 | alone | 1113 | ex de,hl;EXD |
213 | alone | 1114 | ADD HL,BC |
448 | alone | 1115 | LD C,(HL) ;scale# |
1985 | alone | 1116 | ex de,hl;EXD |
213 | alone | 1117 | ; |
1118 | POP DE ;dist |
||
439 | alone | 1119 | if atm |
1120 | ld a,l |
||
1121 | ld h,d |
||
1122 | ld l,e |
||
440 | alone | 1123 | srl h |
1124 | rr l |
||
439 | alone | 1125 | add hl,de |
440 | alone | 1126 | ex de,hl ;de = de * 1.5 |
439 | alone | 1127 | ld l,a |
1128 | else |
||
213 | alone | 1129 | IF loresspr |
1130 | SLA E |
||
1131 | RL D |
||
1132 | ENDIF |
||
1133 | SLA E |
||
439 | alone | 1134 | RL D ;DE=texx step = de * 4 |
1135 | endif |
||
213 | alone | 1136 | |
1137 | IF loresspr_hires|optresspr |
||
1138 | RES 0,L |
||
1139 | ENDIF |
||
1140 | LD H,distbuf/256+2 ;ID,texx,dist |
||
448 | alone | 1141 | LD A,C ;scale# |
213 | alone | 1142 | CP (HL) |
1909 | alone | 1143 | if !atm |
1144 | ld hx,0xc0 ;TODO |
||
1145 | endif |
||
448 | alone | 1146 | CALL NC,DRAWSPRITE ;object center is visible ;TODO ᨬ 業 |
213 | alone | 1147 | JP DRAWSPRITES0 |
1148 | |||
1918 | alone | 1149 | ;㬭 |
1150 | ;A=+-0.7 |
||
1151 | ;HL=A*DE |
||
1152 | ;A ࠭!!! |
||
1153 | MULT |
||
1154 | LD HL,0 |
||
1155 | MULTADD |
||
1156 | RLCA |
||
1157 | JR NC,MULTPLU |
||
1158 | DUP 6 |
||
1159 | SRA D |
||
1160 | RR E |
||
1161 | RLCA |
||
1162 | JR C,$+4 |
||
1163 | SBC HL,DE |
||
1164 | EDUP |
||
1165 | RLCA |
||
1166 | RET C |
||
1167 | SRA D |
||
1168 | RR E |
||
1169 | OR A |
||
1170 | SBC HL,DE |
||
1171 | RET |
||
1172 | MULTPLU DUP 6 |
||
1173 | SRA D |
||
1174 | RR E |
||
1175 | RLCA |
||
1176 | JR NC,$+3 |
||
1177 | ADD HL,DE |
||
1178 | EDUP |
||
1179 | RLCA |
||
1180 | RET NC |
||
1181 | SRA D |
||
1182 | RR E |
||
1183 | ADD HL,DE |
||
1184 | RET |
||
1185 | |||
213 | alone | 1186 | OBJMULQ |
1187 | POP AF ;X |
||
1188 | LD D,#40 ;X out of screen |
||
1189 | RET |
||
1190 | ; न ꥪ (Xx=HL, Yy=DE) |
||
1191 | ; न ࠭ (DE=xscr, BC=ﭨ) |
||
1192 | OBJMUL |
||
1193 | PUSH HL ;X |
||
1194 | PUSH DE ;Y |
||
1195 | PUSH HL ;X |
||
1196 | LD HL,(curangle) ;L=業 鸞 |
||
1197 | LD C,(HL) ;sin=蠣 Y |
||
1198 | LD A,-64 |
||
1199 | SUB L |
||
1200 | LD L,A |
||
1201 | LD B,(HL) ;-COS=蠣 X |
||
1202 | ;Bc=DXdy=COSsin |
||
1203 | LD A,C |
||
1204 | CPL |
||
1205 | CALL MULT ;HL=A*DE=-sin*Y |
||
1206 | POP DE ;X |
||
1207 | LD A,B |
||
1208 | CALL MULTADD ;HL=-COS*X-sin*Y=d(ﭨ ꥪ) |
||
1209 | POP DE ;Y |
||
1210 | BIT 7,H |
||
1211 | jr NZ,OBJMULQ ; ﭨ<0, ꥪ ᯨ=>exit |
||
1212 | LD (_OBJd1),HL |
||
1213 | CALL MULT;A=B=-COS, HL=-COS*Y |
||
1214 | POP DE ;X |
||
1215 | LD A,C |
||
1216 | CALL MULTADD ;HL=-COS*Y+sin*X=xscr*d |
||
1985 | alone | 1217 | ex de,hl;EXD |
213 | alone | 1218 | _OBJd1=$+1 |
1219 | LD BC,0 ;BC=d ; MONDIV 稬 DE=xscr |
||
1918 | alone | 1220 | ;jp MONDIV |
1221 | ENDIF ;sprites |
||
213 | alone | 1222 | ; |
1223 | ;DE=+-7.8;BC=+7.8 |
||
1224 | ;DE=DE/BC=+-8.7/2 |
||
1225 | ;BC ࠭!!! |
||
437 | alone | 1226 | MONDIV |
213 | alone | 1227 | LD H,0 |
1228 | LD A,D |
||
1229 | SLA E |
||
1230 | RLA |
||
1231 | JP C,MONDIVNEG ; <0 |
||
1232 | LD L,A |
||
1233 | INC E |
||
1234 | LD A,E |
||
1235 | DUP 7 |
||
1236 | SBC HL,BC |
||
1237 | JR NC,$+3 |
||
1238 | ADD HL,BC |
||
1239 | RLA |
||
1240 | ADC HL,HL |
||
1241 | EDUP |
||
1242 | CPL |
||
1243 | LD D,A |
||
1244 | DUP 7 |
||
1245 | SBC HL,BC |
||
1246 | JR NC,$+3 |
||
1247 | ADD HL,BC |
||
1248 | RLA |
||
1249 | ADD HL,HL |
||
1250 | EDUP |
||
1251 | SBC HL,BC |
||
1252 | JR NC,$+3 |
||
1253 | ADD HL,BC |
||
1254 | RLA |
||
1255 | CPL |
||
1256 | LD E,A |
||
1257 | RET |
||
1258 | ; <0 |
||
1259 | MONDIVNEG |
||
1260 | CPL |
||
1261 | LD L,A |
||
1262 | SBC A,A |
||
1263 | XOR E |
||
1264 | DUP 7 |
||
1265 | SBC HL,BC |
||
1266 | JR NC,$+3 |
||
1267 | ADD HL,BC |
||
1268 | RLA |
||
1269 | ADC HL,HL |
||
1270 | EDUP |
||
1271 | LD D,A |
||
1272 | DUP 7 |
||
1273 | SBC HL,BC |
||
1274 | JR NC,$+3 |
||
1275 | ADD HL,BC |
||
1276 | RLA |
||
1277 | ADD HL,HL |
||
1278 | EDUP |
||
1279 | SBC HL,BC |
||
1280 | JR NC,$+3 |
||
1281 | ADD HL,BC |
||
1282 | RLA |
||
1283 | LD E,A |
||
1284 | RET |