From 31646c65d3d8e2377ac4f7515989468ffa26fd47 Mon Sep 17 00:00:00 2001 From: Pecusx Date: Mon, 15 May 2023 15:13:36 +0200 Subject: [PATCH] Manuals and code cleanup --- Atari/textproc.asm | 227 ------------------------------------------- Manuals/MANUAL_EN.md | 7 +- Manuals/MANUAL_PL.md | 7 +- game.asm | 224 ++++++++++++++++++++++++++++++++++++++++++ scorch.asm | 2 +- scorch.bin | Bin 32768 -> 32768 bytes scorch.xex | Bin 56625 -> 56625 bytes 7 files changed, 237 insertions(+), 230 deletions(-) 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 a07c19d2f634b3e1bd6b08027274eb667b4b4964..6c33f79787b5610723549ed89d1376d7c4137729 100644 GIT binary patch delta 4070 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 NN3f&2Z|_j>{{p0n>{I{% diff --git a/scorch.xex b/scorch.xex index f0647ec34b8156da2d1b10ca87d43e6fb141dbeb..74c25563b12c9e873246230a1f3e0b2005c4c90d 100644 GIT binary patch delta 2809 zcmZWrdr*_v6;HkZ(Gc=|3RI%bdO>{f5UK92xT{-h>(obFMMDxd8iE7^qC$At6(K&j zz`6v`+bssAhCni0HP#q)CeaMEqn6m!##U*otKC_s%Cu9n?damRm7XtQ-I?xR_dM?X zopaAUkL&h{+& z)}TfCL{prd_czP$Ra9lUr=lS|PRDT<6(Fj#?Y8GpG1@vp8H?~PQYq0F8z=(`l&wR< zxgba#%6^JY7DcE>sA(g*o{RQwM4o&Qk%z_eV`1~MO=zW(=ed%r3{{fbC3~4`O7fGP zEzC_7xwkWmktsdVrR#*uCtA;@UAq}ZrzF4HbDEfH*XxkVQX%!uQCTXbdURzM_;#QE z7`q*A{72NZ+2KwqiNbCd}aZQO{<E>*k!jU2G@1G&2O0WZ|R=z)F@e8eGv5Zc`T_BRP_>4cE#b@cV2pmc(riZYBCg38w zp!F2jYU9wA0&;!-tlf4)Lq94kK%W^Pvf!N<934`~lzeOyRRs{!@DdJ}ER+ynL+=EV zLDpOdk>!`*HJ6>^;%@YFZ=AJp%?{`Mi`-b8^ zMXMo@6_nBpXm8zJ$621w42tOryp1Op067pL7Xmqsbs`Xxngi+bB5l`l*8kcYcSp{s z@Ms5^^LP(PgwrCa20oQq2AR{4X_gxdx?4oFfSsgnaX{eO}1F!^!@E z2-TE~a*dIE66)=9A70XiqHl6z*@^xK+H*ZzS6lMa&nE?iH(Pr+g=7cRqDb*#2ibk- z?JUU-XXz^+3y^7|E*}fp$0LrBz~o>QxG@6k4Pdz_Iw{PMJBQ-mlk9Me{upO;GY3$6OhA90nY`lR11;%3ye090*4mcb0v_)&+9&zbRoLWTtRief&h+P6YcJQ# zePI*W1>Ronb3rg}ASyKZ)^jZ>XqfZXgnGo)%YlgZ$I{E$gs}5ybu%}nhY23Pu63vDW~({DCOBtK@Jrd#jp3TFX-wtc;ACSK-^D*|oRJ7M zF2L3B90k(8VANF~JLm-m{?nK)hRmPs0(wDH7C)!9HEoK0OBuWX+fVW1%h$AE(rQ(g zo%O%3BF~!U%n(CU+6ql61WhR$SJ?!PihwQ{t;{TxWdM|P1dhuaB=?<=u?oI;f@ETOLQNl zGq4=_XhYhTVwioPeezlh7u&=4wJN@^J$T*M2yjycIWj0>_NqyI ztB<*)CckUV6ARSX;Ez$0jJ5&pAbcJ$b(W$PCYul)RC@m1R>?5+YEpj8#Lws9W7SNV z+VcU~7yZN6bC~u;rX1?14Uf;N&5+!Ij9?55$Dwd)4#5jj5pJh2wZpUgGJk?3T9>AM zi_-c3D6daMcJH-T$4k}N=WqtJ?a}mN&R?CU{ZcgU1Rw^ zL*KJ3WL(`Wlr}$(Q%<&tCnoddo+Uy)6wi8V_{HeZEP9%+Slb+k3udE#mc#Y%9)G zr_9+boJp0SrsM0=q?R-(1W<9YiPz&!G*#IX-zQ|??)7v!SxDDM$p11QD@omHEx6^m zf7-+V>sjxD_X9V7{mWto{sx)n=fm&IqdH$KU6g55_nMY&(1f-t%qRPB z#oD!NvFUi4xX&9_tkHzl^j3Ib;F!G7=coAQODDi^g;%a2t9-wCjUIpH(Ufl(GWO{* U*;t-!5oDt+@=BhSx1O>81F>_%R{#J2 delta 2843 zcmZWreNao zbI(2ZoO92)9>2=tSDoBwWJV-;HyJ-wO={+;!tsu6vc|$acl_3-P+XRtJI46l(%VV_ z`j#s2YE+g-R+nW7sn%$L3f4G*4&os?gzZ#;?(&Y#j#X5R*7j4zs{9f)^XUF^%76fs ztVIv=0GMziYXGGi!_*zrv;tjRiMFjk^YZ~Bx63BSf%0pm=v`jsx$^VOU7lPk-^M)W z$*(swGYWxR-;l{H;JuNirAp?r9527|cMP+SCl@vyRiOnu$rjU?TREgiOb0E}CN7FP z%NOYSR+2knM&v#o?c=>{J654gz0?!NDe5Qz=lEg-a(QS-OM9Q?QCM&yliI3Ki?X?b&I9|l4HVsE>oaT zGZ=+t9MWyd5BOQU7VtjQogZ=>ZObR?YsbCq&!+=eqziE+9f!A2E#6Aoa22f8y5~Hy z=F=TkUQ0(>S83rc9UL999^o98P*_M$?HKi49?pSG{JnPE%#2*?Of4Oa?EodS_*fv3 z#mDKKusQTm3EhE>bR;hBP_!K8S{xi&Qb1Lv*)UVlad^Yh92@|-H6C1>p(^x)n&f%n%2`~l zz}11V00$lm_&7wxkxV1@7k@sHdfe`NSC991iJtcG zX^+fkylgbE+u(q`;Ay2p6(vrpv~bVlGWi&{J1ff#B(r`pV=N@A>)&P|)F0OWGU8&P z+d&T3r;sQ0V=`V87EI{N5;Houtmv*D-)2rXbv>-DoXgam4H!vNudl19AxG14_Pre@gPf9Q#~0@bXYkd-g-+o_4V6ow6fV zIXYa0aJ0#KnK=qYXuZUsA|qM4^A#o|mz3|Evb44YO3}}D`=B&;rUrV$R8uOtSNy{Z z?wEA@QO;oG74B))s6ayQiB8VmnmTYVT2fwV>Ev`aBfL(P4i}R4Sb}KRo>iaHAjCOTcmwG&;mM`;*F57{qOAXMgs?m|-ycA%Gk}N#$V(Z1%F? zTu>!NQiZ)&whQ(SxEmNr<2(>dZu<}Vt{6Z<8s1{g3FOZWQ{7WHe@_@S%3+a$jjNk8~(bm`4UQ z?9s+h+pBJzAlKTV#!T6%&l|^#f;OkXRZwRBt4z|57*Jae1Qzv zw!}Tx+j<%J|F~c1N$r7JtzFn-lwv(b>pX6*Qy|d?-;0-_0*?_`SV`f*WVOe*cxbL& zASVtQUP}(u5{vqPtsL)Wmqq!?T^_`AXjz)Znx=sO>P|Pwa(ndy zj;4@lbXl1Ep1Hu2+M{d0E$>%HMFv>!GB@N8-2CK^Wej|!ezBqn-Xa$Poan9a<}201jh