diff --git a/.gitattributes b/.gitattributes old mode 100644 new mode 100755 diff --git a/LICENSE b/LICENSE old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 index 51bb77b..3342a3b --- a/README.md +++ b/README.md @@ -37,6 +37,12 @@ we decided it must go in 'English' to let other people work on it ## Changes: +###### Build 127 +2022-02-14 +- option to select number of rounds in a game +- rudimentary game over message (in results screen) +- game restarts + ###### Build 126 2022-01-30 - fixed bug 006 (After some attacks the OffensiveText stays on the screen) diff --git a/TODO.txt b/TODO.txt old mode 100644 new mode 100755 index 21c133b..a623349 --- a/TODO.txt +++ b/TODO.txt @@ -44,11 +44,11 @@ To do +003. Add colour of the given tank to the screen E.g. when a given tank is shooting it's colour could be behind tank name on the text screen -004. The game has no end!!! Add ending!!! +*004. The game has no end!!! Add ending!!! A good idea for an ending - a TIP pic - Red Army taking Berlin :) Another - vector tanks like in BattleZone Another - stickman tankmen -005. Add number of rounds to the options menu ++005. Add number of rounds to the options menu 006. Add sound effects (maybe sampled? or mp0 (sound based on fft)) 007. There is no defensive weapon handling (only parachute works, but also provisionally @@ -61,7 +61,7 @@ To do +014. Demo mode - when all tanks are CPUs let them play non-stop! (replace waiting for a key-press after a round with a small delay) +015. Switch to mads for easier development (mads speeds it up, no doubt) -016. Speed up death's head (e.g.: draw each second circle) ++016. Speed up death's head (e.g.: draw each second circle) -017. Wide screen mode (with scroll?) 018. Speed up soil down after soil eating weapons - correctly calculate ranges as now range is very broad even when very little soil is eaten. diff --git a/ai.asm b/ai.asm old mode 100644 new mode 100755 diff --git a/artwork/TALK1.txt b/artwork/TALK1.txt old mode 100644 new mode 100755 diff --git a/artwork/TALK2.txt b/artwork/TALK2.txt old mode 100644 new mode 100755 diff --git a/artwork/font4x4s.bmp b/artwork/font4x4s.bmp old mode 100644 new mode 100755 diff --git a/artwork/talk.asm b/artwork/talk.asm old mode 100644 new mode 100755 diff --git a/artwork/tanks.fnt b/artwork/tanks.fnt old mode 100644 new mode 100755 diff --git a/artwork/textconv.py b/artwork/textconv.py old mode 100644 new mode 100755 diff --git a/artwork/weapons.fnt b/artwork/weapons.fnt old mode 100644 new mode 100755 diff --git a/display.asm b/display.asm old mode 100644 new mode 100755 index f98cabc..47f8b77 --- a/display.asm +++ b/display.asm @@ -29,7 +29,7 @@ OptionsDL :5 .byte $70 .byte $42 .word OptionsScreen - .byte $02,$02,$70,$02,0,$02,0,$2,0,$2 + .byte $30,$02,$02,$70,$02,0,$02,0,$2,0,$2,0,$2 .byte $41 .word OptionsDL ;------------------------ @@ -77,7 +77,7 @@ PlotLine = display + screenHeight*screenBytes ; the last line is plot pointer ;Screen displays go first to avoid crossing 4kb barrier ;----------------------------------------------- OptionsScreen - dta d"Welcome to Scorch ver. 126 (un)2000-2022" + dta d"Welcome to Scorch ver. 127 (un)2000-2022" dta d" Please select option with cursor keys " dta d" and press (Return) to proceed " OptionsHere @@ -86,6 +86,7 @@ OptionsHere dta d"Cash : none 2K 5K 8K 10K " dta d"Gravity : 0.2G 0.5G 1G 2G 4G " dta d"Wind : 1B 3B 5B 7B 9B " + dta d"Rounds : 10 20 30 40 50 " OptionsScreenEnd ; ------------------------------------------------- NameScreen diff --git a/grafproc.asm b/grafproc.asm old mode 100644 new mode 100755 diff --git a/lib/atari.hea b/lib/atari.hea old mode 100644 new mode 100755 diff --git a/scorch.asm b/scorch.asm index 50ddebd..10aa046 100644 --- a/scorch.asm +++ b/scorch.asm @@ -149,7 +149,7 @@ MainGameLoop jsr GetRandomWind jsr Round - + jsr SortSequence ; Hide all (easier than hide last ;) ) tanks @@ -168,11 +168,11 @@ MainGameLoop ; add gains and substract looses ; gain is what player gets for lost energy of opponents ; energy lost by opponents is added during Round and - ; little below in source multiplied by 2 to get "dollars". - ; By analogy, loose is energy that given player looses during + ; little below in source, multiplied by 2 to get "dollars". + ; By analogy, loss is energy that given player looses during ; each Round. ; Important! If player has 10 energy and gets central hit - ; from nuke that would take 90 energy point his loose + ; from nuke that would take 90 energy points his loss ; is 90, not 10 jsr DisplayResults @@ -246,6 +246,8 @@ skipzeroing dex bpl CalculateGains + lda GameIsOver + jne START inc CurrentRoundNr @@ -787,6 +789,7 @@ Initialize .proc sta tracerflag sta oldPlotPointerX sta oldPlotPointerX+1 + sta GameIsOver mva #$2 colpf2s mva #12 colpf3s diff --git a/scorch.xex b/scorch.xex index 674d106..537034a 100644 Binary files a/scorch.xex and b/scorch.xex differ diff --git a/textproc.asm b/textproc.asm old mode 100644 new mode 100755 index 9a9ed3d..7ae99a3 --- a/textproc.asm +++ b/textproc.asm @@ -1,4 +1,4 @@ -; @com.wudsn.ide.asm.mainsourcefile=program.asm +; @com.wudsn.ide.asm.mainsourcefile=scorch.asm .IF *>0 @@ -69,7 +69,7 @@ Options .proc ; this function returns: ; - number of players (NumberOfPlayers) ; - money each player has on the beginning of the game (moneyL i moneyH) -; - and I am sure maxwind, gravity, ???? +; - and I am sure maxwind, gravity, no_of_rounds in a game mva #0 OptionsY @@ -82,7 +82,7 @@ OptionsMainLoop inc:lda OptionsY cmp #maxoptions bne OptionsMainLoop - mva #3 OptionsY + mva #maxoptions-1 OptionsY jmp OptionsMainLoop OptionsNoDown @@ -153,9 +153,15 @@ skip10 ldy OptionsTable+3 lda MaxWindTable,y sta MaxWind + + ;fifth option (no of rounds) + ldy OptionsTable+4 + lda RoundsTable,y + sta RoundsInTheGame + rts ;-------- -; inversing choosed option (cursor) +; inversing selected option (cursor) ;-------- OptionsInversion mwa #OptionsHere temp @@ -191,7 +197,7 @@ OptionSetLoop ; next option adw temp #40 ;jump to next line inc:lda temp2 - cmp #4 ;number of options + cmp #maxoptions ;number of options bne OptionsSetMainLoop ;inversing the first few chars of the selected line (OptionsY) @@ -1349,6 +1355,9 @@ DisplayResults ; ;Header1 ;Displays round number lda CurrentRoundNr + cmp RoundsInTheGame + beq GameOver4x4 + sta decimal mwa #RoundNrDisplay displayposition jsr displaybyte ;decimal (byte), displayposition (word) @@ -1358,7 +1367,17 @@ DisplayResults ; mva ResultY LineYdraw mva #1 plot4x4color jsr TypeLine4x4 + beq @+ ;unconditional jump, because TypeLine4x4 ends with beq +GameOver4x4 + mwa #LineGameOver LineAddress4x4 + mwa ResultX LineXdraw + mva ResultY LineYdraw + mva #1 plot4x4color + jsr TypeLine4x4 + mva #1 GameIsOver + +@ adw ResultY #4 ;next line ;Empty line diff --git a/variables.asm b/variables.asm old mode 100644 new mode 100755 index 060db1f..3731b9b --- a/variables.asm +++ b/variables.asm @@ -8,6 +8,7 @@ ;===================================================== NumberOfPlayers .byte 0 ;current number of players (counted from 1) TankSequence :MaxPlayers .by 0 ;sequence of shooting during the Round +GameIsOver .byte 0 ; 1 - it was the last round in the game ;----------------------------------- skilltable ; computer controlled players' skills (1-8), 0 - human :MaxPlayers .by 0 @@ -257,15 +258,17 @@ OffsetDL1 ; offset of the list screen (how many lines).... ; ------------------------------------------------- ;Options -OptionsTable .byte 0,0,2,2 +OptionsTable .byte 0,0,2,2,0 OptionsY .byte 0 ;vertical position of cursor on Options screen -maxoptions = 4 ;number of all options (4 in 0.01) +maxoptions = 5 ;number of all options (4 in 0.01) CashOptionH ;(one zero less than on the screen) .byte 0,>200,>500,>800,>1000 CashOptionL .byte 0,<200,<500,<800,<1000 GravityTable .byte 10,20,25,30,40 MaxWindTable .byte 5,20,40,60,80 +RoundsTable .byte 10,20,30,40,50 +RoundsInTheGame .byte 10 ;how many rounds in the current game ;------------------------------------------------ ;mark the level @@ -354,6 +357,8 @@ TextNumberOff .byte 0 TankTempY .byte 0 ;---------------------------------------------- +; 4x4 texts +;---------------------------------------------- LineAddress4x4 .word 0 LineCharNr @@ -380,7 +385,9 @@ RoundNrDisplay LineHeader2 dta d"# RESULTS #" .byte $ff - +LineGameOver + dta d"# GAME OVER #" + .byte $ff ;----------- @@ -803,7 +810,7 @@ WeaponSymbols .byte $02,$03,$06,$1d,$0a,$1b,$1c,$1e .byte $3b,$3c,$3d,$3e,$3f,$5e,$5f,$00 -; Names of weapons (16 chars lon) +; Names of weapons (16 chars long) NamesOfWeapons ;the comment is an index in the tables dta d"Baby Missile " ; 0 dta d"Missile " ; 1 diff --git a/weapons.asm b/weapons.asm old mode 100644 new mode 100755