paul_nicholls

movePlayerUpOrScrollDown

Aug 6th, 2025
767
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 1.83 KB | None | 0 0
  1. procedure movePlayerUpOrScrollDown();
  2. // player moving up
  3. begin
  4.   if viewRowStart = mapStart then begin
  5.   // at top of map so don't scroll screen down
  6.   // and move normally
  7.     player.yPos := player.yPos + player.yVel;
  8.     Exit;
  9.   end;
  10.  
  11.   if player.ty >= VIEW_THRESHOLD_T then begin
  12.     // don't scroll yet, not high enough up the screen
  13.     // move normally
  14.     player.yPos := player.yPos + player.yVel;
  15.     Exit;
  16.   end;
  17.  
  18.   vic_waitForRaster(IRQ_BLANK_LINE);
  19.    
  20.   // change scroll reg by y-vel (max 2 per frame)
  21.   Dec(scrollY,abs8(player.yVel.b1));
  22.  
  23.   if scrollY and 128 then begin
  24.   // is negative so wrap around and do hardscroll
  25.     scrollY := scrollY and 7;
  26.    
  27.     asm
  28.       .for(var y = SCREEN_HEIGHT - 2; y >= VIEW_ROW_OFFSET; y--) {
  29.         ldx #MAP_WIDTH-1
  30.       !:
  31.         lda SCREEN0_ADDRESS + (y + 0) * SCREEN_WIDTH,x
  32.         sta SCREEN0_ADDRESS + (y + 1) * SCREEN_WIDTH,x
  33.         lda COLOR_ADDRESS + (y + 0) * SCREEN_WIDTH,x
  34.         sta COLOR_ADDRESS + (y + 1) * SCREEN_WIDTH,x
  35.         dex
  36.         bpl !-
  37.       }
  38.     end;
  39.    
  40.     // move view up in map
  41.     Dec(viewRowStart);
  42.     Dec(viewRowEnd);
  43.    
  44.     // fill top row with level data
  45.     addressPntr1 := levelRowOffset[viewRowStart];
  46.     addressPntr2 := screenRowOffset[VIEW_ROW_OFFSET];
  47.    
  48.     asm
  49.       clc
  50.       lda addressPntr2 + 0
  51.       adc #<(COLOR_ADDRESS-SCREEN0_ADDRESS)
  52.       sta addressPntr3 + 0
  53.       lda addressPntr2 + 1
  54.       adc #>(COLOR_ADDRESS-SCREEN0_ADDRESS)
  55.       sta addressPntr3 + 1
  56.      
  57.       ldy #MAP_WIDTH-1
  58.     !:
  59.       lda (addressPntr1),y
  60.       // store level char for color attrib later
  61.       pha
  62.       sta (addressPntr2),y
  63.       // restore level char for color attrib
  64.       pla
  65.       tax
  66.       lda charAttribs,x
  67.       sta (addressPntr3),y
  68.       dey
  69.       bpl !-
  70.     end;
  71.   end;
  72.  
  73. end;
  74.  
  75.  
Advertisement
Add Comment
Please, Sign In to add comment