diff --git a/README.md b/README.md index 8381b31..82cc387 100755 --- a/README.md +++ b/README.md @@ -40,6 +40,11 @@ with the advent of fujinet (https://fujinet.online/) we are thinking about makin ## Changes: +###### Build 130 +2022-03-13 +- fixed bug: Decreasing of number of bullets after a shoot does not work correctly. It does look like it is fixed, although all I did was moving decreasing before shooting. Displaying number of bullets immediately after shoot. +- fixed a very difficult bug - game was crashing from time to time, with corrupted code and/or screen. It was digger digging lower and lower, finally digging through the code. Right now the game is not crashing on me. + ###### Build 129 2022-03-06 - added tune by emkay, lzss player by dmsc diff --git a/TODO.txt b/TODO.txt index be01cde..cfb6ebc 100755 --- a/TODO.txt +++ b/TODO.txt @@ -8,11 +8,9 @@ Known bugs (+ means bug is fixed) (and uses one parachute more than necessary) 005. tank stands still on a one pixel spike - it should fall (possibly all that is necessary is adjust of WhereToSlideTable) -007. Decreasing of number of bullets after a shoot does not work correctly - (e.g. 2 bullets are deducted instead of 1) 017: Observed MIRV loops - it shoots and shoots MIRV all over the screen. Very rare. 020: sometimes leftmost or rightmost remains of the funkybomb smoke do not get cleared -022: shooting funkybomb decreases number of bombs too much! (2 instead of 1?) + I think it happens when one of the bombs goes out of the screen Fixed: +001. when bullet goes straight down very fast it misses the tank @@ -42,7 +40,11 @@ Fixed: +019: AI menu does not recognize keyboard up (prints "-" in tank name) +021: check MWA, ADW, SBW macros - bad modifications of bytes found!!! +009. When result in points is >99 then only 2 first digits are displayed - +-022: shooting funkybomb decreases number of bombs too much! (2 instead of 1?) ++007. Decreasing of number of bullets after a shoot does not work correctly + (e.g. 2 bullets are deducted instead of 1) FUNKYBOMB!!! + it looks like it is fixed, although what I did was moving decreasing before jsr shoot ++000, Game crashes from time to time, code and/or screen gets corrupted --------------------------------------------------------- @@ -64,6 +66,7 @@ To do 020. Not a bug per se, but ydraw variable is word, possibly it can be switched to byte 021. Add player colors to purchase screen 022. Make colors more contrasting +023. Make not implemented weapons raise NotImplementedError :] Done: diff --git a/display.asm b/display.asm index 1fd966e..a192585 100755 --- a/display.asm +++ b/display.asm @@ -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. 129 (un)2000-2022" + dta d"Welcome to Scorch ver. 130 (un)2000-2022" dta d" Please select option with cursor keys " dta d" and press (Return) to proceed " OptionsHere diff --git a/grafproc.asm b/grafproc.asm index 115a4fd..40a2acd 100755 --- a/grafproc.asm +++ b/grafproc.asm @@ -1289,17 +1289,17 @@ CopyMask and #$7 sta ybit - lsrw xbyte + lsrw xbyte ; div 8 rorw xbyte rorw xbyte ;--- ldy xbyte - ldx ydraw - .rept 7 - dex - .endr + lda ydraw ; y = y - 7 because left lower. shouldn't it be 8? + sec + sbc #7 + tax lda linetableL,x sta xbyte diff --git a/scorch.asm b/scorch.asm index 5c2b211..6e067f9 100644 --- a/scorch.asm +++ b/scorch.asm @@ -405,6 +405,9 @@ ManualShooting jsr BeforeFire AfterManualShooting + jsr DecreaseWeaponBeforeShoot + jsr DisplayingSymbols + ; lower energy to eventually let tanks commit suicide ldx TankNr dec Energy,x @@ -454,7 +457,6 @@ missed mva #0 plot4x4color jsr DisplayOffensiveTextNr - jsr DecreaseWeaponAfterShoot ; or before??? NextPlayerShoots mva #1 Erase jsr drawtanks @@ -523,7 +525,7 @@ PlayersAgain .proc ; additionally this tank just have had LASTeXistenZ set to 0, ; otherwise it would explode again and again. ; OK, text how to do it is ready, now comes coding . -; Aaaah! - in main loop we have to set eXistenZ and LASTeXistenZ +; Aaaah! - in the main loop we have to set eXistenZ and LASTeXistenZ ldx NumberOfPlayers dex diff --git a/scorch.xex b/scorch.xex index de0c571..4193d2e 100644 Binary files a/scorch.xex and b/scorch.xex differ diff --git a/textproc.asm b/textproc.asm index e2e1462..1cfea00 100755 --- a/textproc.asm +++ b/textproc.asm @@ -149,7 +149,6 @@ skip10 sta gravity ;fourth option (wind) - ldy OptionsTable+3 lda MaxWindTable,y sta MaxWind diff --git a/weapons.asm b/weapons.asm index 609e32f..d24ee4c 100755 --- a/weapons.asm +++ b/weapons.asm @@ -3,31 +3,35 @@ .IF *>0 ;this is a trick that prevents compiling this file alone ; ------------------------ -babymissile +.proc babymissile inc FallDown2 mva #11 ExplosionRadius jsr CalculateExplosionRange jmp xmissile +.endp ; ------------------------ -missile ; +.proc missile ; inc FallDown2 mva #17 ExplosionRadius jsr CalculateExplosionRange jmp xmissile +.endp ; ------------------------ -babynuke +.proc babynuke inc FallDown2 mva #25 ExplosionRadius jsr CalculateExplosionRange jmp xmissile +.endp ; ------------------------ -nuke +.proc nuke inc FallDown2 mva #31 ExplosionRadius jsr CalculateExplosionRange jmp xmissile +.endp ; ------------------------ -leapfrog +.proc leapfrog inc FallDown2 mva #17 ExplosionRadius jsr CalculateExplosionRange @@ -98,12 +102,14 @@ leapfrog jmp xmissile EndOfLeapping rts +.endp ; ------------------------ -mirv ; the whole mirv is performed by Flight routine +.proc mirv ; the whole mirv is performed by Flight routine inc FallDown2 rts +.endp ; ------------------------ -funkybomb ; +.proc funkybomb ; mwa xtraj+1 xtrajfb mwa ytraj+1 ytrajfb inc FallDown2 @@ -162,8 +168,9 @@ NoExplosionInFunkyBomb bne FunkyBombLoop mva #0 tracerflag rts +.endp ; ------------------------ -deathshead +.proc deathshead inc FallDown2 mva #31 ExplosionRadius jsr CalculateExplosionRange @@ -189,59 +196,69 @@ NoUpperCircle jsr xmissile NoLowerCircle rts +.endp ; ------------------------ -tracer +.proc tracer rts +.endp ; ------------------------ -babyroller +.proc babyroller inc FallDown2 mva #11 ExplosionRadius jmp xroller +.endp ; ------------------------ -roller ; +.proc roller ; inc FallDown2 mva #21 ExplosionRadius jmp xroller +.endp ; ------------------------ -heavyroller +.proc heavyroller inc FallDown2 mva #31 ExplosionRadius jmp xroller +.endp ; ------------------------ -riotbomb +.proc riotbomb inc FallDown2 mva #17 ExplosionRadius jsr CalculateExplosionRange jmp xriotbomb +.endp ; ------------------------ -heavyriotbomb +.proc heavyriotbomb inc FallDown2 mva #29 ExplosionRadius jsr CalculateExplosionRange jmp xriotbomb +.endp ; ------------------------ -babydigger +.proc babydigger mva #0 sandhogflag inc FallDown2 mva #13 DigLong mva #1 diggery ; how many branches (-1) jmp xdigger +.endp ; ------------------------ -digger ; +.proc digger ; mva #0 sandhogflag inc FallDown2 mva #13 DigLong mva #3 diggery ; how many branches (-1) jmp xdigger +.endp ; ------------------------ -heavydigger +.proc heavydigger mva #0 sandhogflag inc FallDown2 mva #13 DigLong mva #7 diggery ; how many branches (-1) jmp xdigger +.endp ; ------------------------ -xdigger +.proc xdigger mwa xdraw digstartx mwa ydraw digstarty ldx diggery @@ -294,7 +311,7 @@ DigRandomize lda random and #$87 bmi DigUp -digwdol +DigDown and #$07 clc adc digtabyL,x @@ -302,7 +319,14 @@ digwdol lda digtabyH,x adc #$00 sta digtabyH,x - jmp DigCalculateNext + ;crashing bug here - if too much added to digtaby, it gets over screenheight and starts writing over random areas + ;WARNING! fix for 1 byte screenheight. TODO + lda digtabyL,x + cmp #screenheight + bcc @+ ; branch if less + lda #screenheight-1 + sta digtabyL,x +@ jmp DigCalculateNext DigUp and #$07 sta temp @@ -334,6 +358,7 @@ DigDrawing bpl DigDrawing dec:lda DigLong jpl BranchNotFinished +DoNotPutDig rts DiggerCharacter lda random @@ -345,55 +370,61 @@ DiggerCharacter cpw xdraw #(screenwidth-6) bcs DoNotPutDig jmp TypeChar -DoNotPutDig - rts +.endp ; ------------------------ -babysandhog +.proc babysandhog mva #8 sandhogflag inc FallDown2 mva #13 DigLong mva #1 diggery ; how many branches (-1) jmp xdigger +.endp ; ------------------------ -sandhog +.proc sandhog mva #8 sandhogflag inc FallDown2 mva #13 DigLong mva #3 diggery ; how many branches (-1) jmp xdigger +.endp ; ------------------------ -heavysandhog +.proc heavysandhog mva #8 sandhogflag inc FallDown2 mva #13 DigLong mva #5 diggery ; how many branches (-1) jmp xdigger +.endp ; ------------------------ -dirtclod +.proc dirtclod inc FallDown2 mva #12 ExplosionRadius jsr CalculateExplosionRange jmp xdirt +.endp ; ------------------------ -dirtball +.proc dirtball inc FallDown2 mva #22 ExplosionRadius jsr CalculateExplosionRange jmp xdirt +.endp ; ------------------------ -tonofdirt +.proc tonofdirt inc FallDown2 mva #31 ExplosionRadius jsr CalculateExplosionRange jmp xdirt +.endp ; ------------------------ -dirtcharge +.proc dirtcharge inc FallDown2 mva #61 ExplosionRadius jsr CalculateExplosionRange jmp ofdirt +.endp ; ------------------------ -laser +.proc laser ldx TankNr lda AngleTable,x tay @@ -447,9 +478,9 @@ laser jsr DecreaseEnergyX LaserMisses rts - +.endp ; ----------------- -xmissile ; +.proc xmissile ; ; ----------------- lda #1 sta radius @@ -533,8 +564,9 @@ EndOfDistanceCheckLoop txa bne DistanceCheckLoop rts +.endp ; ----------------- -xdirt ; +.proc xdirt ; ; ----------------- lda #1 sta radius @@ -549,8 +581,9 @@ dirtLoop cmp ExplosionRadius bne dirtLoop rts +.endp ; ----------------- -xriotbomb ; +.proc xriotbomb ; ; ----------------- lda #0 sta radius @@ -563,10 +596,10 @@ rbombLoop bne rbombLoop mva #1 color rts - +.endp ; ---------------- -xroller ; +.proc xroller ; ; now collisions are detected with modified draw routine ; therefore YDRAW value must be taken from mountaintable ldy #0 @@ -696,8 +729,9 @@ ExplodeNow jsr CalculateExplosionRange jmp xmissile rts +.endp ; -------------------------------------------------- -ofdirt ; +.proc ofdirt ; ; -------------------------------------------------- ; makes dirt on xdraw,ydraw position and of ExplosionRadius height mwa xdraw xcircle @@ -742,6 +776,7 @@ EndOfTheDirt mwa xcircle xdraw mva ycircle ydraw rts +.endp ;-------------------------------------------------- BeforeFire .proc ;TankNr (byte) ;-------------------------------------------------- @@ -2108,7 +2143,7 @@ RangesChecked .endp ;-------------------------------------------------- -DecreaseWeaponAfterShoot .proc +DecreaseWeaponBeforeShoot .proc ;-------------------------------------------------- ldx TankNr lda ActiveWeapon,x