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