?login_element?

Subversion Repositories NedoOS

Rev

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