Advertisement
Guest User

Untitled

a guest
Feb 4th, 2015
336
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. #define renderDistance 10   ; adjust this to change the render distance
  3. #define priorAngle rcStack+2    ; 1 byte
  4.  
  5.    
  6. engine_raycaster_Init:
  7.     ld de,SlendMapPtr
  8. _raycaster_loopobject
  9.     push de
  10.         inc de
  11.         ld a,(de)
  12.         ld hl,playerPosY
  13.         sub (hl)
  14.         ld c,a
  15.         dec de
  16.         ld a,(de)
  17.         ld hl,playerPosX
  18.         sub (hl)
  19.         call _getDistance
  20.         ld de,(renderDistance)
  21.         cpHL
  22.         jr nc,_raycaster_nextobject
  23.         ld a,l
  24.         push af                         ; distance
  25.             ld a,(de)
  26.             ld hl,playerPosX
  27.             sub (hl)
  28.             ld b,a
  29.             inc de
  30.             ld a,(de)
  31.             ld hl,playerPoxY
  32.             sub (hl)
  33.             call a_div_b
  34.             call arctan_88
  35.             ld hl,playerDirection
  36.             sub (hl) \ add a,5 \ cp 11 \ jr nc,_raycaster_nextobject
  37.             push af                     ; angle
  38.                 inc de
  39.                 ld a,(de)               ; a = object type id, use to pull sprite
  40.                 ld hl,spriteLUT \ add a,a \ ld c,a \ ld b,0
  41.                 add hl,bc
  42.                 ld hl,(hl) \ ld bc,spriteStart \ add hl,bc      ; hl = PTR to sprite layers
  43.             pop af      ; angle back out
  44.             rla \ rla \ rla
  45.             ld d,a                      ; we got our x-coord
  46.             ld b,a \ ld a,20 \ add a,b \ ld e,a     ; we got our y-coord
  47.         pop af                          ; distance back out
  48.         ld a,c \ ld b,0
  49.         ld hl,distanceLUT
  50.         add hl,bc
  51.         ld a,(hl)                       ; distance -> scale factor, out a
  52.         call render_ScaledSprite
  53. _raycaster_nextobject
  54.     pop de
  55.     ld hl,3
  56.     add hl,de
  57.     ex de,hl
  58.     ld a,(de)
  59.     cp $ff
  60.     ret z
  61.     jr _raycaster_loopobject
  62.    
  63.        
  64. spriteLUT:
  65. ; pretend there is data here   
  66. distanceLUT:
  67. .db $00,$F2,$E5,$D8,$CC,$BF,$B2,$A5,$99,$8C,$7F
  68.        
  69.    
  70. render_ScaledSprite:
  71. ;   in: hl = ptr to sprite, de = coords of sprite, a = scale factor
  72. ;   scalespr.inc
  73. ; putScaledSprite reqs: hl=sprite PTR, de=(x,y), bc=(height,width/8), a=scale factor ($01 to $00 <=> 0.4% to 100%)
  74. ; in the original routine, it wrote to plotsscreen (ld de,plotSScreen). I changed its write-to to (iy), so that I could call the routine twice (ld de,(iy)).
  75.     ld b,(hl)
  76.     inc hl
  77.     ld c,(hl)
  78.     inc hl
  79.     ld (iy),frontBuffer1
  80.     push de
  81.         push af
  82.             push hl
  83.                 push bc
  84.                     call putScaledSprite
  85.                 pop bc
  86.             pop hl
  87.             ; jump hl to start of back buffer sprite
  88.             ld e,c      ; bc: c is width (in bytes), b is height
  89.             ld d,0
  90.             push bc
  91.             __get2ndLayer_loop:
  92.                 add hl,de
  93.                 djnz __get2ndLayer_loop
  94.             pop bc
  95.         pop af
  96.     pop de
  97.     ld (iy),frontBuffer2
  98.     call putScaledSprite
  99.     ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement