paul_nicholls

movePlayerDownOrScrollUp

Aug 6th, 2025
6,224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 1.84 KB | None | 0 0
  1. procedure movePlayerDownOrScrollUp();
  2. // player moving down
  3. begin
  4.   if viewRowEnd = mapEnd then begin
  5.   // at bottom of map so don't scroll screen up
  6.   // and move normally
  7.     player.yPos := player.yPos + player.yVel;
  8.     Exit;
  9.   end;
  10.  
  11.   if player.ty < VIEW_THRESHOLD_B then begin
  12.     // don't scroll yet, not low enough down 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.   Inc(scrollY,2);//abs8(player.yVel.b1));
  22.  
  23.   if scrollY >= 8 then begin
  24.   // wrap around and do hardscroll
  25.     scrollY := scrollY and 7;
  26.    
  27.     asm
  28.       .for(var y = VIEW_ROW_OFFSET+1; y < SCREEN_HEIGHT; 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 down in map
  41.     Inc(viewRowStart);
  42.     Inc(viewRowEnd);
  43.    
  44.     // fill bottom row with level data
  45.     addressPntr1 := levelRowOffset[viewRowEnd];
  46.     addressPntr2 := screenRowOffset[SCREEN_HEIGHT-1];
  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. //  vic_set_scrolly(scrollY);
  74. end;
  75.  
Advertisement
Add Comment
Please, Sign In to add comment