Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- procedure movePlayerDownOrScrollUp();
- // player moving down
- begin
- if viewRowEnd = mapEnd then begin
- // at bottom of map so don't scroll screen up
- // and move normally
- player.yPos := player.yPos + player.yVel;
- Exit;
- end;
- if player.ty < VIEW_THRESHOLD_B then begin
- // don't scroll yet, not low enough down the screen
- // move normally
- player.yPos := player.yPos + player.yVel;
- Exit;
- end;
- vic_waitForRaster(IRQ_BLANK_LINE);
- // change scroll reg by y-vel (max 2 per frame)
- Inc(scrollY,2);//abs8(player.yVel.b1));
- if scrollY >= 8 then begin
- // wrap around and do hardscroll
- scrollY := scrollY and 7;
- asm
- .for(var y = VIEW_ROW_OFFSET+1; y < SCREEN_HEIGHT; y++) {
- ldx #MAP_WIDTH-1
- !:
- lda SCREEN0_ADDRESS + (y + 0) * SCREEN_WIDTH,x
- sta SCREEN0_ADDRESS + (y - 1) * SCREEN_WIDTH,x
- lda COLOR_ADDRESS + (y + 0) * SCREEN_WIDTH,x
- sta COLOR_ADDRESS + (y - 1) * SCREEN_WIDTH,x
- dex
- bpl !-
- }
- end;
- // move view down in map
- Inc(viewRowStart);
- Inc(viewRowEnd);
- // fill bottom row with level data
- addressPntr1 := levelRowOffset[viewRowEnd];
- addressPntr2 := screenRowOffset[SCREEN_HEIGHT-1];
- asm
- clc
- lda addressPntr2 + 0
- adc #<(COLOR_ADDRESS-SCREEN0_ADDRESS)
- sta addressPntr3 + 0
- lda addressPntr2 + 1
- adc #>(COLOR_ADDRESS-SCREEN0_ADDRESS)
- sta addressPntr3 + 1
- ldy #MAP_WIDTH-1
- !:
- lda (addressPntr1),y
- // store level char for color attrib later
- pha
- sta (addressPntr2),y
- // restore level char for color attrib
- pla
- tax
- lda charAttribs,x
- sta (addressPntr3),y
- dey
- bpl !-
- end;
- end;
- // vic_set_scrolly(scrollY);
- end;
Advertisement
Add Comment
Please, Sign In to add comment