diff --git a/Atari/textproc.asm b/Atari/textproc.asm index c4b4d0c..db2261d 100644 --- a/Atari/textproc.asm +++ b/Atari/textproc.asm @@ -204,66 +204,6 @@ invertme rts .endp -; -------------------------------------- -; Sets the appropriate variables based on the options table -; -.proc SetVariablesFromOptions - ;first option - ldy OptionsTable - iny - iny - sty NumberOfPlayers ;1=1 player (but minimum is 2) - - ;second option (cash) - - - ldy OptionsTable+1 - ldx #0 -@ - lda CashOptionL,y - sta moneyL,x - lda CashOptionH,y - sta moneyH,x - inx - cpx NumberOfPlayers - bne @- - - ;third option (gravity) - ldy OptionsTable+2 - lda GravityTable,y - sta gravity - - ;fourth option (wind) - ldy OptionsTable+3 - lda MaxWindTable,y - sta MaxWind - - ;fifth option (no of rounds) - ldy OptionsTable+4 - lda RoundsTable,y - sta RoundsInTheGame - - ;6th option (shell speed) - ldy OptionsTable+5 - lda flyDelayTable,y - sta flyDelay - - ;7th option (Airstrike after how many missess) - ldy OptionsTable+6 - lda seppukuTable,y - sta seppukuVal - - ;8th option (how aggressive are mountains) - ldy OptionsTable+7 - lda mountainsDeltaTableH,y - sta mountainDeltaH - lda mountainsDeltaTableL,y - sta mountainDeltaL - - - rts -.endp - ;------------------------------------------- ; call of the purchase (and activate) screens for each tank .proc CallPurchaseForEveryTank @@ -1603,173 +1543,6 @@ displayloop1 rts .endp -;-------------------------------- -.proc DisplayResults ; -;displays results of the round -;using 4x4 font - jsr RoundOverSprites - - - mva #$ff plot4x4color - - ;centering the result screen - mva #((ScreenHeight/2)-(8*4)) ResultY - - - ;upper frame - mva ResultY LineYdraw - jsr TL4x4_top - - adb ResultY #4 ;next line - - ;Header1 - ;Displays round number - lda CurrentRoundNr - cmp RoundsInTheGame - beq GameOver4x4 - - sta decimal - mwa #RoundNrDisplay displayposition - jsr displaybyte ;decimal (byte), displayposition (word) - - mwa #LineHeader1 LineAddress4x4 - mwa #((ScreenWidth/2)-(8*4)) LineXdraw - mva ResultY LineYdraw - jsr TypeLine4x4 - beq @+ ;unconditional jump, because TypeLine4x4 ends with beq - -GameOver4x4 - RmtSong song_round_over - mwa #LineGameOver LineAddress4x4 - mwa #((ScreenWidth/2)-(8*4)) LineXdraw - mva ResultY LineYdraw - jsr TypeLine4x4 - mva #1 GameIsOver - -@ - adb ResultY #4 ;next line - - ;Empty line - mva ResultY LineYdraw - jsr TL4x4_empty - - adb ResultY #2 ;next line - - - ;Header2 - mwa #LineHeader2 LineAddress4x4 - mwa #((ScreenWidth/2)-(8*4)) LineXdraw - mva ResultY LineYdraw - jsr TypeLine4x4 - - adb ResultY #4 ;next line - - ;Empty line - mva ResultY LineYdraw - jsr TL4x4_empty - - sbb ResultY #2 ;next line (was empty) - - ldx NumberOfPlayers ;we start from the highest (best) tank - dex ;and it is the last one - stx ResultOfTankNr ;in TankSequence table - - mwa #TanksNames tempXROLLER - -ResultOfTheNextPlayer - ldx ResultOfTankNr ;we are after a round, so we can use TankNr - lda TankSequence,x ;and we keep here real number if the tank - sta TankNr ;for which we are displaying results - - - - - adb ResultY #4 ;next line - - ;there are at least 2 players, so we can safely - ;start displaying the result - - lda #3 ;it means | - sta ResultLineBuffer - - ldy TankNr - lda ResultsTable,y - sta decimal - mva #0 decimal+1 - mwa #(ResultLineBuffer+8) displayposition - jsr displaydec5 ;decimal (byte), displayposition (word) - - ; overwrite the second digit of the points (max 255) - ;it means ":" - mva #26 ResultLineBuffer+9 - - ldx #0 - lda TankNr - asl - asl ; times 8, because it is lengtgh - asl ; of the names of the tanks - tay - -TankNameCopyLoop - lda (tempXROLLER),y ;XROLLER is not working now - and #$3f ;always CAPITAL letters - inx - sta ResultLineBuffer,x - iny - cpx #8 ; end of name - bne TankNameCopyLoop - ; last letter of tank name overwrites first digit of the points (max 255) - - - ;just after the digits - ;it means | - mva #$3 ResultLineBuffer+13 - - ;result line display - mwa #ResultLineBuffer LineAddress4x4 - mwa #((ScreenWidth/2)-(8*4)) LineXdraw - mva ResultY LineYdraw - jsr TypeLine4x4 - - adb ResultY #4 ;next line - - ;Empty line - mva ResultY LineYdraw - jsr TL4x4_empty - - dec ResultOfTankNr - bmi FinishResultDisplay - - sbb ResultY #2 ;distance between lines is smaller - - jmp ResultOfTheNextPlayer - -FinishResultDisplay - mva ResultY LineYdraw - ;jmp TL4x4_bottom ; just go -.endp - -.proc TL4x4_bottom - ;bottom of the frame - mwa #LineBottom LineAddress4x4 - mwa #((ScreenWidth/2)-(8*4)) LineXdraw - jmp TypeLine4x4 ; jsr:rts -.endp - -.proc TL4x4_top - ;bottom of the frame - mwa #LineTop LineAddress4x4 - mwa #((ScreenWidth/2)-(8*4)) LineXdraw - jmp TypeLine4x4 ; jsr:rts -.endp - -.proc TL4x4_empty - ;empty frame - mwa #LineEmpty LineAddress4x4 - mwa #((ScreenWidth/2)-(8*4)) LineXdraw - jmp TypeLine4x4 ; jsr:rts -.endp - ;-------------------------------------------------- .proc GameOverScreen ;-------------------------------------------------- diff --git a/Manuals/MANUAL_EN.md b/Manuals/MANUAL_EN.md index 402d22a..2a5d50a 100644 --- a/Manuals/MANUAL_EN.md +++ b/Manuals/MANUAL_EN.md @@ -9,7 +9,12 @@ On the first screen, you can configure gameplay options: * number of players (2 - 6) includes both human and computer-controlled players * the initial amount of cash of each player (2K is the optimal value we chose, but for short games, it is worth choosing a higher value) * gravity -* maximum wind strength (wind is drawn at the beginning of each round or during the round between turns, here we can choose how strong it can be) +* maximum wind strength (wind is drawn at the beginning of each round or during the round between turns, here we can choose how strong it can be): + * 1B - maximum wind strength: 5 + * 3B - maximum wind strength: 20 + * 5B - maximum wind strength: 40 + * 7B - maximum wind strength: 70 + * 9B - maximum wind strength: 99 * number of rounds in a game * missile speed (does not affect the flight path - only changes the apparent missile speed - does not change anything in the gameplay itself) * frequency of suicides :) - if for a number of turns the game has not recorded hits (tanks are constantly shooting inaccurately), after one of such misses a tank commits suicide - here you determine how long they can "shooting for the stars" :) - if only people play the optimal setting is "norm", in the case of computer-controlled players ... you choose. diff --git a/Manuals/MANUAL_PL.md b/Manuals/MANUAL_PL.md index 4f541c7..4b5bce4 100644 --- a/Manuals/MANUAL_PL.md +++ b/Manuals/MANUAL_PL.md @@ -9,7 +9,12 @@ Na pierwszym ekranie możemy skonfigurować opcje rozgrywki: * ilość graczy (2 - 6) obejmuje tak ludzi jak graczy sterowanych przez komputer * początkową ilość gotówki każdego z graczy (8k to wybrana przez nas wartość optymalna, lecz przy krótkich rozgrywkach warto wybrać większą wartość) * grawitacja -* maksymalna siła wiatru (wiatr jest losowany na początku każdej z rund lub w czasie rundy pomiędzy turami, tu możemy wybrać jak silny może być) +* maksymalna siła wiatru (wiatr jest losowany na początku każdej z rund lub w czasie rundy pomiędzy turami, tu możemy wybrać jak silny może być): + * 1B - maksymalna siła wiatru: 5 + * 3B - maksymalna siła wiatru: 20 + * 5B - maksymalna siła wiatru: 40 + * 7B - maksymalna siła wiatru: 70 + * 9B - maksymalna siła wiatru: 99 * liczba rozgrywanych rund * szybkość lotu pocisków (nie ma wpływu na tor lotu - zmienia jedynie widoczną prędkość rysowania - nie zmienia nic w samej rozgrywce) * częstotliwość samobójstw :) - jeśli przez ileś tur gra nie odnotowała trafień (czołgi ciągle strzelają niecelnie) jeden z takich pudłujących czołgów popełnia samobójstwo - tu określamy jak długo mogą “strzelać w próżnię” :) - jeśli grają tylko ludzie optymalne ustawienie to “norm”, w przypadku graczy sterowanych przez komputer… wedle uznania. diff --git a/game.asm b/game.asm index 5c887bc..a48d2a2 100644 --- a/game.asm +++ b/game.asm @@ -1158,5 +1158,229 @@ SetRandomWalls sta WallsType rts .endp +; -------------------------------------- +; Sets the appropriate variables based on the options table +; +.proc SetVariablesFromOptions + ;first option + ldy OptionsTable + iny + iny + sty NumberOfPlayers ;1=1 player (but minimum is 2) + + ;second option (cash) + + ldy OptionsTable+1 + ldx #0 +@ + lda CashOptionL,y + sta moneyL,x + lda CashOptionH,y + sta moneyH,x + inx + cpx NumberOfPlayers + bne @- + + ;third option (gravity) + ldy OptionsTable+2 + lda GravityTable,y + sta gravity + + ;fourth option (wind) + ldy OptionsTable+3 + lda MaxWindTable,y + sta MaxWind + + ;fifth option (no of rounds) + ldy OptionsTable+4 + lda RoundsTable,y + sta RoundsInTheGame + + ;6th option (shell speed) + ldy OptionsTable+5 + lda flyDelayTable,y + sta flyDelay + + ;7th option (Airstrike after how many missess) + ldy OptionsTable+6 + lda seppukuTable,y + sta seppukuVal + + ;8th option (how aggressive are mountains) + ldy OptionsTable+7 + lda mountainsDeltaTableH,y + sta mountainDeltaH + lda mountainsDeltaTableL,y + sta mountainDeltaL + + rts +.endp + +;-------------------------------- +.proc DisplayResults ; +;displays results of the round +;using 4x4 font + jsr RoundOverSprites + + + mva #$ff plot4x4color + + ;centering the result screen + mva #((ScreenHeight/2)-(8*4)) ResultY + + + ;upper frame + mva ResultY LineYdraw + jsr TL4x4_top + + adb ResultY #4 ;next line + + ;Header1 + ;Displays round number + lda CurrentRoundNr + cmp RoundsInTheGame + beq GameOver4x4 + + sta decimal + mwa #RoundNrDisplay displayposition + jsr displaybyte ;decimal (byte), displayposition (word) + + mwa #LineHeader1 LineAddress4x4 + mwa #((ScreenWidth/2)-(8*4)) LineXdraw + mva ResultY LineYdraw + jsr TypeLine4x4 + beq @+ ;unconditional jump, because TypeLine4x4 ends with beq + +GameOver4x4 + RmtSong song_round_over + mwa #LineGameOver LineAddress4x4 + mwa #((ScreenWidth/2)-(8*4)) LineXdraw + mva ResultY LineYdraw + jsr TypeLine4x4 + mva #1 GameIsOver + +@ + adb ResultY #4 ;next line + + ;Empty line + mva ResultY LineYdraw + jsr TL4x4_empty + + adb ResultY #2 ;next line + + + ;Header2 + mwa #LineHeader2 LineAddress4x4 + mwa #((ScreenWidth/2)-(8*4)) LineXdraw + mva ResultY LineYdraw + jsr TypeLine4x4 + + adb ResultY #4 ;next line + + ;Empty line + mva ResultY LineYdraw + jsr TL4x4_empty + + sbb ResultY #2 ;next line (was empty) + + ldx NumberOfPlayers ;we start from the highest (best) tank + dex ;and it is the last one + stx ResultOfTankNr ;in TankSequence table + + mwa #TanksNames tempXROLLER + +ResultOfTheNextPlayer + ldx ResultOfTankNr ;we are after a round, so we can use TankNr + lda TankSequence,x ;and we keep here real number if the tank + sta TankNr ;for which we are displaying results + + + + + adb ResultY #4 ;next line + + ;there are at least 2 players, so we can safely + ;start displaying the result + + lda #3 ;it means | + sta ResultLineBuffer + + ldy TankNr + lda ResultsTable,y + sta decimal + mva #0 decimal+1 + mwa #(ResultLineBuffer+8) displayposition + jsr displaydec5 ;decimal (byte), displayposition (word) + + ; overwrite the second digit of the points (max 255) + ;it means ":" + mva #26 ResultLineBuffer+9 + + ldx #0 + lda TankNr + asl + asl ; times 8, because it is lengtgh + asl ; of the names of the tanks + tay + +TankNameCopyLoop + lda (tempXROLLER),y ;XROLLER is not working now + and #$3f ;always CAPITAL letters + inx + sta ResultLineBuffer,x + iny + cpx #8 ; end of name + bne TankNameCopyLoop + ; last letter of tank name overwrites first digit of the points (max 255) + + + ;just after the digits + ;it means | + mva #$3 ResultLineBuffer+13 + + ;result line display + mwa #ResultLineBuffer LineAddress4x4 + mwa #((ScreenWidth/2)-(8*4)) LineXdraw + mva ResultY LineYdraw + jsr TypeLine4x4 + + adb ResultY #4 ;next line + + ;Empty line + mva ResultY LineYdraw + jsr TL4x4_empty + + dec ResultOfTankNr + bmi FinishResultDisplay + + sbb ResultY #2 ;distance between lines is smaller + + jmp ResultOfTheNextPlayer + +FinishResultDisplay + mva ResultY LineYdraw + ;jmp TL4x4_bottom ; just go +.endp + +.proc TL4x4_bottom + ;bottom of the frame + mwa #LineBottom LineAddress4x4 + mwa #((ScreenWidth/2)-(8*4)) LineXdraw + jmp TypeLine4x4 ; jsr:rts +.endp + +.proc TL4x4_top + ;bottom of the frame + mwa #LineTop LineAddress4x4 + mwa #((ScreenWidth/2)-(8*4)) LineXdraw + jmp TypeLine4x4 ; jsr:rts +.endp + +.proc TL4x4_empty + ;empty frame + mwa #LineEmpty LineAddress4x4 + mwa #((ScreenWidth/2)-(8*4)) LineXdraw + jmp TypeLine4x4 ; jsr:rts +.endp .ENDIF \ No newline at end of file diff --git a/scorch.asm b/scorch.asm index 84c2c09..fc56e0e 100644 --- a/scorch.asm +++ b/scorch.asm @@ -21,7 +21,7 @@ ;--------------------------------------------------- .macro build - dta d"1.28" ; number of this build (4 bytes) + dta d"1.30" ; number of this build (4 bytes) .endm .macro RMTSong diff --git a/scorch.bin b/scorch.bin index a07c19d..6c33f79 100644 Binary files a/scorch.bin and b/scorch.bin differ diff --git a/scorch.xex b/scorch.xex index f0647ec..74c2556 100644 Binary files a/scorch.xex and b/scorch.xex differ