From cc3bc492fc7b611160b326fdda66a83f79e4388b Mon Sep 17 00:00:00 2001 From: pkali Date: Sun, 13 Mar 2022 14:49:15 -0400 Subject: [PATCH] build 130 --- README.md | 5 +++ TODO.txt | 11 +++-- display.asm | 2 +- grafproc.asm | 10 ++--- scorch.asm | 6 ++- scorch.xex | Bin 35643 -> 35654 bytes textproc.asm | 1 - weapons.asm | 111 +++++++++++++++++++++++++++++++++------------------ 8 files changed, 95 insertions(+), 51 deletions(-) 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 de0c571844fe7e96dd658a124b969f0b163f6edd..4193d2eb9e32e70df7de5616e2b0e8a4c2865218 100644 GIT binary patch delta 3890 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 ;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