From bea5a776da9bf233eba947106213a8dd08e8e221 Mon Sep 17 00:00:00 2001 From: pkali Date: Mon, 21 Mar 2022 00:06:45 -0400 Subject: [PATCH] build 131 --- README.md | 7 ++ TODO.txt | 18 ++-- display.asm | 2 +- grafproc.asm | 81 +++++++-------- scorch.asm | 26 +++-- scorch.xex | Bin 35654 -> 35631 bytes textproc.asm | 120 +++++++++++---------- variables.asm | 281 ++++++++++++++++++++++++++++++++++++++++++++++---- weapons.asm | 160 ++++++++++++++-------------- 9 files changed, 482 insertions(+), 213 deletions(-) diff --git a/README.md b/README.md index 82cc387..b69ae15 100755 --- a/README.md +++ b/README.md @@ -40,6 +40,13 @@ with the advent of fujinet (https://fujinet.online/) we are thinking about makin ## Changes: +###### Build 131 +2022-03-20 +- fixed bug: https://github.com/pkali/scorch_src/issues/4 It was really hard one, because I had to unspaghetti our own lousy code :] +- it is now impossible to purchase non-existing weapons. +- numerous edits / optimizations during debugging process +- bug tracker moved to https://github.com/pkali/scorch_src/issues + ###### 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. diff --git a/TODO.txt b/TODO.txt index cfb6ebc..705dedd 100755 --- a/TODO.txt +++ b/TODO.txt @@ -1,5 +1,6 @@ +MOVED TO: https://github.com/pkali/scorch_src/issues + TODO and BUGS file -rev. 2013-11-17 --------------------------------------------------------- Known bugs (+ means bug is fixed) @@ -11,11 +12,13 @@ Known bugs (+ means bug is fixed) 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 I think it happens when one of the bombs goes out of the screen +023: NEW BUG. After the last change (bug 007) now the last shell of any weapon gets removed and + the game switches to Baby missile. Fixed: +001. when bullet goes straight down very fast it misses the tank it happens only when tank is standing on the bottom of - the screen (no groud below) + the screen (no ground below) +002. points after the round are not calculated correctly +003. if death's head explodes low, the lowest explosion wraps and appears on the top of the screen @@ -56,17 +59,15 @@ To do 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 -009. Make AI in the existing frame +009. Make AI in the existing framework (ongoing) 010. It is impossible to look up a number of parachutes left. -012. Decreased number of bullets should be displayed just after the shoot. -013. Check LineTable - possibly it is unnecessarily long 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. 019. Purchase impossible with joystick only. Add buy on e.g. joystick right. 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 :] +024. no visual indication of using defensive weapons Done: @@ -77,10 +78,13 @@ Done: E.g. when a given tank is shooting it's colour could be behind tank name on the text screen +005. Add number of rounds to the options menu -+008. No computer operated opponents - make a frame for AI!!! ++008. No computer operated opponents - make a framework for AI!!! +011. Colouring the top status lines in a colour of the active tank. +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) -017. Wide screen mode (with scroll?) ++012. Decreased number of bullets should be displayed just after the shoot. ++013. Check LineTable - possibly it is unnecessarily long. Checked. It is OK ++023. Make not implemented weapons raise NotImplementedError :] Done by making it impossible to purchase free weapons (price == $0) \ No newline at end of file diff --git a/display.asm b/display.asm index a192585..13d8edb 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. 130 (un)2000-2022" + dta d"Welcome to Scorch ver. 131 (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 40a2acd..875d278 100755 --- a/grafproc.asm +++ b/grafproc.asm @@ -229,6 +229,7 @@ EndOfDraw rts .endp +;-------------JumpPad------------- DrawJumpPad jmp (DrawJumpAddr) Drawplot @@ -236,10 +237,9 @@ Drawplot DrawLen inw LineLength rts +;-------------JumpPad------------- DrawCheck .proc -; lda SmokeTracerFlag -; bne yestrace ; jakie to g�upie.... lda tracerflag ora SmokeTracerFlag yestrace @@ -260,14 +260,7 @@ CheckCollisionDraw bne StopHitChecking mwa xdraw temp - ;adw temp --- it does not work!!!!!!!! and should? OMC ??? #mountaintable - clc - lda temp - adc #mountaintable - sta temp+1 + adw temp #mountaintable ldy #0 lda ydraw @@ -504,20 +497,20 @@ placetanks .proc ;-------------------------------------------------- ldx #(MaxPlayers-1) ;maxNumberOfPlayers-1 lda #0 -skip09 - ; clearing the tables with coordinates of the tank - ; it is necessary, because randomizing checks - ; if the given tank is already placed - ; after check if its position is not (0,0) - - ; I will be honest with you - I have no idea - ; what the above comment was intending to mean :) - - sta XtankstableL,x - sta XtankstableH,x - sta Ytankstable,x - dex - bpl skip09 +@ + ; clearing the tables with coordinates of the tank + ; it is necessary, because randomizing checks + ; if the given tank is already placed + ; after check if its position is not (0,0) + + ; I will be honest with you - I have no idea + ; what the above comment was intending to mean :) + + sta XtankstableL,x + sta XtankstableH,x + sta Ytankstable,x + dex + bpl @- mwa #0 temptankX @@ -635,10 +628,10 @@ drawtanknr lda eXistenZ,x bne SkipRemovigPM ; if energy=0 then no tank - ; hide P/M - lda #0 - sta hposp0,x - jmp DoNotDrawTankNr + ; hide P/M + lda #0 + sta hposp0,x + jmp DoNotDrawTankNr SkipRemovigPM @@ -964,21 +957,21 @@ ToTop ;it means substracting sbw yfloat delta lda yfloat+1 cmp #margin - bcs Skip01 - ; if smaller than 10 - ldx #$00 - stx UpNdown - jmp Skip01 + bcs @+ + ; if smaller than 10 + ldx #$00 + stx UpNdown + jmp @+ ToBottom - adw yfloat delta - lda yfloat+1 - cmp #screenheight-margin - bcc Skip01 - ; if higher than screen - ldx #$01 - stx UpNdown -Skip01 + adw yfloat delta + lda yfloat+1 + cmp #screenheight-margin + bcc @+ + ; if higher than screen + ldx #$01 + stx UpNdown +@ sta ydraw inw xdraw @@ -1096,7 +1089,9 @@ EndOfUnPlot rts .endp ; ----------------------------------------- -plot .proc ;plot (xdraw, ydraw) +plot .proc ;plot (xdraw, ydraw, color) +; color == 1 --> put pixel +; color == 0 --> erase pixel ; this is one of the most important routines in the whole ; game. If you are going to speed up the game, start with ; plot - it is used by every single effect starting from explosions @@ -1123,7 +1118,7 @@ MakePlot ;xbyte = xbyte/8 lda xbyte lsr xbyte+1 - ror ;just one bit over 256. Max screenwidht = 512!!! + ror ;just one bit over 256. Max screenwidth = 512!!! lsr lsr tay ;save diff --git a/scorch.asm b/scorch.asm index 6e067f9..5d7063f 100644 --- a/scorch.asm +++ b/scorch.asm @@ -53,7 +53,7 @@ .zpvar ytempDRAW .word ;same as above for XDRAW routine ;--------------temps used in circle routine .zpvar xi .word ;X (word) in draw routine - .zpvar fx .byte ;circle drawing variables + .zpvar fx .byte ;circle drawing variables .zpvar yi .word ;Y (word) in draw routine .zpvar fy .byte .zpvar xk .word @@ -75,7 +75,7 @@ displayposition = modify FlyDelay = 150 screenheight = 200 screenBytes = 40 -screenwidth = screenBytes*8 +screenwidth = screenBytes*8 ; Max screenwidth = 512!!! margin = 48 ;mountain drawing Y variable margin display = $1010 ;kill dos with the casette recorder! MaxPlayers = 6 @@ -272,7 +272,6 @@ loop inx cpx #(clearEnd-PreviousAngle) bne loop - .endp ldx #5 SettingEnergies @@ -318,6 +317,8 @@ SettingEnergies jsr drawmountains ;draw them jsr drawtanks ;finally draw tanks +.endp ; not really end of the procedure, but just for now. revisit. + ;--------------------round screen is ready--------- ;mva #0 TankNr @@ -408,12 +409,12 @@ AfterManualShooting jsr DecreaseWeaponBeforeShoot jsr DisplayingSymbols - ; lower energy to eventually let tanks commit suicide ldx TankNr - dec Energy,x + dec Energy,x ; lower energy to eventually let tanks commit suicide lda ActiveWeapon,x jsr Shoot + lda HitFlag ;0 if missed beq missed lda #0 @@ -428,6 +429,13 @@ AfterManualShooting AfterExplode + ldy WeaponDepleted + bne @+ + ldx TankNr + tya + sta ActiveWeapon,x +@ + ;temporary tanks removal (would fall down with soil) mva TankNr tempor2 mva #1 Erase @@ -773,10 +781,10 @@ loop05 sta TanksWeapon5,x sta TanksWeapon6,x dex - bne skip13 - lda #99 - bne loop05 -skip13 bpl loop05 + bne @+ + lda #99 + bne loop05 +@ bpl loop05 rts .endp diff --git a/scorch.xex b/scorch.xex index 4193d2eb9e32e70df7de5616e2b0e8a4c2865218..784c843af60d1c8630876d79a86aa8b5928f45bf 100644 GIT binary patch delta 10862 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 Ym^@@LLYCp)D@@a|Jm<-nFvsHm1M(O|ssI20 delta 10840 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 PM(tpR^PQ-Wt@Hj5{ZmqG diff --git a/textproc.asm b/textproc.asm index 1cfea00..5fdde65 100755 --- a/textproc.asm +++ b/textproc.asm @@ -134,14 +134,14 @@ OptionsFinished ldy OptionsTable+1 ldx #0 -skip10 - lda CashOptionL,y - sta moneyL,x - lda CashOptionH,y - sta moneyH,x - inx - cpx NumberOfPlayers - bne skip10 +@ + lda CashOptionL,y + sta moneyL,x + lda CashOptionH,y + sta moneyH,x + inx + cpx NumberOfPlayers + bne @- ;third option (gravity) ldy OptionsTable+2 @@ -234,7 +234,7 @@ OptionsYLoop ;------------------------------------------- ; call of the purchase screens for each tank -CallPurchaseForEveryTank +.proc CallPurchaseForEveryTank mva #$2 colpf2s ; set normal color mwa #PurchaseDL dlptrs lda dmactls @@ -259,9 +259,10 @@ AfterManualPurchase cmp NumberOfPlayers bne loop03 rts +.endp ;-------------------------------------------------- -Purchase ; +.proc Purchase ; ;-------------------------------------------------- ; In tanknr there is a number of the tank (player) ; that is buying weapons now (from 0). @@ -359,7 +360,7 @@ CheckWeapon01 ldy #$4 ; 4 chars from the beginning of the line sta (xbyte),y - ;now number of purchased units (bullets) + ;now number of purchased units (shells) clc lda xbyte adc #23 ; 23 chars from the beginning of the line @@ -409,24 +410,22 @@ CheckWeapon01 mva #0 temp+1 ; this number is only in X ; times 16 (it's length of the names of weapons) ldy #3 ; Rotate 4 times -Rotate02 +@ asl temp rol temp+1 dey - bpl Rotate02 - ; Hmmm..... Interesting why there is no CLC here? + bpl @- - adw temp #NamesOfWeapons modify - sbw modify #6 ; from 6th char + adw temp #NamesOfWeapons-6 modify ldy #6 ; from 6th char -modyf1 +@ lda (modify),y sta (xbyte),y iny cpy #(16+6) - bne modyf1 + bne @- ; in X there is what we need @@ -506,8 +505,8 @@ WeHaveOffset Rotate04 lsr xbyte+1 bcc DoNotAddX01 - clc - adc #40 + clc + adc #40 DoNotAddX01 ror ror xbyte @@ -668,20 +667,23 @@ ListChange sta WhichList bne SecondSelected mwa #ListOfWeapons WeaponsListDL - jmp dalejx01 + jmp @+ SecondSelected mwa #ListOfDefensiveWeapons WeaponsListDL -dalejx01 +@ lda #$00 sta PositionOnTheList sta OffsetDL1 jmp ChoosingItemForPurchase +.endp ; weapon purchase routne increases number of possessed bullets ; decreases cash and jumps to screen refresh ;-------------------------------------------------- -PurchaseWeaponNow +.proc PurchaseWeaponNow ;-------------------------------------------------- +isPriceZero = tempXRoller + lda WhichList bne PurchaseDeffensive @@ -696,6 +698,7 @@ PurchaseAll ; after getting weapon number the routine is common for all ldx tanknr tay ; weapon number is in Y + beq @+ sec lda moneyL,x ; substracting from posessed money sbc WeaponPriceL,y ; of price of the given weapon @@ -703,25 +706,20 @@ PurchaseAll lda moneyH,x sbc WeaponPriceH,y sta moneyH,x - ; now we have get address of + + ; save info about price == 0 + lda WeaponPriceL,y + ora WeaponPriceH,y + sta isPriceZero + + + ; now we have to get address of ; the table of the weapon of the tank - ; and add appropriate number of bullets - stx temp ;we will multiply by 64 - mva #0 temp+1 - ; times 64 - ; (because it is the lenght of one record in weapon table) - ldx #5 ; Rotate 6 times - ; (in Y there is a weapon number, we do not touch it!!!) -Rotate03 - asl temp - rol temp+1 - dex - bpl Rotate03 - lda #TanksWeapon1 - adc temp+1 + lda TanksWeaponsTableH,x sta temp+1 lda (temp),y ; and we have number of posessed bullets of the weapon @@ -729,15 +727,24 @@ Rotate03 sta (temp),y ; and we added appropriate number of bullets cmp #100 ; but there should be no more than 99 bullets bcc LessThan100 - lda #99 - sta (temp),y + lda #99 + sta (temp),y LessThan100 sty LastWeapon ; store last purchased weapon ; because we must put screen pointer next to it - jmp AfterPurchase + ; additional check for unfinished game + ; if weapon was free (price == $0) + ; then have nothing... + lda isPriceZero + bne @+ + lda #0 + sta (temp),y +@ + jmp Purchase.AfterPurchase +.endp -PutLitteChar +.proc PutLitteChar ; first let's cleat both lists from little chars mwa #ListOfWeapons xbyte ldx #52 ; there are 52 lines total @@ -846,9 +853,9 @@ NoArrowDown stx MoreDowndl sty MoreDowndl+1 rts - +.endp ; ----------------------------------------------------- -EnterPlayerName +.proc EnterPlayerName ; in: TankNr ; Out: TanksNames, SkillTable @@ -1008,11 +1015,10 @@ nextchar05 cpy #$08 bne nextchar05 rts +.endp - - -SelectLevel +.proc SelectLevel ; this routine highlights the choosen ; level of the computer opponent ldx #$9 ; 9 possible levels @@ -1042,8 +1048,10 @@ CheckNextLevel dex bpl CheckNextLevel01 rts +.endp + ;-------------------------------------------------- -displaydec ;decimal (word), displayposition (word) +.proc displaydec ;decimal (word), displayposition (word) ;-------------------------------------------------- ; displays decimal number as in parameters (in text mode) ; leading zeores are removed @@ -1104,10 +1112,10 @@ displayloop bpl displayloop rts - +.endp ;-------------------------------------------------- -displaybyte ;decimal (byte), displayposition (word) +.proc displaybyte ;decimal (byte), displayposition (word) ;-------------------------------------------------- ; displays decimal number as in parameters (in text mode) ; leading zeores are removed @@ -1153,6 +1161,7 @@ displayloop1 bpl displayloop1 rts +.endp ;-------decimal constans zero digits dta d"0123456789" @@ -1160,7 +1169,7 @@ nineplus dta d"9"+1 space dta d" " ;-------------------------------------------------------- -DisplayOffensiveTextNr ; +.proc DisplayOffensiveTextNr ; ;This routine displays texts using PutChar4x4 ;pretty cool, eh ;parameters are: @@ -1306,9 +1315,9 @@ DOTNcharloop bne DOTNcharloop rts - +.endp ;------------------------------- -TypeLine4x4 ; +.proc TypeLine4x4 ; ;------------------------------- ;this routine prints line ending with $ff ;address in LineAddress4x4 @@ -1337,6 +1346,7 @@ TypeLine4x4Loop EndOfTypeLine4x4 rts +.endp ;-------------------------------- .proc DisplayResults ; diff --git a/variables.asm b/variables.asm index 8e7d350..1961d77 100755 --- a/variables.asm +++ b/variables.asm @@ -68,10 +68,11 @@ NewAngle ActiveWeapon ;number of the selected weapon :MaxPlayers .by 0 +WeaponDepleted .by 0 ; if 0 deactivate the weapon and switch to Baby Missile ;----------------------------------- -;format of the static point number used in the game -; 20203.5 = 128 : <20203 : >20203 +;format of the 3-byte static point number used in the game +; 20203.5 => 128 : <20203 : >20203 ;----------------------------------- L1 .by 0 ; variable used in multiplications (by 10:) @@ -772,20 +773,204 @@ TanksNamesDefault dta d"5th Tank" dta d"6th Tank" +;Weapon prices (*10 on screen) +price_Baby_Missile___ = 0 ;_0 +price_Missile________ = 96 ;_1 +price_Baby_Nuke______ = 111 ;_2 +price_Nuke___________ = 144 ;_3 +price_LeapFrog_______ = 192 ;_4 +price_Funky_Bomb_____ = 293 ;_5 +price_MIRV___________ = 456 ;_6 +price_Death_s_Head___ = 337 ;_7 +price_Napalm_________ = 0 ;496 ;_8 +price_Hot_Napalm_____ = 0 ;511 ;_9 +price_Tracer_________ = 102 ;_10 +price_Smoke_Tracer___ = 291 ;_11 +price_Baby_Roller____ = 689 ;_12 +price_Roller_________ = 600 ;_13 +price_Heavy_Roller___ = 592 ;_14 +price_Riot_Charge____ = 0 ;330 ;_15 +price_Riot_Blast_____ = 0 ;341 ;_16 +price_Riot_Bomb______ = 369 ;_17 +price_Heavy_Riot_Bomb = 322 ;_18 +price_Baby_Digger____ = 336 ;_19 +price_Digger_________ = 276 ;_20 +price_Heavy_Digger___ = 253 ;_21 +price_Baby_Sandhog___ = 218 ;_22 +price_Sandhog________ = 191 ;_23 +price_Heavy_Sandhog__ = 305 ;_24 +price_Dirt_Clod______ = 104 ;_25 +price_Dirt_Ball______ = 130 ;_26 +price_Ton_of_Dirt____ = 171 ;_27 +price_Liquid_Dirt____ = 0 ;530 ;_28 +price_Dirt_Charge____ = 581 ;_29 +price_Earth_Disrupter = 0 ;430 ;_30 +price_Plasma_Blast___ = 0 ;274 ;_31 +price_Laser__________ = 577 ;_32 +price______________33 = 0 +price______________34 = 0 +price______________35 = 0 +price______________36 = 0 +price______________37 = 0 +price______________38 = 0 +price______________39 = 0 +price______________40 = 0 +price______________41 = 0 +price______________42 = 0 +price______________43 = 0 +price______________44 = 0 +price______________45 = 0 +price______________46 = 0 +price______________47 = 0 +price_Heat_Guidance__ = 0 ;_48_($30) +price_Bal_Guidance___ = 0 ;_49 +price_Horz_Guidance__ = 0 ;_50 +price_Vert_Guidance__ = 0 ;_51 +price_Lazy_Boy_______ = 0 ;_52 +price_Parachute______ = 1100 ;_53 +price_Battery________ = 0 ;_54 +price_Mag_Deflector__ = 0 ;_55 +price_Shield_________ = 0 ;_56 +price_Force_Shield___ = 0 ;_57 +price_Heavy_Shield___ = 0 ;_58 +price_Super_Mag______ = 0 ;_59 +price_Auto_Defense___ = 0 ;_60 +price_Fuel_Tank______ = 0 ;_61 +price_Contact_Trigger = 0 ;_62 +price______________63 = 0 + WeaponPriceH ; weapons prices (tables with prices of weapons) - .byte $00,$00,$00,$00,$00,$01,$01,$01 - .byte $01,$01,$00,$01,$02,$02,$02,$01 - .byte $01,$01,$01,$01,$01,$00,$00,$00 - .byte $01,$00,$00,$00,$02,$02,$01,$01 - .byte $02,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - .byte 0,0,0,0,0,$04,0,0,0,0,0,0,0,0,0,0 + .by >price_Baby_Missile___ + .by >price_Missile________ + .by >price_Baby_Nuke______ + .by >price_Nuke___________ + .by >price_LeapFrog_______ + .by >price_Funky_Bomb_____ + .by >price_MIRV___________ + .by >price_Death_s_Head___ + .by >price_Napalm_________ + .by >price_Hot_Napalm_____ + .by >price_Tracer_________ + .by >price_Smoke_Tracer___ + .by >price_Baby_Roller____ + .by >price_Roller_________ + .by >price_Heavy_Roller___ + .by >price_Riot_Charge____ + .by >price_Riot_Blast_____ + .by >price_Riot_Bomb______ + .by >price_Heavy_Riot_Bomb + .by >price_Baby_Digger____ + .by >price_Digger_________ + .by >price_Heavy_Digger___ + .by >price_Baby_Sandhog___ + .by >price_Sandhog________ + .by >price_Heavy_Sandhog__ + .by >price_Dirt_Clod______ + .by >price_Dirt_Ball______ + .by >price_Ton_of_Dirt____ + .by >price_Liquid_Dirt____ + .by >price_Dirt_Charge____ + .by >price_Earth_Disrupter + .by >price_Plasma_Blast___ + .by >price_Laser__________ + .by >price______________33 + .by >price______________34 + .by >price______________35 + .by >price______________36 + .by >price______________37 + .by >price______________38 + .by >price______________39 + .by >price______________40 + .by >price______________41 + .by >price______________42 + .by >price______________43 + .by >price______________44 + .by >price______________45 + .by >price______________46 + .by >price______________47 + .by >price_Heat_Guidance__ + .by >price_Bal_Guidance___ + .by >price_Horz_Guidance__ + .by >price_Vert_Guidance__ + .by >price_Lazy_Boy_______ + .by >price_Parachute______ + .by >price_Battery________ + .by >price_Mag_Deflector__ + .by >price_Shield_________ + .by >price_Force_Shield___ + .by >price_Heavy_Shield___ + .by >price_Super_Mag______ + .by >price_Auto_Defense___ + .by >price_Fuel_Tank______ + .by >price_Contact_Trigger + .by >price______________63 + WeaponPriceL - .byte $00,$60,$6F,$90,$c0,$25,$c8,$51 - .byte $f0,$ff,$66,$23,$b1,$58,$50,$4A - .byte $55,$71,$42,$50,$14,$fd,$da,$bf - .byte $31,$68,$82,$ab,$12,$45,$ae,$12 - .byte $41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - .byte 0,0,0,0,0,$4c,0,0,0,0,0,0,0,0,0,0 + .by