Luotu main workloadit joita käyttää raskaisiin koko ruudun alustusoperaatioihin. Poistaa rasteriajan ylimenot tekstin ja kuvien välissä siirtymisessä.

This commit is contained in:
gimulnautti 2023-02-19 19:08:57 +02:00
parent dd9e93958d
commit fde541ab41
2 changed files with 108 additions and 47 deletions

View File

@ -40,7 +40,7 @@ remove_unused_symbols = 1
ignore_initial_jump = 0
current_file = piraatti_intro.ras
output_type = prg
exomizer_toggle = 1
exomizer_toggle = 0
use_track_19 = 1
disable_compiler_comments = 0
charset_ = :resources/character.rom

View File

@ -235,7 +235,7 @@ text : string = (@cmoveto, 6,10,
"ARI-PEKKA PULKKIS - VAASA", @cpause, @cstop );
naamatNumbers : string = ( "123", "456", "789", " 10", "20 ", " 30",
" 40", "50 ", " 60", " 70", " 80", " 90", @cstop);
" 40", "50 ", " 60", " 70", " 80", " 90", @cstop);
tab320 : array[25] of integer = buildtable("i*320");
@ -338,6 +338,16 @@ text : string = (@cmoveto, 6,10,
tempPtr1, tempPtr2 : pointer;
tempInt : integer;
/*
Workloads for main loop
*/
@define notWorking 0
@define mainText 1
@define mainPicture 2
mainWorkState : byte = 0;
//===========================================================================================================
// Raster interrupt forward declarations
//===========================================================================================================
@ -377,6 +387,23 @@ begin
RasterIrq(RasterMainPartScroller(), rasterLineMainScroller, @useKernal);
end;
//===========================================================================================================
// Main Work state functions
//===========================================================================================================
function isMainWorking() : boolean;
var result : boolean;
begin
if (mainWorkState = @notWorking) then result := false
else result := true;
isMainWorking := result;
end;
procedure startMainWork(s : byte);
begin
mainWorkState := s;
end;
/**
* Assembly setup for a character set copy in RAM
*/
@ -1063,6 +1090,7 @@ begin
begin
purpleBounceOfs := 0;
spriteBounceOfs := 0;
spriteWobbleOfs := 245;
end;
if (part = @partMain) then
begin
@ -1122,53 +1150,19 @@ begin
if (mainState = @mainShowText) then
begin
//tempPtr1 := #screen_char_loc2 + 840;
Fill(^$4740, 0, 80);
//tempPtr1 := #screen_col_loc + 800;
FillFast(^$DB20, 0, 80);
WriteMainText();
if (tp[0] = @cstop) then tp := #mainText; // back to first page when done
//tempPtr2 := #screen_col_loc + 960; // keep color for scroll text
fillfast(^$DBC0, $a, 40);
startMainWork(@mainText);
end;
if (mainState = @mainPicture) then
begin
setmulticolormode();
setbitmapmode();
//tempPtr1 := AddressTable(#colorAddressTable, 0, 21);
FillFast(^$4748, 0, 120);
//tempPtr2 := #screen_col_loc + 960; // keep color for scroll text
fillfast(^$DBC0, $a, 40);
// set current picture
currentNaamaX := naamatCoordinates[currentNaama * 4];
currentNaamaY := naamatCoordinates[currentNaama * 4 + 1];
currentNaamaWidth := naamatCoordinates[currentNaama * 4 + 2];
currentNaamaHeight := naamatCoordinates[currentNaama * 4 + 3];
// todo write these in main loop instead of raster interrupt
PrintCharToSprite(numbersPtr[0], @mainPartSmallFontLoc, @numberSpriteCopies);
PrintCharToSprite(numbersPtr[1], @mainPartSmallFontLoc, @numberSpriteCopies + 64);
PrintCharToSprite(numbersPtr[2], @mainPartSmallFontLoc, @numberSpriteCopies + 128);
numbersPtr += 3;
if (numbersPtr[0] = @cstop) then numbersPtr := #naamatNumbers;
// print the name
WriteMainName();
if (namesPtr[0] = @cstop) then namesPtr := #naamatNames;
plasmaHeight := 2;
startMainWork(@mainPicture);
end;
end;
procedure UpdateMainPart();
begin
if (mainState = @mainShowText) then
if (mainState = @mainShowText and not isMainWorking()) then
begin
textPlStartX := 0;
i := lo(textFade);
@ -1181,6 +1175,7 @@ begin
if (mod(textFade, 10) = 0) then inc(plasmaHeight);
if (plasmaHeight > 9) then plasmaHeight := 9;
end;
if (mainState = @mainFadeToPicture and textFade < 210) then
begin
i := lo(textFade);
@ -1200,7 +1195,18 @@ begin
inc(textFade);
end;
if (mainState = @mainPicture) then
if (isMainWorking()) then
begin
sprite_color[0]:=0;
sprite_color[1]:=0;
sprite_color[2]:=0;
sprite_color[3]:=0;
sprite_color[4]:=0;
sprite_color[5]:=0;
end
else
begin
// copy picture one row at a time
if (pictureFade < currentNaamaHeight) then
@ -1245,6 +1251,7 @@ begin
memcpyfast(#textFadeLumi, 0, tempPtr1, 20);
end;
end;
if (mainState = @mainFadeToText) then
begin
// blank out picture one row at a time
@ -1270,9 +1277,9 @@ begin
sprite_color[0]:=0;
sprite_color[1]:=0;
sprite_color[2]:=0;
sprite_color[3]:=$0;
sprite_color[4]:=$0;
sprite_color[5]:=$0;
sprite_color[3]:=0;
sprite_color[4]:=0;
sprite_color[5]:=0;
end;
if (mainTime > 50 and nameFade < 150) then
@ -1315,6 +1322,7 @@ var lastSpriteWoblOfs : byte;
wobblePause : boolean = false;
wobblePauseTimer : integer = 0;
cEqualsChangeFlag : boolean = false;
fillPart : byte = 0;
begin
if (part >= @partOpenBar) then Call(SIDFILE_1_PLAY);
@ -1359,16 +1367,25 @@ begin
if (fadeStateCurrent = @fadeStateText) then
begin
fadeTemp := textFadeLumi[fadeOfsCurrent];
Fill(screen_col_loc, fadeTemp, 255);
FillFast(screen_col_loc + 256, fadeTemp, 127);
Fill(screen_col_loc + 511, fadeTemp, 255);
Fill(screen_col_loc + 766, fadeTemp, 234);
if (fillPart = 0) then
begin
Fill(screen_col_loc, fadeTemp, 255);
FillFast(screen_col_loc + 256, fadeTemp, 127);
fadeOfsCurrent -= 1;
end;
if (fillPart = 1) then
begin
Fill(screen_col_loc + 511, fadeTemp, 255);
Fill(screen_col_loc + 766, fadeTemp, 234);
end;
GoToPurpleBarRasterStart();
if (fadeOfsCurrent >= @textFadeLumiLast) then
begin
fadeStateCurrent := @fadeStateAll;
fadeOfsCurrent := 0;
end;
inc(fillPart);
if (fillPart = 2) then fillPart := 0;
end;
if (fadeStateCurrent = @fadeStateAll) then
begin
@ -1522,6 +1539,50 @@ begin
while (true) do
begin
// Main loop "work tasks" here
if (mainWorkState = @mainText) then
begin
//tempPtr1 := #screen_char_loc2 + 840;
Fill(^$4740, 0, 80);
//tempPtr1 := #screen_col_loc + 800;
FillFast(^$DB20, 0, 80);
WriteMainText();
if (tp[0] = @cstop) then tp := #mainText; // back to first page when done
//tempPtr2 := #screen_col_loc + 960; // keep color for scroll text
fillfast(^$DBC0, $a, 40);
mainWorkState := @notWorking;
end;
if (mainWorkState = @mainPicture) then
begin
//tempPtr1 := AddressTable(#colorAddressTable, 0, 21);
FillFast(^$4748, 0, 120);
//tempPtr2 := #screen_col_loc + 960; // keep color for scroll text
fillfast(^$DBC0, $a, 40);
// set current picture
currentNaamaX := naamatCoordinates[currentNaama * 4];
currentNaamaY := naamatCoordinates[currentNaama * 4 + 1];
currentNaamaWidth := naamatCoordinates[currentNaama * 4 + 2];
currentNaamaHeight := naamatCoordinates[currentNaama * 4 + 3];
PrintCharToSprite(numbersPtr[0], @mainPartSmallFontLoc, @numberSpriteCopies);
PrintCharToSprite(numbersPtr[1], @mainPartSmallFontLoc, @numberSpriteCopies + 64);
PrintCharToSprite(numbersPtr[2], @mainPartSmallFontLoc, @numberSpriteCopies + 128);
numbersPtr += 3;
if (numbersPtr[0] = @cstop) then numbersPtr := #naamatNumbers;
// print the name
WriteMainName();
if (namesPtr[0] = @cstop) then namesPtr := #naamatNames;
plasmaHeight := 2;
mainWorkState := @notWorking;
end;
end;
end.