broken inventory rollback

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