From 5d86373b9807c1a3bf09bf3a94c17b288bce7fb0 Mon Sep 17 00:00:00 2001 From: pkali Date: Sun, 24 Apr 2022 19:34:52 -0400 Subject: [PATCH] build 136 --- README.md | 28 +++++++++++++++++++++++++--- constants.asm | 5 +++-- display.asm | 2 +- grafproc.asm | 4 +++- scorch.asm | 4 ++-- scorch.xex | Bin 34101 -> 34075 bytes weapons.asm | 29 ++--------------------------- 7 files changed, 36 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index e2ae151..cbd1098 100755 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Scorch is a multi-player, turn-based, artillery video game. Tanks do turn-based battle in two-dimensional terrain, with each player adjusting the angle and power of their tank turret before each shot. -by Tomasz 'pecus' Pecko and Pawel 'pirx' Kalinowski +by Tomasz 'Pecus' Pecko and Pawel 'pirx' Kalinowski Warsaw, Miami 2000, 2001, 2002, 2003, 2009, 2012, 2013, 2022 @@ -15,7 +15,7 @@ This source code was originally compiled under [OMC65 crossassembler](https://gi Compilation: `mads scorch.asm -o:scorch.xex` -Game source code is split into 5+3 parts: +Game source code is split into 5+4 parts: - scorch.asm is the main game code (with many assorted routines) - grafproc.asm - graphics routines like line or circle - textproc.asm - text routines like list of weapons and shop @@ -24,6 +24,7 @@ Game source code is split into 5+3 parts: - display.asm - display lists and text screen definitions - ai.asm - artificial stupidity of computer opponents - weapons.asm - general arsenal of tankies +- definitions.asm - label definitions, moved to make it work better with Altirra debug. We were trying to use as much macros and pseudo-ops as possible. They are defined in atari.hea and macro.hea files together with many atari constants. This way it should be relatively easy to port this code to e.g. C64 @@ -38,6 +39,16 @@ With the advent of fujinet (https://fujinet.online/) we are thinking about makin ## Changes: +###### Build 136 +2022-04-24 +This is a very important release because we had a chance to work a bit as an original team (Pecus and pirx). Let's cheer for Pecus for joining the task force again! Changes: +- another sneaky memory corrupting bug found and fixed. The game seems to be as stable as an Ikea table! No bug number because it was super elusive. +- MIRV loops https://github.com/pkali/scorch_src/issues/6 - a very interesting one. It happened when MIRV killed tank exploded with LeapFrog or FunkyBomb. +- Nicer font https://github.com/pkali/scorch_src/issues/37 - Thank you Adam for dugging up the font you made in 2008 :) +- Explosions are 2 times faster and look equally good or maybe even a bit better. This was a drag because of the Death's Head +- Memory map reorganized to extract some free RAM. Currentish map here: https://github.com/pkali/scorch_src/wiki +- Adam shared an archive that preserved a couple of the old build comments! Added below. + ###### Build 135 2022-04-17 Happy Easter! This is a "premature ejacu.." err... "premature optimization" build. I got into an optimization fewer and got the code messed up, having to revert to the base. One important ticket closed: @@ -185,10 +196,11 @@ textproc.s65 ##### Build 113 2003-08-17 +Again you dear reader made us to do a significant improvement in Atari 8-bit Scorch. Build 113 released! There is a framework for AI ready and you can play with the most stupid opponent - the Mighty Moron!!! Give him a kick and play a little bit! - AI Opponents move barrels to the right position before firing a bullet. - Purchase screen is not displayed for AI opponents. -- There is 2 sec delay after displaying +- There is a 2 sec delay after displaying "Defensive" text i.e. text before death program.s65 @@ -236,4 +248,14 @@ variables.s65 grafproc.s65 - shorter delay during Flight +##### Build 110 +2003-07-21 +Previous release was a mistake. Build 110 is more or less playable, the "only" problem for now is such: in every round there is the same sequence of shooting (1st, 2nd, 3rd tank and so on). It should be like the weakest tank shoots first. + +##### Build 103 +2003-07-09 +For the first time Scorched Earth for Atari XL/XE (build 103) published. +Together with Pecus we were working on this piece of code for four years and it does not look like it is accelerating so we decided to publish what we have. Last few weeks I was translating source code comments and labels to English to let other people work on this project with us. In other words Scorched Earth becomes an open source project :) +Now it's your turn to help this idea happen! + ...transmission error...former history missing... \ No newline at end of file diff --git a/constants.asm b/constants.asm index 6addc74..d9afc43 100644 --- a/constants.asm +++ b/constants.asm @@ -319,7 +319,7 @@ WhereToSlideTable .BY %100 ; 00000101 .BY %100 ; 00000110 .BY %100 ; 00000111 - .BY %100 ; 00001000 + .BY %000 ; 00001000 .BY %000 ; 00001001 .BY %000 ; 00001010 .BY %000 ; 00001011 @@ -327,7 +327,7 @@ WhereToSlideTable .BY %000 ; 00001101 .BY %000 ; 00001110 .BY %000 ; 00001111 - .BY %010 ; 00010000 + .BY %000 ; 00010000 .BY %000 ; 00010001 .BY %000 ; 00010010 .BY %000 ; 00010011 @@ -633,6 +633,7 @@ TanksNamesDefault dta d"5th.Tank" dta d"6th.Tank" + WeaponPriceH ; weapons prices (tables with prices of weapons) .by >price_Baby_Missile___ .by >price_Missile________ diff --git a/display.asm b/display.asm index 6639b3b..a904e18 100755 --- a/display.asm +++ b/display.asm @@ -67,7 +67,7 @@ dl ; MAIN game display list ;Screen displays go first to avoid crossing 4kb barrier ;----------------------------------------------- OptionsScreen - dta d"Welcome to Scorch ver. 135 (un)2000-2022" + dta d"Welcome to Scorch ver. 136 (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 03b7b88..3951674 100755 --- a/grafproc.asm +++ b/grafproc.asm @@ -679,7 +679,8 @@ NoMissile ; clear sprite and put 3 lines on the tank at the same time ldy #$00 tya -ClearPM cpy temp +ClearPM + cpy temp bne ZeroesToGo lda #$03 ; (2 bits set) we set on two pixels in three lines sta (xbyte),y @@ -701,6 +702,7 @@ DoNotDrawTankNr ;-------------------------------------------------- drawmountains .proc ;-------------------------------------------------- + mwa #0 xdraw mwa #mountaintable modify diff --git a/scorch.asm b/scorch.asm index 25f36f7..88c2136 100644 --- a/scorch.asm +++ b/scorch.asm @@ -86,7 +86,7 @@ displayposition = modify ;Screen displays go first to avoid crossing 4kb barrier ;----------------------------------------------- icl 'display.asm' - ;---------------------------------------------- +;---------------------------------------------- .ALIGN $400 WeaponFont ins 'artwork/weapons_AW4.fnt' ; 'artwork/weapons.fnt' @@ -620,7 +620,7 @@ PlayerXdeath .proc ; routine lda random - and #%00011111 ; range 0-31 + and #%00011011 ; range 0-31, no Funkybomb, no leapfrog, no others as well :] jsr ExplosionDirect ; jump to after explosion routines (soil fallout, etc.) diff --git a/scorch.xex b/scorch.xex index 6754486d0dd5d570764a18e16d1e399afb6e95d8..ec31e18fecdd23b6257f38cfbcfef77695062bd4 100644 GIT binary patch delta 11638 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 Jjl>B_{|9lCl&BUT%o(L^pOaA}(Q? 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 TEFO7}9~xzOk}M