diff --git a/constants.asm b/constants.asm index 192eb5e..9fdcd72 100644 --- a/constants.asm +++ b/constants.asm @@ -688,5 +688,10 @@ gameOverSpritesTop ; end of the Gover sprites by number of players ; 1 2 3 4 5 6 .by 130,130,136,142,148,154 +;-------decimal constans +zero +digits dta d"0123456789" +nineplus dta d"9"+1 +space dta d" " .endif diff --git a/display.asm b/display.asm index 443397f..c3ecec9 100644 --- a/display.asm +++ b/display.asm @@ -1,4 +1,4 @@ -; @com.wudsn.ide.asm.mainsourcefile=scorch.asm +; @com.wudsn.ide.asm.mainsourcefile=scorch.asm .IF *>0 ;this is a trick that prevents compiling this file alone @@ -54,42 +54,42 @@ dl ; MAIN game display list .byte $10 ; 2 blank lines .byte $4f - .word display ; 1 line - :76 .by $0f ;76 - .by $0f+$80 ; DLI (black bar) ;2 - .by $0f+$80 ; DLI - :13 .by $0f ;13 - .by $0f+$80 ; DLI (black bar) ;2 - .by $0f+$80 ; DLI - :8 .by $0f ;8 - .by $4f ;1 + .word display ; 1 line + :76 .by $0f ;76 + .by $0f+$80 ; DLI (black bar) ;2 + .by $0f+$80 ; DLI + :13 .by $0f ;13 + .by $0f+$80 ; DLI (black bar) ;2 + .by $0f+$80 ; DLI + :8 .by $0f ;8 + .by $4f ;1 .wo display+$0ff0 - :2 .by $0f ;2 - .by $0f+$80 ; DLI (black bar) ;2 - .by $0f+$80 ; DLI - :9 .by $0f ;9 - .by $0f+$80 ; DLI (black bar) ;2 - .by $0f+$80 ; DLI - :8 .by $0f ;8 - .by $0f+$80 ; DLI (black bar) ;2 - .by $0f+$80 ; DLI - :7 .by $0f ;7 - .by $0f+$80 ; DLI (black bar) ;2 - .by $0f+$80 ; DLI - :6 .by $0f ;6 - .by $0f+$80 ; DLI (black bar) ;2 - .by $0f+$80 ; DLI - :5 .by $0f ;5 - .by $0f+$80 ; DLI (black bar) ;2 - .by $0f+$80 ; DLI - :4 .by $0f ;4 - .by $0f+$80 ; DLI (black bar) ;2 - .by $0f+$80 ; DLI - :3 .by $0f ;3 - .by $0f+$80 ; DLI (black to end);1 - :38 .byte $0f ;35 ..... = 200 + :2 .by $0f ;2 + .by $0f+$80 ; DLI (black bar) ;2 + .by $0f+$80 ; DLI + :9 .by $0f ;9 + .by $0f+$80 ; DLI (black bar) ;2 + .by $0f+$80 ; DLI + :8 .by $0f ;8 + .by $0f+$80 ; DLI (black bar) ;2 + .by $0f+$80 ; DLI + :7 .by $0f ;7 + .by $0f+$80 ; DLI (black bar) ;2 + .by $0f+$80 ; DLI + :6 .by $0f ;6 + .by $0f+$80 ; DLI (black bar) ;2 + .by $0f+$80 ; DLI + :5 .by $0f ;5 + .by $0f+$80 ; DLI (black bar) ;2 + .by $0f+$80 ; DLI + :4 .by $0f ;4 + .by $0f+$80 ; DLI (black bar) ;2 + .by $0f+$80 ; DLI + :3 .by $0f ;3 + .by $0f+$80 ; DLI (black to end);1 + :38 .byte $0f ;35 ..... = 200 .by $4f - .wo EmptyLine ; additional line of ground + .wo EmptyLine ; additional line of ground .byte $41 .word dl ;----------------------------------------------- @@ -125,14 +125,13 @@ MoreDown dta d" more " dta 93,93,93 dta d" " -GameOverResults ; reuse after game (remember to clear on start new) ListOfWeapons - :32 dta d" " ; WARNING! 32 offensive weapons at the moment! -ListOfWeaponsEnd - -;ListOfDefensiveWeapons -; :16 dta d" " -;ListOfDefensiveWeaponsEnd ;constant useful when clearing + :36 dta d" " +ListOfWeapons1End +GameOverResults ; reuse after game (remember to clear on start new) +ListOfDefensiveWeapons + :16 dta d" " +ListOfDefensiveWeaponsEnd ;constant useful when clearing WeaponsDescription dta d" " dta d"Tab"* @@ -151,8 +150,8 @@ EmptyLine ;----------------------------------------------- GameOverDL .byte $70,$40 - .byte $47 ; 16 gr8 lines - .word GameOverTitle + .byte $47 ; 16 gr8 lines + .word GameOverTitle .byte $4f ; 1 line .word display+(40*72) :28 .byte $0f ; 28 lines @@ -164,13 +163,13 @@ GameOverDL .byte $4f ; 1 line .word display+(40*72) :7 .byte $0f ; 7 lines - .byte $00+$80 ; 1 line - .byte $42 ; 7 tekst lines - .word GameOverTitle2 - .byte $00+$80 - .byte $42 - .word GameOverResults - :5 .byte $00+$80,$02 + .byte $00+$80 ; 1 line + .byte $42 ; 7 tekst lines + .word GameOverTitle2 + .byte $00+$80 + .byte $42 + .word GameOverResults + :5 .byte $00+$80,$02 .byte $70 .byte $41 .word GameOverDL @@ -212,4 +211,4 @@ GameOverTitle dta d" game over "* GameOverTitle2 dta d" Player Points Hits Money " -.endif +.endif \ No newline at end of file diff --git a/scorch.xex b/scorch.xex index c47ca91..10c8686 100644 Binary files a/scorch.xex and b/scorch.xex differ diff --git a/textproc.asm b/textproc.asm index a2b5e7f..d697adb 100644 --- a/textproc.asm +++ b/textproc.asm @@ -1,4 +1,4 @@ -; @com.wudsn.ide.asm.mainsourcefile=scorch.asm +; @com.wudsn.ide.asm.mainsourcefile=scorch.asm .IF *>0 @@ -479,7 +479,7 @@ NoWeapon ; if we got to the defense weapons, ; we switch address to the second table. - mwa #ListOfWeapons xbyte + mwa #ListOfDefensiveWeapons xbyte NoDefense cpx #$40 jne CreateList @@ -534,10 +534,10 @@ ClearList1 bne DoNotIncHigher1 inc xbyte+1 DoNotIncHigher1 - cpy #ListOfWeaponsEnd + cpx #>ListOfWeapons1End bne ClearList1 ; And the same we do with the second list @@ -564,10 +564,10 @@ DoNotAddX02 ; add to the address of the list clc lda xbyte - adc #ListOfWeapons + adc #>ListOfDefensiveWeapons sta xbyte+1 stx xbyte txa ; now there is zero here @@ -577,10 +577,10 @@ ClearList2 bne DoNotIncHigher2 inc xbyte+1 DoNotIncHigher2 - cpy #ListOfWeaponsEnd + cpx #>ListOfDefensiveWeaponsEnd bne ClearList2 ; here we have pretty cool lists and there is no brute force @@ -715,7 +715,7 @@ ListChange jmp ChoosingItemForPurchase DeffensiveSelected - mwa #ListOfWeapons WeaponsListDL + mwa #ListOfDefensiveWeapons WeaponsListDL lda isInventory beq @+ jsr calcPosDefensive @@ -795,27 +795,27 @@ invSelectDef lda IndexesOfWeaponsL2,y tay ldx tankNr - cmp #ind_Battery________ - bne NotBattery - ; if activate battery, we do it differently + cmp #ind_Battery________ + bne NotBattery + ; if activate battery, we do it differently mva #sfx_battery sfx_effect - mva #99 Energy,x - bne DecreaseDefensive ; bypass activation + mva #99 Energy,x + bne DecreaseDefensive ; bypass activation NotBattery - cmp #ind_White_Flag_____ - bne NotWhiteFlag - cmp ActiveDefenceWeapon,x - bne NoDeactivateWhiteFlag - mva #sfx_white_flag sfx_effect - lda #$00 ; if try to activate activated White Flag then deactivate Defence + cmp #ind_White_Flag_____ + bne NotWhiteFlag + cmp ActiveDefenceWeapon,x + bne NoDeactivateWhiteFlag + mva #sfx_white_flag sfx_effect + lda #$00 ; if try to activate activated White Flag then deactivate Defence sta ActiveDefenceWeapon,x - sta ShieldEnergy,x - beq DefActivationEnd + sta ShieldEnergy,x + beq DefActivationEnd NotWhiteFlag NoDeactivateWhiteFlag - ; activate new defensive + ; activate new defensive sta ActiveDefenceWeapon,x - ; set defensive energy + ; set defensive energy lda DefensiveEnergy,y sta ShieldEnergy,x DecreaseDefensive @@ -897,7 +897,7 @@ EraseLoop beq CharToList1 ; we are on the second list (deffensive) ; so there is no problem with scrolling - mwa #ListOfWeapons xbyte + mwa #ListOfDefensiveWeapons xbyte ldx PositionOnTheList beq SelectList2 ; if there is 0 we add nothing AddLoop2 @@ -1324,11 +1324,6 @@ displayloop1 rts .endp -;-------decimal constans -zero -digits dta d"0123456789" -nineplus dta d"9"+1 -space dta d" " ;-------------------------------------------------------- .proc Display4x4AboveTank ; @@ -1831,61 +1826,61 @@ FinishResultDisplay ;-------------------------------------------------- .proc GameOverScreen ;-------------------------------------------------- - jsr ClearScreen - jsr ClearPMmemory + jsr ClearScreen + jsr ClearPMmemory mwa #GameOverDL dlptrs - lda #%00111110 ; normal screen width, DL on, P/M on + lda #%00111110 ; normal screen width, DL on, P/M on sta dmactls - lda #%00100100 ; playfield before P/M - sta gtictls - jsr ColorsOfSprites + lda #%00100100 ; playfield before P/M + sta gtictls + jsr ColorsOfSprites mva #0 colpf1s mva #TextForegroundColor colpf2s VDLI DLIinterruptGameOver ; jsr SetDLI for Game Over screen - ; initial tank positions randomization + ; initial tank positions randomization ldx #(MaxPlayers-1) ;maxNumberOfPlayers-1 @ - jsr RandomizeTankPos + jsr RandomizeTankPos dex bpl @- -MainTanksFloatingLoop - ; main tanks floating loop +MainTanksFloatingLoop + ; main tanks floating loop ldx #(MaxPlayers-1) ;maxNumberOfPlayers-1 -AllTanksFloatingDown - stx TankNr - inc Ytankstable,x - lda Ytankstable,x -; cmp #32 ; tank over screen - not visible - cmp #80 ; tank under screen - new tank randomize - beq TankUnderScreen - cmp #72 ; tank under screen but.... parachute - bcs DrawOnlyParachute - bcc TankOnScreen +AllTanksFloatingDown + stx TankNr + inc Ytankstable,x + lda Ytankstable,x +; cmp #32 ; tank over screen - not visible + cmp #80 ; tank under screen - new tank randomize + beq TankUnderScreen + cmp #72 ; tank under screen but.... parachute + bcs DrawOnlyParachute + bcc TankOnScreen TankUnderScreen - jsr RandomizeTankPos + jsr RandomizeTankPos TankOnScreen - jsr DrawTankNr + jsr DrawTankNr DrawOnlyParachute - jsr DrawTankParachute - ldx TankNr - dex - bpl AllTanksFloatingDown - jmp MainTanksFloatingLoop ; neverending loop - rts + jsr DrawTankParachute + ldx TankNr + dex + bpl AllTanksFloatingDown + jmp MainTanksFloatingLoop ; neverending loop + rts RandomizeTankPos - randomize 8 32 - sta Ytankstable,x - randomize 0 180 - sta AngleTable,x - randomize 0 (49-8) - and #%11111110 ; correction for PMG - clc - adc XtankOffsetGO_L,x + randomize 8 32 + sta Ytankstable,x + randomize 0 180 + sta AngleTable,x + randomize 0 (49-8) + and #%11111110 ; correction for PMG + clc + adc XtankOffsetGO_L,x sta XtankstableL,x - lda XtankOffsetGO_H,x - adc #0 + lda XtankOffsetGO_H,x + adc #0 sta XtankstableH,x - rts + rts .endp ;------------------------------------------------- .proc DisplayStatus @@ -1937,17 +1932,17 @@ RandomizeTankPos ;--------------------- ;displaying name of the defence weapon (if active) ;--------------------- - lda #$08 ; ( - sta textbuffer+80+22 - lda #$09 ; ) - sta textbuffer+80+39 - lda ActiveDefenceWeapon,x - bne ActiveDefence - ; clear brackets - lda #$00 ; space - sta textbuffer+80+22 - sta textbuffer+80+39 - lda #47 ; no weapon name + lda #$08 ; ( + sta textbuffer+80+22 + lda #$09 ; ) + sta textbuffer+80+39 + lda ActiveDefenceWeapon,x + bne ActiveDefence + ; clear brackets + lda #$00 ; space + sta textbuffer+80+22 + sta textbuffer+80+39 + lda #47 ; no weapon name ActiveDefence sta temp ;get back number of the weapon mva #0 temp+1 @@ -1980,26 +1975,26 @@ ActiveDefence ;--------------------- ;displaying the energy of a tank shield (if exist) ;--------------------- - ; clear (if no shield) - lda #$00 ; space - sta textbuffer+40+10 - sta textbuffer+40+11 - sta textbuffer+40+12 - sta textbuffer+40+13 - ; check shield energy and display it - ldx TankNr - lda ActiveDefenceWeapon,x - beq NoDefenceWeapon - lda ShieldEnergy,x - beq NoShieldEnergy - sta decimal ; displayed value - lda #$08 ; ( - sta textbuffer+40+10 - mwa #textbuffer+40+11 displayposition + ; clear (if no shield) + lda #$00 ; space + sta textbuffer+40+10 + sta textbuffer+40+11 + sta textbuffer+40+12 + sta textbuffer+40+13 + ; check shield energy and display it + ldx TankNr + lda ActiveDefenceWeapon,x + beq NoDefenceWeapon + lda ShieldEnergy,x + beq NoShieldEnergy + sta decimal ; displayed value + lda #$08 ; ( + sta textbuffer+40+10 + mwa #textbuffer+40+11 displayposition jsr displaybyte - lda #$09 ; ) - sta textbuffer+40+13 -NoDefenceWeapon + lda #$09 ; ) + sta textbuffer+40+13 +NoDefenceWeapon NoShieldEnergy ;========================= @@ -2057,30 +2052,30 @@ DisplayWindValue displayAngle ldx TankNr lda AngleTable,x - cmp #90 - beq VerticallyUp - bcs AngleToLeft + cmp #90 + beq VerticallyUp + bcs AngleToLeft AngleToRight - ; now we have values from 0 to 89 and right angle + ; now we have values from 0 to 89 and right angle sta decimal lda #$7f ; (tab) character sta textbuffer+40+25 lda #0 ;space sta textbuffer+40+22 - beq AngleDisplay + beq AngleDisplay AngleToLeft - sec - lda #180 - sbc AngleTable,x - ; angles 180 - 91 converted to 0 - 89 - sta decimal + sec + lda #180 + sbc AngleTable,x + ; angles 180 - 91 converted to 0 - 89 + sta decimal lda #$7e ;(del) char sta textbuffer+40+22 lda #0 ;space sta textbuffer+40+25 - beq AngleDisplay + beq AngleDisplay VerticallyUp - ; now we have value 90 + ; now we have value 90 sta decimal lda #0 ;space sta textbuffer+40+25