diff --git a/constants.asm b/constants.asm index 88d91f0..e39389b 100644 --- a/constants.asm +++ b/constants.asm @@ -210,270 +210,16 @@ disktance ;tanks distance ; this table is for deciding where a tank should slide ; accordingly to what is below the tank -; there are 3 bits used here -; bit 0 - go down -; bit 1 - go left -; bit 2 - go right -; position in the table equals to bit pattern of soil below tank - -WhereToSlideTable - ; we have 3 bits, when set: 2 - go left, 1 - go right, 0 - go down - .BY %001 ; 00000000 - .BY %101 ; 00000001 - .BY %100 ; 00000010 - .BY %100 ; 00000011 - .BY %100 ; 00000100 - .BY %100 ; 00000101 - .BY %100 ; 00000110 - .BY %100 ; 00000111 - .BY %000 ; 00001000 - .BY %000 ; 00001001 - .BY %000 ; 00001010 - .BY %000 ; 00001011 - .BY %100 ; 00001100 - .BY %000 ; 00001101 - .BY %000 ; 00001110 - .BY %000 ; 00001111 - .BY %000 ; 00010000 - .BY %000 ; 00010001 - .BY %000 ; 00010010 - .BY %000 ; 00010011 - .BY %000 ; 00010100 - .BY %000 ; 00010101 - .BY %000 ; 00010110 - .BY %000 ; 00010111 - .BY %000 ; 00011000 - .BY %000 ; 00011001 - .BY %000 ; 00011010 - .BY %000 ; 00011011 - .BY %000 ; 00011100 - .BY %000 ; 00011101 - .BY %000 ; 00011110 - .BY %000 ; 00011111 - .BY %010 ; 00100000 - .BY %000 ; 00100001 - .BY %000 ; 00100010 - .BY %000 ; 00100011 - .BY %000 ; 00100100 - .BY %000 ; 00100101 - .BY %000 ; 00100110 - .BY %000 ; 00100111 - .BY %000 ; 00101000 - .BY %000 ; 00101001 - .BY %000 ; 00101010 - .BY %000 ; 00101011 - .BY %000 ; 00101100 - .BY %000 ; 00101101 - .BY %000 ; 00101110 - .BY %000 ; 00101111 - .BY %010 ; 00110000 - .BY %000 ; 00110001 - .BY %000 ; 00110010 - .BY %000 ; 00110011 - .BY %000 ; 00110100 - .BY %000 ; 00110101 - .BY %000 ; 00110110 - .BY %000 ; 00110111 - .BY %000 ; 00111000 - .BY %000 ; 00111001 - .BY %000 ; 00111010 - .BY %000 ; 00111011 - .BY %000 ; 00111100 - .BY %000 ; 00111101 - .BY %000 ; 00111110 - .BY %000 ; 00111111 - .BY %010 ; 01000000 - .BY %000 ; 01000001 - .BY %000 ; 01000010 - .BY %000 ; 01000011 - .BY %000 ; 01000100 - .BY %000 ; 01000101 - .BY %000 ; 01000110 - .BY %000 ; 01000111 - .BY %000 ; 01001000 - .BY %000 ; 01001001 - .BY %000 ; 01001010 - .BY %000 ; 01001011 - .BY %000 ; 01001100 - .BY %000 ; 01001101 - .BY %000 ; 01001110 - .BY %000 ; 01001111 - .BY %000 ; 01010000 - .BY %000 ; 01010001 - .BY %000 ; 01010010 - .BY %000 ; 01010011 - .BY %000 ; 01010100 - .BY %000 ; 01010101 - .BY %000 ; 01010110 - .BY %000 ; 01010111 - .BY %000 ; 01011000 - .BY %000 ; 01011001 - .BY %000 ; 01011010 - .BY %000 ; 01011011 - .BY %000 ; 01011100 - .BY %000 ; 01011101 - .BY %000 ; 01011110 - .BY %000 ; 01011111 - .BY %010 ; 01100000 - .BY %000 ; 01100001 - .BY %000 ; 01100010 - .BY %000 ; 01100011 - .BY %000 ; 01100100 - .BY %000 ; 01100101 - .BY %000 ; 01100110 - .BY %000 ; 01100111 - .BY %000 ; 01101000 - .BY %000 ; 01101001 - .BY %000 ; 01101010 - .BY %000 ; 01101011 - .BY %000 ; 01101100 - .BY %000 ; 01101101 - .BY %000 ; 01101110 - .BY %000 ; 01101111 - .BY %000 ; 01110000 - .BY %000 ; 01110001 - .BY %000 ; 01110010 - .BY %000 ; 01110011 - .BY %000 ; 01110100 - .BY %000 ; 01110101 - .BY %000 ; 01110110 - .BY %000 ; 01110111 - .BY %000 ; 01111000 - .BY %000 ; 01111001 - .BY %000 ; 01111010 - .BY %000 ; 01111011 - .BY %000 ; 01111100 - .BY %000 ; 01111101 - .BY %000 ; 01111110 - .BY %000 ; 01111111 - .BY %011 ; 10000000 - .BY %000 ; 10000001 - .BY %000 ; 10000010 - .BY %000 ; 10000011 - .BY %000 ; 10000100 - .BY %000 ; 10000101 - .BY %000 ; 10000110 - .BY %000 ; 10000111 - .BY %000 ; 10001000 - .BY %000 ; 10001001 - .BY %000 ; 10001010 - .BY %000 ; 10001011 - .BY %000 ; 10001100 - .BY %000 ; 10001101 - .BY %000 ; 10001110 - .BY %000 ; 10001111 - .BY %000 ; 10010000 - .BY %000 ; 10010001 - .BY %000 ; 10010010 - .BY %000 ; 10010011 - .BY %000 ; 10010100 - .BY %000 ; 10010101 - .BY %000 ; 10010110 - .BY %000 ; 10010111 - .BY %000 ; 10011000 - .BY %000 ; 10011001 - .BY %000 ; 10011010 - .BY %000 ; 10011011 - .BY %000 ; 10011100 - .BY %000 ; 10011101 - .BY %000 ; 10011110 - .BY %000 ; 10011111 - .BY %010 ; 10100000 - .BY %000 ; 10100001 - .BY %000 ; 10100010 - .BY %000 ; 10100011 - .BY %000 ; 10100100 - .BY %000 ; 10100101 - .BY %000 ; 10100110 - .BY %000 ; 10100111 - .BY %000 ; 10101000 - .BY %000 ; 10101001 - .BY %000 ; 10101010 - .BY %000 ; 10101011 - .BY %000 ; 10101100 - .BY %000 ; 10101101 - .BY %000 ; 10101110 - .BY %000 ; 10101111 - .BY %000 ; 10110000 - .BY %000 ; 10110001 - .BY %000 ; 10110010 - .BY %000 ; 10110011 - .BY %000 ; 10110100 - .BY %000 ; 10110101 - .BY %000 ; 10110110 - .BY %000 ; 10110111 - .BY %000 ; 10111000 - .BY %000 ; 10111001 - .BY %000 ; 10111010 - .BY %000 ; 10111011 - .BY %000 ; 10111100 - .BY %000 ; 10111101 - .BY %000 ; 10111110 - .BY %000 ; 10111111 - .BY %010 ; 11000000 - .BY %000 ; 11000001 - .BY %000 ; 11000010 - .BY %000 ; 11000011 - .BY %000 ; 11000100 - .BY %000 ; 11000101 - .BY %000 ; 11000110 - .BY %000 ; 11000111 - .BY %000 ; 11001000 - .BY %000 ; 11001001 - .BY %000 ; 11001010 - .BY %000 ; 11001011 - .BY %000 ; 11001100 - .BY %000 ; 11001101 - .BY %000 ; 11001110 - .BY %000 ; 11001111 - .BY %000 ; 11010000 - .BY %000 ; 11010001 - .BY %000 ; 11010010 - .BY %000 ; 11010011 - .BY %000 ; 11010100 - .BY %000 ; 11010101 - .BY %000 ; 11010110 - .BY %000 ; 11010111 - .BY %000 ; 11011000 - .BY %000 ; 11011001 - .BY %000 ; 11011010 - .BY %000 ; 11011011 - .BY %000 ; 11011100 - .BY %000 ; 11011101 - .BY %000 ; 11011110 - .BY %000 ; 11011111 - .BY %010 ; 11100000 - .BY %000 ; 11100001 - .BY %000 ; 11100010 - .BY %000 ; 11100011 - .BY %000 ; 11100100 - .BY %000 ; 11100101 - .BY %000 ; 11100110 - .BY %000 ; 11100111 - .BY %000 ; 11101000 - .BY %000 ; 11101001 - .BY %000 ; 11101010 - .BY %000 ; 11101011 - .BY %000 ; 11101100 - .BY %000 ; 11101101 - .BY %000 ; 11101110 - .BY %000 ; 11101111 - .BY %000 ; 11110000 - .BY %000 ; 11110001 - .BY %000 ; 11110010 - .BY %000 ; 11110011 - .BY %000 ; 11110100 - .BY %000 ; 11110101 - .BY %000 ; 11110110 - .BY %000 ; 11110111 - .BY %000 ; 11111000 - .BY %000 ; 11111001 - .BY %000 ; 11111010 - .BY %000 ; 11111011 - .BY %000 ; 11111100 - .BY %000 ; 11111101 - .BY %000 ; 11111110 - .BY %000 ; 11111111 +; values in table mean that tank is moving to the left +SlideLeftTable + .BY %00000001 + .BY %00000010 + .BY %00000011 + .BY %00000100 + .BY %00000101 + .BY %00000110 + .BY %00000111 + .BY %00001100 EndOfTheBarrelX ; right angles from 0 (vertically up) to 90 (horizontally to the right) diff --git a/scorch.asm b/scorch.asm index 56d0084..00967db 100644 --- a/scorch.asm +++ b/scorch.asm @@ -73,6 +73,9 @@ .zpvar dd .word .zpvar di .word .zpvar dp .word + ;---------------------------- + .zpvar UnderTank1 .byte + .zpvar UnderTank2 .byte ;---------------------------- .zpvar weaponPointer .word .zpvar dliCounter .byte diff --git a/scorch.xex b/scorch.xex index 9706697..af6e5a8 100644 Binary files a/scorch.xex and b/scorch.xex differ diff --git a/weapons.asm b/weapons.asm index 963ae92..83ff4f8 100644 --- a/weapons.asm +++ b/weapons.asm @@ -1388,23 +1388,58 @@ TankFallsX ; time in our lives! Tada! It opens a new chapter!!! sta ydraw ; +; lda #0 +; sta UnderTank1 ; byte under tank +; sta UnderTank2 ; byte under tank reversed (for simple check right direction) lda #08 - sta mask2 ; Loop Counter + sta temp ; Loop Counter ByteBelowTank jsr point beq EmptyPoint2 sec + ror UnderTank2 + sec bcs ROLPoint2 EmptyPoint2 clc + ror UnderTank2 + clc ROLPoint2 - rol mask1 + rol UnderTank1 inw xdraw - dec mask2 + dec temp bne ByteBelowTank - ldx mask1 - lda WhereToSlideTable,x - sta IfFallDown ; taking directions of falling down from the table + ldx #0 + lda UnderTank1 + bne NotDown + inx ; set bit 0 - go down +NotDown + stx IfFallDown + ; now we must check falling direction + ldx #7 ; SlideLeftTable length -1 (from 0 to 7) +@ lda SlideLeftTable,x + cmp UnderTank1 + beq SetLeftBit + cmp UnderTank2 + beq SetRightBit + dex + bpl @- + bmi NoLeftOrRight +SetLeftBit + lda IfFallDown + ora #%100 ; set bit 2 - go left + bne @+ +SetRightBit + lda IfFallDown + ora #%010 ; set bit 1 - go right +@ sta IfFallDown + cpx #0 + bne InfinityLoopFix + ora #%001 ; temporary fix!!! for %10000000 and %00000001 + sta IfFallDown +InfinityLoopFix +NoLeftOrRight + lda IfFallDown ; taking directions of falling down from the table bne ItStillFalls ; Tank falling down already finished, but it is not sure that ; the horizontal coordinate is even. @@ -1433,11 +1468,11 @@ ItStillFalls beq NoFallingDown ldx TankNr jsr DecreaseEnergyX - lda IfFallDown - and #6 - bne FallDiagonally - ldx TankNr - jsr DecreaseEnergyX +; lda IfFallDown +; and #%110 +; bne FallDiagonally +; ldx TankNr +; jsr DecreaseEnergyX FallDiagonally NoFallingDown ParachutePresent