diff --git a/README.md b/README.md index 28898ee..0bba3f0 100644 --- a/README.md +++ b/README.md @@ -14,9 +14,9 @@ Contributors: - Bocianu (@bocianu) - important ideas, FujiNet implementation, QA - Emkay - splash screen music -QA: Probabilitydragon, KrzysRog, Beeblebrox, EnderDude, lopezpb, Dracon, brad-colbert +QA: Probabilitydragon, KrzysRog, Beeblebrox, EnderDude, lopezpb, Dracon, brad-colbert, archon800, Shaggy the Atarian -You can contact us at pecus@poczta.fm or pirx@5oft.pl +You can contact us via [AtariAge](https://atariage.com) or [AtariOnLine](https://atarionline.pl) forums. This source code was originally compiled under [OMC65 crossassembler](https://github.com/pkali/omc65) and on 2012-06-21 translated to [mads](https://github.com/tebe6502/Mad-Assembler). @@ -47,6 +47,21 @@ With the advent of fujinet (https://fujinet.online/) we are thinking about makin ## Changes: +###### Build 147 +2022-07-10 +LOST build. We were watching [LOST party](https://www.lostparty.pl/2022/) streams so maybe a little less done, but still some nice improvements. +- new weapons by @Pecusx - Napalm and Hot Napalm. Fire penetrates all shields, so beware! +- status bar showing outdated info on the beginning of the round fix +- various small optimizations incl. memory usage, soildown, weapon ranges +- improved shapes of Heavy and Force Shields + +Issues closed: +- revert to the old but slightly improved version of showing angles (#105) +- zero page loading eliminated (#106) +- active player name appear over his tank when aiming (#107) +- configurable mountain heights (The Netherlands, Belgium, Czechia, Switzerland, Nepal) (#86) +- angle speeds up when joystick / keyboard are pressed (#75) + ###### Build 146 2022-07-03 Super heavy rewrite build. @@ -55,9 +70,9 @@ Not much changed visually since the last build, but really large parts of the co - silly angle system rewritten to a proper, primary school angling. BTW - I had to dig into 8th grade trig to make it work. About 200 bytes saved, complexity reduced. Next build will have improved angle speed UI. I will also allow for an easier improvement of tank visuals. - Weapon price and quantity balance - this is our honest attempt to make game more fun. We'll accept any critique and improvement proposals. - New AI opponent - Tosser! Not much better than Poolshark, but still beats sharks most of the time. -- AI opponents can purchase defensive weapons what makes playing against AI somewhat more challenging. +- AI opponents can purchase defensive weapons which make playing against AI somewhat more challenging. - Improved Laser. It is still not ideal, but better. Still hard to aim :] -- Few small parachute related bugs fixed +- Few small parachute-related bugs fixed - Death's Head bug fix Issues closed: diff --git a/ai.asm b/ai.asm index 695f520..6c01bb6 100644 --- a/ai.asm +++ b/ai.asm @@ -31,19 +31,19 @@ loop ;---------------------------------------------- .proc ArtificialIntelligence ; -; A - skill of the TankNr +; A - skill of the TankNr (in X) ; returns shoot energy and angle in ; ForceTable/L/H and AngleTable ;---------------------------------------------- asl - tax - :2 dex ;credit KK - lda AIRoutines+1,x + tay + :2 dey ;credit KK + lda AIRoutines+1,y pha - lda AIRoutines,x + lda AIRoutines,y pha - ldx TankNr ; common values used in AI routines + ; common values used in AI routines ; address of weapons table (for future use) lda TanksWeaponsTableL,x sta temp @@ -57,10 +57,10 @@ AIRoutines .word Shooter-1 ;Shooter .word Poolshark-1 ;Poolshark .word Tosser-1 ;Tosser - .word Poolshark-1 ;Chooser - .word Poolshark-1 ;Spoiler - .word Poolshark-1 ;Cyborg - .word Poolshark-1 ;Unknown + .word Tosser-1 ;Chooser + .word Tosser-1 ;Spoiler + .word Tosser-1 ;Cyborg + .word Tosser-1 ;Unknown ;---------------------------------------------- .proc Moron @@ -335,10 +335,10 @@ PurchaseAIRoutines .word ShooterPurchase-1 ;ShooterPurchase .word PoolsharkPurchase-1 ;PoolsharkPurchase .word TosserPurchase-1 ;TosserPurchase - .word PoolsharkPurchase-1 ;ChooserPurchase - .word PoolsharkPurchase-1 ;SpoilerPurchase - .word PoolsharkPurchase-1 ;CyborgPurchase - .word PoolsharkPurchase-1 ;UnknownPurchase + .word TosserPurchase-1 ;ChooserPurchase + .word TosserPurchase-1 ;SpoilerPurchase + .word TosserPurchase-1 ;CyborgPurchase + .word TosserPurchase-1 ;UnknownPurchase ;---------------------------------------------- .proc MoronPurchase diff --git a/artwork/HIMARS14.asm b/artwork/HIMARS14.asm index 1c87947..bcc29c3 100644 --- a/artwork/HIMARS14.asm +++ b/artwork/HIMARS14.asm @@ -23,17 +23,8 @@ bptr .ds 2 cur_pos .ds 1 chn_bits .ds 1 -bit_data .byte 1 +bit_data .ds 1 -.proc get_byte - lda song_data+1 - inc song_ptr - bne skip - inc song_ptr+1 -skip - rts -.endp -song_ptr = get_byte + 1 fcnt .ds 2 @@ -86,6 +77,8 @@ buffers ; .proc init_song + mva #1 bit_data + ; Example: here initializes song pointer: ;mwa #song_data song_ptr @@ -182,18 +175,28 @@ skip_chn: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Check for ending of song and jump to the next frame ; -.proc check_end_song - lda song_ptr + 1 - cmp #>song_end + +; not checking really so the tune gets funky :))) + ;lda song_ptr + 1 + ;cmp #>song_end ;bne wait_frame - lda song_ptr - cmp #-" -L98 dta c"WAS THAT AS CLOSE AS I THINK IT WAS?" -L99 dta c"JOIN THE ARMY, SEE THE WORLD THEY SAID." -L100 dta c"IT WASN'T JUST A JOB IT WAS AN ADVENTURE!" -L101 dta c"I DIDN'T LIKE VIOLENCE ANYWAY!" -L102 dta c"I THOUGHT YOU LIKED ME?" -L103 dta c"SUCH SENSELESS VIOLENCE! I DON'T UNDERSTAND IT." -L104 dta c"I THINK THIS GUY'S A LITTLE CRAZY." -L105 dta c"SOMEHOW I DON'T FEEL LIKE KILLING ANYMORE." -L106 dta c"HEY! KILLIN' AIN'T COOL." -L107 dta c"GEE... THANKS." -L108 dta c"I'VE FALLEN AND I CAN'T GET UP!" -L109 dta c"911?" -L110 dta c"OH NO! HERE I BLOW AGAIN!" -L111 dta c"I'LL BE BACK..." -L112 dta c"HEY - I'VE GOT LAWYERS." -L113 dta c"TIME TO CALL 1-900-SUE-TANK." +L53 dta d"PARTING IS SUCH SWEET SORROW... NOT!" +L54 dta d"UGH!" +L55 dta d"AARGH!" +L56 dta d"AAAGGHHH!" +L57 dta d"I'M MELTING!" +L58 dta d"OOF.." +L59 dta d"OH!" +L60 dta d"EEEK!" +L61 dta d"AACCH!" +L62 dta d"I HATE IT WHEN THAT HAPPENS." +L63 dta d"ONE DIRECT HIT CAN RUIN YOUR WHOLE DAY." +L64 dta d"OH NO!" +L65 dta d"NOT ME!" +L66 dta d"OUCH." +L67 dta d"OH NO, NOT AGAIN." +L68 dta d"ANOTHER ONE BITES THE DUST." +L69 dta d"GOODBYE." +L70 dta d"HELP ME!" +L71 dta d"FAREWELL, CRUEL WORLD." +L72 dta d"REMEMBER THE ALAMO!" +L73 dta d"OH MAN!" +L74 dta d"DOOUGH!" +L75 dta d"ANOTHER DAY, ANOTHER BOMB." +L76 dta d"THIS IS THE END, MY ONLY FRIEND." +L77 dta d"IT'S ALL OVER." +L78 dta d"THE FAT LADY SANG." +L79 dta d"WHY DOES EVERYTHING HAPPEN TO ME?" +L80 dta d"I'M GOING DOWN." +L81 dta d"I'VE GOT A BAD FEELING ABOUT THIS." +L82 dta d"CRAPOLA." +L83 dta d"POW!" +L84 dta d"BIF!" +L85 dta d"BAM!" +L86 dta d"ZONK!" +L87 dta d"I SHOULD'VE LISTENED TO MY MOTHER..." +L88 dta d"NO... A BUD LIGHT!" +L89 dta d"WHAT WAS THAT NOISE?" +L90 dta d"MAMA SAID THERE'D BE DAYS LIKE THIS." +L91 dta d"ITS JUST ONE OF THOSE DAYS..." +L92 dta d"I SEE A BRIGHT LIGHT..." +L93 dta d"MOMMY? IS THAT YOU?" +L94 dta d"I LET YOU HIT ME!" +L95 dta d"SUCKER SHOT!" +L96 dta d"I DIDN'T WANT TO LIVE ANYWAY." +L97 dta d"--" +L98 dta d"WAS THAT AS CLOSE AS I THINK IT WAS?" +L99 dta d"JOIN THE ARMY, SEE THE WORLD THEY SAID." +L100 dta d"IT WASN'T JUST A JOB IT WAS AN ADVENTURE!" +L101 dta d"I DIDN'T LIKE VIOLENCE ANYWAY!" +L102 dta d"I THOUGHT YOU LIKED ME?" +L103 dta d"SUCH SENSELESS VIOLENCE! I DON'T UNDERSTAND IT." +L104 dta d"I THINK THIS GUY'S A LITTLE CRAZY." +L105 dta d"SOMEHOW I DON'T FEEL LIKE KILLING ANYMORE." +L106 dta d"HEY! KILLIN' AIN'T COOL." +L107 dta d"GEE... THANKS." +L108 dta d"I'VE FALLEN AND I CAN'T GET UP!" +L109 dta d"911?" +L110 dta d"OH NO! HERE I BLOW AGAIN!" +L111 dta d"I'LL BE BACK..." +L112 dta d"HEY - I'VE GOT LAWYERS." +L113 dta d"TIME TO CALL 1-900-SUE-TANK." +LEND OffensiveTextTableL - dta L0,>L1,>L2,>L3,>L4,>L5,>L6,>L7,>L8,>L9,>L10,>L11,>L12,>L13,>L14,>L15,>L16,>L17,>L18,>L19,>L20,>L21,>L22,>L23,>L24,>L25,>L26,>L27,>L28,>L29,>L30,>L31,>L32,>L33,>L34,>L35,>L36,>L37,>L38,>L39,>L40,>L41,>L42,>L43,>L44,>L45,>L46,>L47,>L48,>L49,>L50,>L51,>L52,>L53,>L54,>L55,>L56,>L57,>L58,>L59,>L60,>L61,>L62,>L63,>L64,>L65,>L66,>L67,>L68,>L69,>L70,>L71,>L72,>L73,>L74,>L75,>L76,>L77,>L78,>L79,>L80,>L81,>L82,>L83,>L84,>L85,>L86,>L87,>L88,>L89,>L90,>L91,>L92,>L93,>L94,>L95,>L96,>L97,>L98,>L99,>L100,>L101,>L102,>L103,>L104,>L105,>L106,>L107,>L108,>L109,>L110,>L111,>L112,>L113 -OffensiveTextLengths - dta 43,4,14,13,7,35,37,12,17,12,7,7,18,17,22,9,33,13,15,42,8,18,30,15,13,16,31,16,10,20,35,22,17,20,29,31,27,24,36,27,29,22,21,29,10,48,17,20,38,15,26,24,22,36,4,6,9,12,5,3,5,6,28,39,6,7,5,17,27,8,8,22,19,7,7,26,32,14,18,33,15,34,8,4,4,4,5,36,18,20,36,29,23,19,17,12,29,7,36,39,41,30,23,48,34,42,25,14,31,4,26,15,23,28 + dta >L0,>L1,>L2,>L3,>L4,>L5,>L6,>L7,>L8,>L9,>L10,>L11,>L12,>L13,>L14,>L15,>L16,>L17,>L18,>L19,>L20,>L21,>L22,>L23,>L24,>L25,>L26,>L27,>L28,>L29,>L30,>L31,>L32,>L33,>L34,>L35,>L36,>L37,>L38,>L39,>L40,>L41,>L42,>L43,>L44,>L45,>L46,>L47,>L48,>L49,>L50,>L51,>L52 + dta >L53,>L54,>L55,>L56,>L57,>L58,>L59,>L60,>L61,>L62,>L63,>L64,>L65,>L66,>L67,>L68,>L69,>L70,>L71,>L72,>L73,>L74,>L75,>L76,>L77,>L78,>L79,>L80,>L81,>L82,>L83,>L84,>L85,>L86,>L87,>L88,>L89,>L90,>L91,>L92,>L93,>L94,>L95,>L96,>L97,>L98,>L99,>L100,>L101,>L102,>L103,>L104,>L105,>L106,>L107,>L108,>L109,>L110,>L111,>L112,>L113 + dta >LEND NumberOfOffensiveTexts=54 NumberOfDeffensiveTexts=60 .endp diff --git a/artwork/tanks.fnt b/artwork/tanks.fnt new file mode 100644 index 0000000..100ef24 Binary files /dev/null and b/artwork/tanks.fnt differ diff --git a/artwork/tanksv2.fnt b/artwork/tanksv2.fnt index d06950e..8adfc4e 100644 Binary files a/artwork/tanksv2.fnt and b/artwork/tanksv2.fnt differ diff --git a/artwork/textconv.py b/artwork/textconv.py deleted file mode 100644 index f52f71b..0000000 --- a/artwork/textconv.py +++ /dev/null @@ -1,48 +0,0 @@ -import sys -from string import strip - -lineCount = 0 -lengths = [] -alltexts = [] - -for line in open("TALK1.txt"): - lineCount+=1 - line = strip(line) - lengths.append(len(line)) - alltexts.append(line) -off = lineCount - -for line in open("TALK2.txt"): - lineCount+=1 - line = strip(line) - lengths.append(len(line)) - alltexts.append(line) - -tmpNo = 0 -for line in alltexts: - print ("L"+str(tmpNo)+' dta "'+line+'"') - tmpNo+= 1 -l="" -for i in range(0,lineCount): - l+="Tanksnames + sta temp+1 ; TextAddress+1 + mwa temp TextAddress + + ;find length of the tank's name + ldy #0 +@ + lda (temp),y + beq end_found + iny + cpy #8 + bne @- + dey + +end_found + iny + sty fx + ldy tankNr + jsr Display4x4AboveTank + rts +.endp + ;------------------------------- .proc TypeLine4x4 ; ;------------------------------- @@ -1479,6 +1532,7 @@ DOTNcharloop ldy #0 sty LineCharNr + mva #1 plot4x4color TypeLine4x4Loop ldy LineCharNr @@ -1491,7 +1545,6 @@ TypeLine4x4Loop sta CharCode4x4 mwa LineXdraw dx mva LineYdraw dy - mva #1 plot4x4color jsr PutChar4x4 ;type empty pixels as well! adw LineXdraw #4 inc LineCharNr @@ -1791,7 +1844,6 @@ FinishResultDisplay ;--------------------- ;displaying quantity of the given weapon ;--------------------- - ldx TankNr lda ActiveWeapon,x jsr HowManyBullets sta decimal @@ -1888,56 +1940,6 @@ ActiveDefence NoDefenceWeapon NoShieldEnergy - ;========================= - ;display Force - ;========================= - ldx TankNr - lda ForceTableL,x - sta decimal - lda ForceTableH,x - sta decimal+1 - mwa #textbuffer+40+36 displayposition - jsr displaydec - - ;========================= - ;display Angle - ;========================= - ; additionally we are getting charcode of the tank - ; (for future display) - ldx TankNr - lda AngleTable,x - bmi AngleToLeft - - lda AngleTable,x - sta decimal - ;lda #$7f ; (tab) character - ;sta textbuffer+40+25 - lda #0 ;space - ;sta textbuffer+40+22 - sta decimal+1 ; angle is single byte, but displayed with displaydec (word) routine - ;lda #90 - ;sec - ;sbc AngleTable,x - tay - lda BarrelTable,y - sta CharCode - bne AngleDisplay ;like jmp, because code always <>0 -AngleToLeft - ;sec - ;sbc #(255-90) - sta decimal - tay - lda BarrelTable,y - sta CharCode - ;lda #$7e ;(del) char - ;sta textbuffer+40+22 - ;lda #0 ;space - ;sta textbuffer+40+25 - -AngleDisplay - mwa #textbuffer+40+21 displayposition - jsr displaydec - ;========================= ;display Wind ;========================= @@ -1975,12 +1977,62 @@ DisplayWindValue sta decimal mwa #textbuffer+80+7 displayposition jsr displaybyte ;decimal (byte), displayposition (word) + + ;========================= + ;display Force + ;========================= + ldx TankNr + lda ForceTableL,x + sta decimal + lda ForceTableH,x + sta decimal+1 + mwa #textbuffer+40+36 displayposition + jsr displaydec + + ;========================= + ;display Angle + ;========================= +displayAngle + ldx TankNr + lda AngleTable,x + cmp #90 + beq VerticallyUp + bcs AngleToLeft +AngleToRight + ; 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 +AngleToLeft + 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 +VerticallyUp + ; now we have value 90 + sta decimal + lda #0 ;space + sta textbuffer+40+25 + sta textbuffer+40+22 + +AngleDisplay + mwa #textbuffer+40+23 displayposition + jsr displaybyte rts .endp ;------------------------------------------------- .proc PutTankNameOnScreen -; puts name of the tan on the screen +; puts name of the tank on the screen ldy #$00 lda tanknr asl diff --git a/variables.asm b/variables.asm index c444e67..cc52773 100644 --- a/variables.asm +++ b/variables.asm @@ -12,9 +12,11 @@ TanksNames ; DO NOT ZERO - ticket #24 :6 dta d" " ;---------------------------------------------------- ;Options DO NOT ZERO - ticket #27 -OptionsTable .by 0,1,2,2,0,1,3 +OptionsTable .by 0,1,2,2,0,1,3,2 RoundsInTheGame .by 10 ;how many rounds in the current game seppukuVal .by 75 +mountainDeltaH .by 3 +mountainDeltaL .by $ff ;---------------------------------------------------- skilltable ; computer controlled players' skills (1-8), 0 - human (no cleaning, ticket #30) .DS [MaxPlayers] @@ -211,9 +213,6 @@ Multiplier .ds 3 ; 0,0,0 Multiplee .ds 2 ; 0,0 goleft .DS 1 ;if 1 then flights left ;---------------------------------------------------- -;SoilDown2 -IsEndOfTheFallFlag .DS 1 -;---------------------------------------------------- ;unPlot WhichUnPlot .DS 1 ; max 5 concurrent unPlots diff --git a/weapons.asm b/weapons.asm index c17543b..ce999ee 100644 --- a/weapons.asm +++ b/weapons.asm @@ -30,8 +30,8 @@ ExplosionRoutines .word funkybomb-1 .word mirv-1 .word deathshead-1 - .word VOID-1 ;napalm - .word VOID-1 ;hotnapalm + .word napalm-1 ;napalm + .word hotnapalm-1 ;hotnapalm .word tracer-1 .word tracer-1 ;smoketracer .word babyroller-1 @@ -282,6 +282,127 @@ NoLowerCircle rts .endp ; ------------------------ +.proc napalm + inc FallDown2 + mva #(napalmRadius+4) ExplosionRadius ; real radius + 4 pixels (half characrer width) + jsr CalculateExplosionRange + mva #0 ExplosionRadius ; in this weapon - flag: 0 - napalm, 1 - hotnapalm + jmp xnapalm +.endp +; ------------------------ +.proc hotnapalm + inc FallDown2 + mva #(napalmRadius+4) ExplosionRadius ; real radius + 4 pixels (half characrer width) + jsr CalculateExplosionRange + mva #1 ExplosionRadius ; in this weapon - flag: 0 - napalm, 1 - hotnapalm + jmp xnapalm +.endp +; ------------------------ +.proc xnapalm + mwa xdraw xcircle ; store hitpoint for future repeats + ldy #30 ; repeat 30 times + sty magic +RepeatNapalm ; external loop (for fire animation) + mwa xcircle xdraw + sbw xdraw #(napalmRadius) ; 10 pixels on left side hit point + ldy #0 + sty magic+1 +RepeatFlame ; internal loop (draw flames) + ldy #0 + adw xdraw #mountaintable temp + sty ydraw+1 + lda (temp),y + sec + sbc #1 ; over ground + sta ydraw + lda xdraw + and ExplosionRadius ; if hotnapalm and x is odd: + :2 asl ; modify y position 4 pixels up + ldy ydraw + sta ydraw + tya + sec + sbc ydraw + sta ydraw + sbw xdraw #4 ; half character correction + ; draw flame symbol + lda magic ; if last repeat - clear flames + beq LastNapalmRepeat + lda random + and #%00000110 + clc + adc #$46 + bne PutFlameChar +LastNapalmRepeat + lda #$4e ; clear flame symbol +PutFlameChar + sta CharCode + ; check coordinates + cpw xdraw #(screenwidth-7) + bcs CharOffTheScreen + lda ydraw + cmp #7 + bcc CharOffTheScreen + cmp #(screenHeight-1) + bcs CharOffTheScreen + jsr TypeChar +CharOffTheScreen + adw xdraw #4 ; reverse half character correction (we need positon of character center) + adw xdraw #1 ; next char 1 pixels to right + inc magic+1 + lda magic+1 + cmp #(2*napalmRadius+1) ; 10 pixels on left, 10 pixels on right and 1 in center + jne RepeatFlame + dec magic + jpl RepeatNapalm + ; after napalm + inc FallDown2 +;now we must check tanks in range + ldx NumberOfPlayers + dex +BurnedCheckLoop + lda eXistenZ,x + beq EndNurnedCheckLoop + ;here the tank exist + ; calculate right edge of the fire + adw xcircle #(napalmRadius+4+4) xdraw ; 10 pixels on right side hit point + half character width + correction + ; now we compare tank position with right edge of the fire (napalm) + lda XtankstableH,x + cmp xdraw+1 + bne @+ + lda XtankstableL,x + cmp xdraw +@ + bcs TankOutOfFire + ; let's calculate left edge of the fire + sbw xcircle #(napalmRadius+8+4-4) xdraw ; 10 pixels on left + character width (tank) + half character - correction + bpl @+ + mwa #0 xdraw ; left screen edge +@ + ; now we compare tank position with left edge of the fire (napalm) + lda XtankstableH,x + cmp xdraw+1 + bne @+ + lda XtankstableL,x + cmp xdraw +@ + bcc TankOutOfFire + + ldy #40 ; energy decrease (napalm) - but if hotnapalm: + lda ExplosionRadius + beq NotHot + ldy #80 ; energy decrease (hotnapalm) +NotHot + ; check shields ( joke :) ) + jsr DecreaseEnergyX +TankOutOfFire +EndNurnedCheckLoop + dex + bpl BurnedCheckLoop + mva #sfx_silencer sfx_effect + rts +.endp +; ------------------------ .proc babyroller inc FallDown2 mva #11 ExplosionRadius @@ -990,7 +1111,6 @@ ToHighFill jne RepeatFill rts .endp - ;-------------------------------------------------- .proc BeforeFire ;TankNr (byte) ;-------------------------------------------------- @@ -1025,6 +1145,7 @@ ContinueToCheckMaxForce2 wait ; best after drawing a tank + ;keyboard reading ; KBCODE keeps code of last keybi @@ -1192,36 +1313,64 @@ CTRLPressedDown jmp BeforeFire pressedRight + lda pressTimer + spl:mva #0 pressTimer ; if >128 then reset to 0 + cmp #25 ; 1/2s + bcs CTRLPressedRight + mva #sfx_set_power_2 sfx_effect ldx TankNr dec AngleTable,x lda AngleTable,x - ;cmp #180 ; if angle goes through 180 we clear the barrel - ;bne NotThrough90DegreesLeft - ;mva #$2e CharCode ; TODO: change - ;jsr DrawTankNr.drawtankNrX -;NotThrough90DegreesLeft cmp #255 ; -1 jne BeforeFire lda #180 sta AngleTable,x jmp BeforeFire +CTRLPressedRight + mva #sfx_set_power_2 sfx_effect + ldx TankNr + lda AngleTable,x + sec + sbc #4 + sta AngleTable,x + cmp #4 ; smalles angle for speed rotating + jcs BeforeFire + lda #180 + sta AngleTable,x + jmp BeforeFire + + pressedLeft + lda pressTimer + spl:mva #0 pressTimer ; if >128 then reset to 0 + cmp #25 ; 1/2s + bcs CTRLPressedLeft + mva #sfx_set_power_2 sfx_effect ldx TankNr INC AngleTable,x lda AngleTable,x - ;bne NotThrough90DegreesRight - ;mva #$30 CharCode ; if angle goes through 0 we clear the barrel - ;jsr DrawTankNr.drawtankNrX -;NotThrough90DegreesRight cmp #181 jne BeforeFire lda #0 sta AngleTable,x jmp BeforeFire +CTRLPressedLeft + mva #sfx_set_power_2 sfx_effect + ldx TankNr + lda AngleTable,x + clc + adc #4 + sta AngleTable,x + cmp #181-4 + jcc BeforeFire + lda #0 + sta AngleTable,x + jmp BeforeFire + pressedTAB mva #sfx_purchase sfx_effect ldx TankNr @@ -1271,6 +1420,7 @@ pressedS pressedSpace ;================================= ;we shoot here!!! + mva #0 pressTimer ; reset jsr WaitForKeyRelease lda pressTimer @@ -2530,7 +2680,6 @@ CalculateExplosionRange0 lda #0 sta RangeRight sta RangeRight+1 - mva #11 ExplosionRadius ; what is this magic value? ;-------------------------------------------------- .proc CalculateExplosionRange ;--------------------------------------------------