Initial commit

This commit is contained in:
2018-04-22 01:34:59 +02:00
commit 5dcf6bea02
23 changed files with 18546 additions and 0 deletions
+2
View File
@@ -0,0 +1,2 @@
# Auto detect text files and perform LF normalization
* text=auto
+24
View File
@@ -0,0 +1,24 @@
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <https://unlicense.org>
+1
View File
@@ -0,0 +1 @@
# scorch
+67
View File
@@ -0,0 +1,67 @@
TODO and BUGS file
rev. 2013-11-17
---------------------------------------------------------
Known bugs (+ means bug is 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)
+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
004. when parachute is on and the tank dies (e.g. hit by a powerful
weapon) the dead (invisible) tank falls on parachute
(and uses one parachute more than necessary)
005. tank stands still on a one pixel spike - it should fall
(possibly all that is necessary is adjust of WhereToSlideTable)
006. After some attacks (like MIRV and leapfrog the OffensiveText
stays on the screen (and becomes a static decoration)
It possibly happens when a tank kills itself with mirv or leapfrog.
007. Decreasing of number of bullets after a shoot does not work correctly
(e.g. 2 bullets are deducted instead of 1)
+008. After a round the last tank sprite stays on the screen.
This hurts only when the last tank is under the table with results!
009. When result in points is >99 then only 2 first digits are displayed
+010. Even MORONS shoot their feet too often - increase min. randomised energy.
+011. High flying bullets sometimes cause brief screen garbage - like a DL damaged
for a fraction of a frame.
Update - these are NOT high flying bullets - it just happens during bullet flight
+012. (newly introduced) Death explosions are offset right and possibly up.
+013. sometimes demo mode does not work (it stops on results display)
+014: FunkyBomb shoots with too high angle
015: Only first shoot of FunkyBomb is correct (with smoke and fast),
the next are like missiles
016: Additional explosions after Frogger are not fallen down
017: Observed MIRV loops - it shoots and shoots MIRV all over the screen. Very rare.
-018: MINOR: ydraw, yhit, ybyte variable is sometimes treated as WORD, sometimes as BYTE.
Making it consistent would save both time and space (not much)
REJECTED: too much work - different routines depend on checking high byte.
---------------------------------------------------------
To do
+001. Start each round with a)worst tank or b)random tank
(Worst tank starts first)
+002. Start each round with random angles (not always 45 degrees left)
+003. Add colour of the given tank to the screen
E.g. when a given tank is shooting it's colour could be behind
tank name on the text screen
004. The game has no end!!! Add ending!!!
A good idea for an ending - a TIP pic - Red Army taking Berlin :)
Another - vector tanks like in BattleZone
Another - stickman tankmen
005. Add number of rounds to the options menu
006. Add sound effects (maybe sampled? or mp0 (sound based on fft))
007. There is no deffensive weapon handling (only parachute works,
but also provisionally
+008. No computer operated opponents - make a frame for AI!!!
009. Make AI in the existing frame
010. It is impossible to look up a number of parachutes left.
+011. Colouring the top status lines in a colour of the active tank.
012. Decreased number of bullets should be displayed just after the shoot.
013. Check LineTable - possibly it is unnecessarily long
+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?)
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.
+402
View File
@@ -0,0 +1,402 @@
; @com.wudsn.ide.asm.mainsourcefile=program.asm
; artificial intelligence of tanks goes here!
; in A there is a level of tank's intelligence
; 1-moron, ..., 7-cyborg, 8-UNKNOWN (the best of all)
; at the moment (2003-08-15) I have no idea how
; to program better opponents, but moron is easy -
; - shoots random direction and force
; greeeting to myself 10 years older in 2013-11-09... still no idea
;----------------------------------------------
MakeLowResDistances .proc
; create low precision table of positions
; by dividing positions by 4
ldy #MaxPlayers-1
loop
lda xtankstableL,y
sta temp
lda xtankstableH,y
sta temp+1
;= /4
:2 lsrw temp
lda temp
sta LowResDistances,y
dey
bpl loop
rts
.endp
;----------------------------------------------
ArtificialIntelligence .proc ;
; A - skill of the TankNr
; returns shoot energy and angle in
; EnergyTable/L/H and AngleTable
;----------------------------------------------
asl
tax
:2 dex ;credit KK
lda AIRoutines+1,x
pha
lda AIRoutines,x
pha
rts
.endp
;----------------
AIRoutines
.word Moron-1
.word Shooter-1 ;Shooter
.word Poolshark-1 ;Poolshark
.word Poolshark-1 ;Toosser
.word Poolshark-1 ;Chooser
.word Poolshark-1 ;Spoiler
.word Poolshark-1 ;Cyborg
.word Poolshark-1 ;Unknown
;----------------------------------------------
Moron .proc
ldx TankNr
jsr RandomizeAngle
sta NewAngle
mwa #80 RandBoundaryLow
mwa #800 RandBoundaryHigh
jsr RandomizeForce
rts
.endp
;----------------------------------------------
Shooter .proc
ldx TankNr
lda PreviousAngle,x
ora PreviousEnergyL,x
ora PreviousEnergyH,x
beq firstShoot
lda PreviousAngle,x
clc
adc #5
bmi leftQuadrant
cmp #90
bcc continue
lda #(-90)
bne continue
leftQuadrant
continue
sta NewAngle
lda PreviousEnergyL,x
sta EnergyTableL,x
lda PreviousEnergyH,x
sta EnergyTableH,x
jmp endo
firstShoot
; compare the x position with the middle of the screen
lda xTanksTableL,x
sta temp
lda xTanksTableH,x
sta temp+1
cpw temp #(screenwidth/2)
bcs tankIsOnTheRight
lda RANDOM
and #$1F
clc
adc #5
;lda #45
sta NewAngle
jmp forceNow
tankIsOnTheRight
lda RANDOM
and #$1F
clc
adc #(-85)
;lda #-45
sta NewAngle
forceNow
mwa #100 RandBoundaryLow
mwa #800 RandBoundaryHigh
jsr RandomizeForce
endo
ldx TankNr ;this is possibly not necessary
lda NewAngle
sta PreviousAngle,x
lda EnergyTableL,x
sta PreviousEnergyL,x
lda EnergyTableH,x
sta PreviousEnergyH,x
; choose the best weapon
lda TanksWeaponsTableL,x
sta temp
lda TanksWeaponsTableH,x
sta temp+1
ldy #32 ;the last weapon
loop
dey
lda (temp),y
beq loop
tya
sta ActiveWeapon,x
rts
.endp
;----------------------------------------------
Poolshark .proc
firstShoot
;find nearest tank neighbour
jsr MakeLowResDistances
mva #$ff temp2 ; min possible distance
ldx TankNr
ldy NumberOfPlayers
dey
loop01
cpy TankNr
beq skipThisPlayer
lda eXistenZ,y
beq skipThisPlayer
lda LowResDistances,x
cmp LowResDistances,y
bcs EnemyOnTheLeft
;enemy on the right
sec
lda LowResDistances,y
sbc LowResDistances,x
cmp temp2 ; lowest
bcs lowestIsLower
sta temp2
sty temp2+1 ; number of the closest tank
; calculate index to shotangle table
:3 lsr @
and #%00000111
clc
adc #8
sta AngleTablePointer
jmp lowestIsLower
EnemyOnTheLeft
sec
lda LowResDistances,x
sbc LowResDistances,y
cmp temp2 ; lowest
bcs lowestIsLower
sta temp2
sty temp2+1 ; number of the closest tank
; calculate index to shotangle table
:3 lsr @
and #%00000111
eor #%00000111
sta AngleTablePointer
lowestIsLower
skipThisPlayer
dey
bpl loop01
randomize 0 8
ldy AngleTablePointer
clc
adc AngleTable,y
sta NewAngle
forceNow
mwa #300 RandBoundaryLow
mwa #700 RandBoundaryHigh
jsr RandomizeForce
endo
ldx TankNr ;this is possibly not necessary
; choose the best weapon
lda TanksWeaponsTableL,x
sta temp
lda TanksWeaponsTableH,x
sta temp+1
ldy #32 ;the last weapon
loop
dey
lda (temp),y
beq loop
tya
sta ActiveWeapon,x
rts
;----------------------------------------------
AngleTable ; 16 bytes ;ba w $348b L$3350
.by 178,186,194,202,210,218,226,234
.by 16,24,32,40,48,56,64,72
.endp
;----------------------------------------------
PurchaseAI .proc ;
; A - skill of the TankNr
; makes purchase for AI opponents
; results of this routine are not visible on the screen
;----------------------------------------------
asl
tax
:2 dex ;credit KK
lda PurchaseAIRoutines+1,x
pha
lda PurchaseAIRoutines,x
pha
rts
.endp
;----------------
PurchaseAIRoutines
.word MoronPurchase-1
.word ShooterPurchase-1 ;ShooterPurchase
.word PoolsharkPurchase-1 ;PoolsharkPurchase
.word PoolsharkPurchase-1 ;ToosserPurchase
.word PoolsharkPurchase-1 ;ChooserPurchase
.word PoolsharkPurchase-1 ;SpoilerPurchase
.word PoolsharkPurchase-1 ;CyborgPurchase
.word PoolsharkPurchase-1 ;UnknownPurchase
;----------------------------------------------
MoronPurchase
;Moron buys nothing
rts
;-------
TryToPurchaseOnePiece .proc
; A - weapon number, better it will be in range(1,32)
; TankNr in X
tay
lda PurchaseMeTable,y
beq SorryNoPurchase
lda WeaponPriceL,y
sta temp
lda WeaponPriceH,y
sta temp+1
;price of the weapon in temp
lda MoneyL,x
sta temp2
lda MoneyH,x
sta temp2+1
;current monies in temp2
cpw temp2 temp
bcc SorryNoPurchase
; deduct monies from the bank account
sec
lda temp2
sbc temp
sta MoneyL,x
lda temp2+1
sbc temp+1
sta MoneyH,x
lda TanksWeaponsTableL,x
sta temp
lda TanksWeaponsTableH,x
sta temp+1
lda WeaponUnits,y
clc
adc (temp),y
cmp #99 ;max number of weapon units
bcc NotExceeded
lda #99
NotExceeded
sta (temp),y
SorryNoPurchase
rts
.endp
;----------------------------------------------
ShooterPurchase .proc
mva #4 tempXroller; number of purchases to perform
ldx TankNr
loop
randomize 1 14
jsr TryToPurchaseOnePiece
dec tempXroller
bne loop
rts
.endp
;----------------------------------------------
PoolsharkPurchase .proc
mva #8 tempXroller; number of purchases to perform
ldx TankNr
loop
randomize 1 30
jsr TryToPurchaseOnePiece
dec tempXroller
bne loop
rts
.endp
PurchaseMeTable .proc ;weapons good to be purchased by the robot
;the comment is an index in the tables
dta 1 ;"Baby Missile " ; 0
dta 1 ;"Missile " ; 1
dta 1 ;"Baby Nuke " ; 2
dta 1 ;"Nuke " ; 3
dta 1 ;"LeapFrog " ; 4
dta 1 ;"Funky Bomb " ; 5
dta 1 ;"MIRV " ; 6
dta 1 ;"Death's Head " ; 7
dta 0 ;"Napalm " ; 8
dta 0 ;"Hot Napalm " ; 9
dta 0 ;"Tracer " ; 10
dta 0 ;"Smoke Tracer " ; 11
dta 1 ;"Baby Roller " ; 12
dta 1 ;"Roller " ; 13
dta 1 ;"Heavy Roller " ; 14
dta 0 ;"Riot Charge " ; 15
dta 0 ;"Riot Blast " ; 16
dta 0 ;"Riot Bomb " ; 17
dta 0 ;"Heavy Riot Bomb " ; 18
dta 0 ;"Baby Digger " ; 19
dta 0 ;"Digger " ; 20
dta 0 ;"Heavy Digger " ; 21
dta 0 ;"Baby Sandhog " ; 22
dta 0 ;"Sandhog " ; 23
dta 0 ;"Heavy Sandhog " ; 24
dta 0 ;"Dirt Clod " ; 25
dta 0 ;"Dirt Ball " ; 26
dta 0 ;"Ton of Dirt " ; 27
dta 1 ;"Liquid Dirt " ; 28
dta 0 ;"Dirt Charge " ; 29
dta 0 ;"Earth Disrupter " ; 30
dta 1 ;"Plasma Blast " ; 31
dta 1 ;"Laser " ; 32
dta 0 ;"----------------" ; 33
dta 0 ;"----------------" ; 34
dta 0 ;"----------------" ; 35
dta 0 ;"----------------" ; 36
dta 0 ;"----------------" ; 37
dta 0 ;"----------------" ; 38
dta 0 ;"----------------" ; 39
dta 0 ;"----------------" ; 40
dta 0 ;"----------------" ; 41
dta 0 ;"----------------" ; 42
dta 0 ;"----------------" ; 43
dta 0 ;"----------------" ; 44
dta 0 ;"----------------" ; 45
dta 0 ;"----------------" ; 46
dta 0 ;"----------------" ; 47
.endp
+54
View File
@@ -0,0 +1,54 @@
IN TIMES OF TROUBLE, GO WITH WHAT YOU KNOW.
DIE!
EAT MY SHORTS!
YOU'RE TOAST!
BANZAI!
FROM HELL'S HEART I STAB AT THEE...
I DIDN'T DO IT. NOBODY SAW ME DO IT.
TAKE A HIKE!
YOU'RE DEAD MEAT.
MAKE MY DAY.
CHARGE!
ATTACK!
YOU'RE OUTTA HERE.
WATTSA MATTA YOU?
FREEZE, OR I'LL SHOOT!
HA HA HA.
WE COME IN PEACE - SHOOT TO KILL!
IN YOUR FACE!
DIE COMMIE PIG!
I LOVE THE SMELL OF NAPALM IN THE MORNING.
VICTORY!
SHOW SOME RESPECT.
JUST WHO DO YOU THINK YOU ARE?
LOOK OUT BELOW!
KNOCK, KNOCK.
LOOK OVER THERE.
GUESS WHAT'S COMING FOR DINNER?
MERRY CHRISTMAS.
OPEN WIDE!
HERE GOES NOTHING...
DON'T WORRY, IT ISN'T A LIVE ROUND.
BLOOD, PAIN, VIOLENCE!
TAKE THIS, SISSY!
I SHALL FLATTEN YOU!
I SHALL SMASH YOUR UGLY TANK!
I WONDER WHAT THIS BUTTON DOES?
DON'T TAKE THIS PERSONALLY.
WOULD THIS MAKE YOU MAD?
I TOLD YOU TO LEAVE MY SISTER ALONE!
I COULD SPARE YOU, BUT WHY?
MY BOMB IS BIGGER THAN YOURS.
DON'T FORGET ABOUT ME!
HASTA LA VISTA, BABY!
THIS IS YOUR BRAIN ON SCORCH.
TAKE THIS!
THIS SCREEN AIN'T BIG ENOUGH FOR THE BOTH OF US.
DIE, ALIEN SWINE!
SAY "ARRGGHHHHH...."
I SHALL OIL MY TURRET WITH YOUR BLOOD.
DIE, TANK-SCUM!
I'M GONNA BREAK YOUR FACE!
MAMA SAID KNOCK YOU OUT!
I HOPE YOU ENJOY PAIN!
PARTING IS SUCH SWEET SORROW... NOT!
+60
View File
@@ -0,0 +1,60 @@
UGH!
AARGH!
AAAGGHHH!
I'M MELTING!
OOF..
OH!
EEEK!
AACCH!
I HATE IT WHEN THAT HAPPENS.
ONE DIRECT HIT CAN RUIN YOUR WHOLE DAY.
OH NO!
NOT ME!
OUCH.
OH NO, NOT AGAIN.
ANOTHER ONE BITES THE DUST.
GOODBYE.
HELP ME!
FAREWELL, CRUEL WORLD.
REMEMBER THE ALAMO!
OH MAN!
DOOUGH!
ANOTHER DAY, ANOTHER BOMB.
THIS IS THE END, MY ONLY FRIEND.
IT'S ALL OVER.
THE FAT LADY SANG.
WHY DOES EVERYTHING HAPPEN TO ME?
I'M GOING DOWN.
I'VE GOT A BAD FEELING ABOUT THIS.
CRAPOLA.
POW!
BIF!
BAM!
ZONK!
I SHOULD'VE LISTENED TO MY MOTHER...
NO... A BUD LIGHT!
WHAT WAS THAT NOISE?
MAMA SAID THERE'D BE DAYS LIKE THIS.
ITS JUST ONE OF THOSE DAYS...
I SEE A BRIGHT LIGHT...
MOMMY? IS THAT YOU?
I LET YOU HIT ME!
SUCKER SHOT!
I DIDN'T WANT TO LIVE ANYWAY.
-<SOB>-
WAS THAT AS CLOSE AS I THINK IT WAS?
JOIN THE ARMY, SEE THE WORLD THEY SAID.
IT WASN'T JUST A JOB IT WAS AN ADVENTURE!
I DIDN'T LIKE VIOLENCE ANYWAY!
I THOUGHT YOU LIKED ME?
SUCH SENSELESS VIOLENCE! I DON'T UNDERSTAND IT.
I THINK THIS GUY'S A LITTLE CRAZY.
SOMEHOW I DON'T FEEL LIKE KILLING ANYMORE.
HEY! KILLIN' AIN'T COOL.
GEE... THANKS.
I'VE FALLEN AND I CAN'T GET UP!
911?
OH NO! HERE I BLOW AGAIN!
I'LL BE BACK...
HEY - I'VE GOT LAWYERS.
TIME TO CALL 1-900-SUE-TANK.
Binary file not shown.

After

Width:  |  Height:  |  Size: 190 B

+125
View File
@@ -0,0 +1,125 @@
.proc talk
L0 dta c"IN TIMES OF TROUBLE, GO WITH WHAT YOU KNOW."
L1 dta c"DIE!"
L2 dta c"EAT MY SHORTS!"
L3 dta c"YOU'RE TOAST!"
L4 dta c"BANZAI!"
L5 dta c"FROM HELL'S HEART I STAB AT THEE..."
L6 dta c"I DIDN'T DO IT. NOBODY SAW ME DO IT."
L7 dta c"TAKE A HIKE!"
L8 dta c"YOU'RE DEAD MEAT."
L9 dta c"MAKE MY DAY."
L10 dta c"CHARGE!"
L11 dta c"ATTACK!"
L12 dta c"YOU'RE OUTTA HERE."
L13 dta c"WATTSA MATTA YOU?"
L14 dta c"FREEZE, OR I'LL SHOOT!"
L15 dta c"HA HA HA."
L16 dta c"WE COME IN PEACE - SHOOT TO KILL!"
L17 dta c"IN YOUR FACE!"
L18 dta c"DIE COMMIE PIG!"
L19 dta c"I LOVE THE SMELL OF NAPALM IN THE MORNING."
L20 dta c"VICTORY!"
L21 dta c"SHOW SOME RESPECT."
L22 dta c"JUST WHO DO YOU THINK YOU ARE?"
L23 dta c"LOOK OUT BELOW!"
L24 dta c"KNOCK, KNOCK."
L25 dta c"LOOK OVER THERE."
L26 dta c"GUESS WHAT'S COMING FOR DINNER?"
L27 dta c"MERRY CHRISTMAS."
L28 dta c"OPEN WIDE!"
L29 dta c"HERE GOES NOTHING..."
L30 dta c"DON'T WORRY, IT ISN'T A LIVE ROUND."
L31 dta c"BLOOD, PAIN, VIOLENCE!"
L32 dta c"TAKE THIS, SISSY!"
L33 dta c"I SHALL FLATTEN YOU!"
L34 dta c"I SHALL SMASH YOUR UGLY TANK!"
L35 dta c"I WONDER WHAT THIS BUTTON DOES?"
L36 dta c"DON'T TAKE THIS PERSONALLY."
L37 dta c"WOULD THIS MAKE YOU MAD?"
L38 dta c"I TOLD YOU TO LEAVE MY SISTER ALONE!"
L39 dta c"I COULD SPARE YOU, BUT WHY?"
L40 dta c"MY BOMB IS BIGGER THAN YOURS."
L41 dta c"DON'T FORGET ABOUT ME!"
L42 dta c"HASTA LA VISTA, BABY!"
L43 dta c"THIS IS YOUR BRAIN ON SCORCH."
L44 dta c"TAKE THIS!"
L45 dta c"THIS SCREEN AIN'T BIG ENOUGH FOR THE BOTH OF US."
L46 dta c"DIE, ALIEN SWINE!"
L47 dta c"SAY ARRGGHHHHH...."
L48 dta c"I SHALL OIL MY TURRET WITH YOUR BLOOD."
L49 dta c"DIE, TANK-SCUM!"
L50 dta c"I'M GONNA BREAK YOUR FACE!"
L51 dta c"MAMA SAID KNOCK YOU OUT!"
L52 dta c"I HOPE YOU ENJOY PAIN!"
;--------------------------------
L53 dta c"PARTING IS SUCH SWEET SORROW... NOT!"
L54 dta c"UGH!"
L55 dta c"AARGH!"
L56 dta c"AAAGGHHH!"
L57 dta c"I'M MELTING!"
L58 dta c"OOF.."
L59 dta c"OH!"
L60 dta c"EEEK!"
L61 dta c"AACCH!"
L62 dta c"I HATE IT WHEN THAT HAPPENS."
L63 dta c"ONE DIRECT HIT CAN RUIN YOUR WHOLE DAY."
L64 dta c"OH NO!"
L65 dta c"NOT ME!"
L66 dta c"OUCH."
L67 dta c"OH NO, NOT AGAIN."
L68 dta c"ANOTHER ONE BITES THE DUST."
L69 dta c"GOODBYE."
L70 dta c"HELP ME!"
L71 dta c"FAREWELL, CRUEL WORLD."
L72 dta c"REMEMBER THE ALAMO!"
L73 dta c"OH MAN!"
L74 dta c"DOOUGH!"
L75 dta c"ANOTHER DAY, ANOTHER BOMB."
L76 dta c"THIS IS THE END, MY ONLY FRIEND."
L77 dta c"IT'S ALL OVER."
L78 dta c"THE FAT LADY SANG."
L79 dta c"WHY DOES EVERYTHING HAPPEN TO ME?"
L80 dta c"I'M GOING DOWN."
L81 dta c"I'VE GOT A BAD FEELING ABOUT THIS."
L82 dta c"CRAPOLA."
L83 dta c"POW!"
L84 dta c"BIF!"
L85 dta c"BAM!"
L86 dta c"ZONK!"
L87 dta c"I SHOULD'VE LISTENED TO MY MOTHER..."
L88 dta c"NO... A BUD LIGHT!"
L89 dta c"WHAT WAS THAT NOISE?"
L90 dta c"MAMA SAID THERE'D BE DAYS LIKE THIS."
L91 dta c"ITS JUST ONE OF THOSE DAYS..."
L92 dta c"I SEE A BRIGHT LIGHT..."
L93 dta c"MOMMY? IS THAT YOU?"
L94 dta c"I LET YOU HIT ME!"
L95 dta c"SUCKER SHOT!"
L96 dta c"I DIDN'T WANT TO LIVE ANYWAY."
L97 dta c"-<SOB>-"
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."
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
OffensiveTextTableH
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
NumberOfOffensiveTexts=54
NumberOfDeffensiveTexts=60
.endp
BIN
View File
Binary file not shown.
+48
View File
@@ -0,0 +1,48 @@
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+="<L"+str(i)+","
l=l[:-1]
print ("OffensiveTextTableL")
print (" dta "+l)
l=""
for i in range(0,lineCount):
l+=">L"+str(i)+","
l=l[:-1]
print ("OffensiveTextTableH")
print (" dta "+l)
l=""
for i in range(0,lineCount):
l+=str(lengths[i])+","
l=l[:-1]
print ("OffensiveTextLengths")
print (" dta "+l)
deff = lineCount-off
print ("NumberOfOffensiveTexts="+str(off))
print ("NumberOfDeffensiveTexts="+str(deff))
Binary file not shown.
+129
View File
@@ -0,0 +1,129 @@
Changes:
Build 124
2013-12-21
- removed large chunk of redundant 4x4 print code and table generation code,
over 1kb gained.
- plot and point routines speeded up by ~20 cycles :P (and shortened by few bytes as well)
- fixed bug 011. High flying bullets sometimes cause brief screen garbage - like a DL damaged
fixed by plotpointer (the top line) changed from HSCROLL based to regular $f line with plot
- screen memory moved to low area ($1010), making the game start at $3010 and easier
to be loaded. Other minor memory layout modifications.
Build 123
2013-12-10
- fixed bug 013: sometimes demo mode does not work (it stops on results display)
- fixed bug 012: (newly introduced) Death explosions are offset right and possibly up.
- prepared the game for various screen width. The only problem is memory layout.
Basically it is impossible to make contiguous wide screen of more than 170 lines.
Changing the screen to non-contiguous would require rewrite of all character
manipulating routines.
- fixed bug 014: FunkyBomb shoots with too high angle,
funkyBomb angle changed from -8..+8 to -16..+16
- speeded up explosions by drawing only odd circles. Not bad visually and 2x faster.
Build 122
2013-11-17
- tank expend 1 energy with each shoot to avoid endless shooting loops
- small visual glitch with background colour fixed
- death messages "defensive texts" in source do not stay on screen after some explosions
Build 121
2013-11-10
- Poolshark and Shooter can buy weapons
- Purchase screen moved to the beginning of the round
Build 120
2013-11-09
SillyVenture 2K13 joint effort to bring artificial intelligence into life:
- Shooter and Poolshark shooting programmed
- several small bugfixes and improvements as proposed by SillyVenture crowd
Build 119
2012-06-17
Scorch sources translated to MADS with the sweet repl.sh script.
MISSING UPDATE INFORMATION... POSSIBLY NOTHING IMPORTANT HAPPENED HERE.
Build 115
2009-08-25
- fixed bug 001 (lack of explosions on the empty ground)
- fixed bug 003 (wrapping death's head explosions)
- fixed plot (faster explosions)
- fukk, just 6 years and we are back!!! This game is pretty addictive :)
TO DO:
- send our wives and kids away much more often :))))
Build 114
2003-08-22
- Results after each round are displayed in the right
sequence, i.e. the best one is on the top
- during second and following rounds shooting sequence
is such that the worst tank shoots first
The above changes does not look terrific, but there was
a lot of thinking to do it correctly. What is the most
important the overall game feeling improved a lot!
program.s65
* added routine SortSequence
textproc.s65
* changed routine DisplayResults to show
round results in correct order
Build 113
2003-08-17
- AI Opponents move barrels to the right position
before firing a bullet.
- Purchase screen is not displayed for AI opponents.
- There is 2 sec delay after displaying
"Deffensive" text i.e. text before death
program.s65
* added routine MoveBarrelToNewPosition
which rotates barrel of the tank until
it sits at the right (newly randomized) angle
textproc.s65
* added routine PurchaseAI
it is a framework for all AI purchases
SHORTSYS.S65
* new macro PAUSE (waits given number of frames)
Bulid 112
2003-08-15
First attempts to create a framework for intelligent
opponents (AI). Right now there is only one level
of "intelligence" - Moron. Moron shoots at random angle
with random force.
program.s65
* routine Round checks the Skill level
and if it is not human branches to
ArtificialIntelligence routine.
* new routines:
- ArtificialIntelligence
- RandomizeForce
- RandomizeAngle
TO DO:
* nice rotating barrel of AI tank
* AI weapon purchase and usage
* AI better than Moronic... (but how...)
* tanks' shooting seqence shoud be from
weakest to the strongest, not random
Bulid 111
2003-07-27
program.s65:
* added sequentional shooting
(not necessarily tank no. 1 shoots first)
* added routine "RandomizeSequence" that is called
before each round
* initial angle of the tank's barrel is randomized
(was always 45 degrees right)
variables.s65
* added table "TankSequence"
grafproc.s65
* shorter delay during Flight
+197
View File
@@ -0,0 +1,197 @@
; @com.wudsn.ide.asm.mainsourcefile=program.asm
.IF *>0 ;this is a trick that prevents compiling this file alone
;-----------------------------------------------------
;-------------display-lists---------------------------
;-----------------------------------------------------
PurchaseDL
.byte $70,$70,$20
.byte $42
.word textbuffer2
.byte $02,$10,$42
MoreUpdl
.word EmptyLine
.byte 0,$42
WeaponsListDL
.word ListOfWeapons
.byte 0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0
.byte $42
MoreDownDL
.word EmptyLine
.byte $10,$42
.word WeaponsDescription
.byte 2
.byte $41
.word PurchaseDL
;------------------------
OptionsDL
.byte $70,$70,$70,$70,$70
.byte $42
.word OptionsScreen
.byte $02,$02,$70,$02,0,$02,0,$2,0,$2
.byte $41
.word OptionsDL
;------------------------
;Enter names of tanks DL
NameDL
.byte $70,$70,$70,$70,$70
.byte $42
.word NameScreen
.byte $30
.byte $02,$30,$2
.byte $10,2,2,2,$30,2,2
.byte $41
.word NameDL
; -------------------------------------------------
dl ; MAIN game display list
.byte $70,$00
.byte $42
.word textbuffer
.byte $02 +$80 ;DLI
.byte $00
.byte $4f
.word WhiteLine
.byte $4f
.word PlotLine
.byte $4f
.word WhiteLine
.byte $4f
.word display
:100 .by $0f
.by $0f
.by $4f
.wo display+$0ff0
:97 .byte $0f
.byte $41
.word dl
; horizontal line
WhiteLine
:screenBytes .by $ff
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. 124 (cc)2000-2013"
dta d" Please select option with cursor keys "
dta d" and press (Return) to proceed "
OptionsHere
; 0123456789012345678901234567890123456789
dta d"Players : 2 3 4 5 6 "
dta d"Cash : none 2K 5K 8K 10K "
dta d"Gravity : 0.2G 0.5G 1G 2G 4G "
dta d"Wind : 1B 3B 5B 7B 9B "
OptionsScreenEnd
; -------------------------------------------------
NameScreen
dta d" Enter names of players "
dta d" Tank 01 Name:"
NameAdr
dta d" "
dta d" Human/Atari (difficulty level) "
dta d" "
NamesOfLevels
dta d" HUMAN Moron Shooter "
dta d" Poolshark Toosser Chooser "
dta d" Spoiler Cyborg Unknown "
dta d" "
dta d"Tab"*
dta d" - Player/Difficulty level "
dta d" "
dta d"Return"*
dta d" - Proceed "
;---------------------------------------------------
MoreUp
dta d" "
dta 92,92,92
dta d" more "
dta 92,92,92
dta d" "
MoreDown
dta d" "
dta 93,93,93
dta d" more "
dta 93,93,93
dta d" "
ListOfWeapons
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
ListOfWeapons1End
ListOfDefensiveWeapons
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
dta d" "
ListOfDefensiveWeaponsEnd ;constant useful when clearing
WeaponsDescription
dta d" "
dta d"Tab"*
dta d" - Defensive/Offensive weapon "
dta d" "
dta d"Space"*
dta d" - Purchase "
dta d"Return"*
dta d" - Finish "
EmptyLine
dta d" "
;-----------------------------------------------
textbuffer
dta d"Player: "
dta d" "
textbuffer2
dta d"Player: ******** Cash: 00000 "
dta d"----------------------------------------"
.endif
+1512
View File
File diff suppressed because it is too large Load Diff
+1144
View File
File diff suppressed because it is too large Load Diff
+6
View File
@@ -0,0 +1,6 @@
.sourcemode on
.echo
.echo "Loading executable..."
.echo
bc *
.onexerun .echo "Launching executable..."
+1077
View File
File diff suppressed because it is too large Load Diff
+9005
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
+1643
View File
File diff suppressed because it is too large Load Diff
+898
View File
@@ -0,0 +1,898 @@
; @com.wudsn.ide.asm.mainsourcefile=program.asm
.IF *>0 ;this is a trick that prevents compiling this file alone
;=====================================================
; most important non-zero page variables
; zero page variables are declared in program.s65 module
;=====================================================
NumberOfPlayers .byte 0 ;current number of players (counted from 1)
TankSequence :MaxPlayers .by 0 ;sequence of shooting during the Round
;-----------------------------------
skilltable ; computer controlled players' skills (1-8), 0 - human
:MaxPlayers .by 0
;-----------------------------------
moneyH ;we place zero at the end of prices and money
;and have range from 0 to 99990 (not too much)
;money players have (maybe one more byte is needed?)
:MaxPlayers .by 0
moneyL
:MaxPlayers .by 0
;-----------------------------------
gainH ;how much money player gets after the round
;it is gathered during the round basing on energy
;opponents loose after player's shoots
:MaxPlayers .by 0
gainL
:MaxPlayers .by 0
;-----------------------------------
looseH ;how much player looses after the round
;calculated from REAL energy loss
;(not only to zero energy)
:MaxPlayers .by 0
looseL
:MaxPlayers .by 0
;-----------------------------------
Energy
:MaxPlayers .by 0
EnergyDecrease .by 0
eXistenZ
:MaxPlayers .by 0
LASTeXistenZ ; eXistenZ before shoot
:MaxPlayers .by 0
ResultsTable ;the results in the gameeeeee
:MaxPlayers .by 0
TempResults
:MaxPlayers .by 0
CurrentResult
.byte 0
;-----------------------------------
EnergyTableL ;shooting Force of the tank during the round
:MaxPlayers .by 0
EnergyTableH
:MaxPlayers .by 0 ;maxplayers=6
MaxEnergyTableL ;Energy of the tank during the round
;(limes superior force of the Shoot)
:MaxPlayers .by 0 ;1000 is the default
MaxEnergyTableH
:MaxPlayers .by 0
;-----------------------------------
AngleTable ;Angle of the barrel of each tank during the round
.by (255-90),(255-90),(255-90),(255-90),(255-90),(255-90)
NewAngle
.by 0
;-----------------------------------
ActiveWeapon ;number of the selected weapon
:MaxPlayers .by 0
;-----------------------------------
;format of the static point number used in the game
; 20203.5 = 128 : <20203 : >20203
;-----------------------------------
L1 .by 0 ; variable used in multiplications (by 10:)
gravity .by 25 ;only the decimal part (1/10 = 25)
;-----------------------------------
Wind .wo $0080 ;walue displayed on the screen
;multiplied by 16 (decimal part only)
;-----------------------------------
MaxWind .byte $40 ;
WindOrientation .byte 0 ;(0-right,1-left)
;-----------------------------------
Counter .byte 0 ;temporary Counter for outside loops
HitFlag .byte 0 ;1 when missile hit anything
;-----------------------------------
xtankstableL ;X positions of tanks (lower left point)
:MaxPlayers .by 0
xtankstableH
:MaxPlayers .by 0
ytankstable ;Y positions of tanks (lower left point)
:MaxPlayers .by 0
LowResDistances ; coarse stank positions divided by 4 (to be in just one byte)
:MaxPlayers .by 0
;-----------------------------------
keycodes ;tables for calculating KeyCode to Screen Code (38 characters)
.byte $3f,$15,$12,$3a,$2a,$38,$3d,$39
.byte $0d,$01,$05,$00,$25,$23,$08,$0a
.byte $2f,$28,$3e,$2d,$0b,$10,$2e,$16
.byte $2b,$17,$1f,$1e,$1a,$18,$1d,$1b
.byte $33,$35,$30,$32,$22,$0e
scrcodes
dta d"abcdefgh"
dta d"ijklmnop"
dta d"qrstuvwx"
dta d"yz123456"
dta d"7890.-"
;-----------------------------------
Erase .byte 0 ; if 1 only mask of the character is printed
; on the graphics screen. if 0 character is printed normally
;-----------------------------------
RangeLeft .wo 0 ;range of the soil to be fallen down
;it is being set by all Explosions
RangeRight .wo 0
;-----------------------------------
WeaponRangeLeft .wo 0 ;Range of the Explosion of the given weapon
WeaponRangeRight .wo 0
;--------------------------------------------------
;--------------------------------------------------
;Variables used by the given subroutines
;moved to one place for easier
;compilation to e.g. cartridge
;--------------------------------------------------
;xroller
HowMuchToFall .byte $FF
HeightRol .byte 0
;digger
digstartx .word 0
digstarty .word 0
diggery .byte 0
DigLong .byte 0
digtabxL :8 .by 0
digtabxH :8 .by 0
digtabyL :8 .by 0
digtabyH :8 .by 0
;sandhog
sandhogflag .byte 0 ; (0 digger, 8 sandhog)
;ofdirt
magic .word 0 ; was tempor2, but it was not compiling!!! (bug in OMC65)
;draw
DrawJumpAddr .word 0
HowToDraw .byte 0
; bits here mean
; 0 - negative X (go up)
; 1 - negative Y (left)
; 2 - directional value > 1 (more than 45 degrees)
; if all 0 then standart routine
XHit .word 0
YHit .word 0
LineLength .word 0
;circle
radius .byte 0
xcircle .word 0
ycircle .byte 0
tempcir .word 0
;TankFalls
IfFallDown .byte 0
PreviousFall .byte 0
EndOfTheFallFlag .byte 0 ; in case of the infinite fall
Parachute .byte 0 ; are you insured with parachute?
; -------------------------------------------------
;Flight
;variables for 5 missiles (used for mirv)
xtraj00 :5 .by 0
xtraj01 :5 .by 0
xtraj02 :5 .by 0
vx00 :5 .by 0
vx01 :5 .by 0
vx02 :5 .by 0
vx03 :5 .by 0
MirvDown :5 .by 0 ; is given missile down?
MirvMissileCounter .byte 0 ; missile Counter (mainly for X)
SmokeTracerFlag .byte 0 ; if Smoketracer
; -------------------------------------------------
;CheckCollisionWithTank
vx .byte 0,0,0,0 ;two decimal bytes, two whole bytes (DC.BA)
vy .byte 0,0,0,0
xtraj .byte 0,0,0
ytraj .byte 0,0,0
xtrajold .byte 0,0,0
ytrajold .byte 0,0,0
Angle .byte 0
Force .byte 0,0,0
Multiplier .byte 0,0,0
Multiplee .byte 0,0
Result .byte 0,0,0
goleft .byte 0 ;if 1 then flights left
;--------------------------------------------------
;SoilDown2
IsEndOfTheFallFlag .byte 0
; -------------------------------------------------
;unPlot
WhichUnPlot .byte 0
; max 5 concurrent unPlots
oldplotH :5 .by 0
oldplotL :5 .by 0
oldora :5 .by 0
oldply :5 .by 0
OldOraTemp .byte 0
FunkyBombCounter .byte 0
xtrajfb .word 0
ytrajfb .word 0
;
tracerflag .byte 0
; -------------------------------------------------
;TypeChar
mask1 :8 .by 0
mask2 :8 .by 0
char1 :8 .by 0
char2 :8 .by 0
color .byte 1
ybit .byte 0
tempbyte01 .byte 0
delta .word 0
yfloat .word 0
deltaX .byte 0
UpNdown .byte 0
temptankX .word 0
temptankNr .byte 0
; -------------------------------------------------
;Variables from textproc.s65
; tables with numbers of weapons on the right lists
; to be honest - I do not know at the moment what the above
; comment was supposed to mean...
NubersOfWeaponsL1
:(8*5) .by $ff
NubersOfWeaponsL2
:(8*2) .by $ff
; -------------------------------------------------
; variables storing amount of weapons on the first and second
; list and pointer position
HowManyOnTheList1
.byte 0
HowManyOnTheList2
.byte 0
PositionOnTheList ; pointer position on the list being displayed
.byte 0
LastWeapon ; number of the last previously purchased weapon
; it is necessary when after purchase some weapon
; is removed from the list (because too expensive)
; and the cursor must be placed elsewhere
.byte $ff
WhichList ; list currently on the screen
; (0-offensive, 1-defensive)
.byte 0
OffsetDL1 ; offset of the list screen (how many lines)....
.byte 0
; -------------------------------------------------
;Options
OptionsTable .byte 0,0,2,2
OptionsY .byte 0 ;vertical position of cursor on Options screen
maxoptions = 4 ;number of all options (4 in 0.01)
CashOptionH ;(one zero less than on the screen)
.byte 0,>200,>500,>800,>1000
CashOptionL
.byte 0,<200,<500,<800,<1000
GravityTable .byte 10,20,25,30,40
MaxWindTable .byte 5,20,40,60,80
;------------------------------------------------
;mark the level
PositionInName ; cursor position in name of the player when name input
.byte 0
DifficultyLevel ; Difficulty Level (human/cpu)
.byte 0
LevelNameBeginL ; begins of level names
.byte <NamesOfLevels,<(NamesOfLevels+10),<(NamesOfLevels+20)
.byte <(NamesOfLevels+32),<(NamesOfLevels+42),<(NamesOfLevels+52)
.byte <(NamesOfLevels+64),<(NamesOfLevels+74),<(NamesOfLevels+84)
LevelNameBeginH
.byte >NamesOfLevels,>(NamesOfLevels+10),>(NamesOfLevels+20)
.byte >(NamesOfLevels+32),>(NamesOfLevels+42),>(NamesOfLevels+52)
.byte >(NamesOfLevels+64),>(NamesOfLevels+74),>(NamesOfLevels+84)
;-------------------------------------------------
;displaydecimal
decimal .word 0
displayposition .word 0
decimalresult dta d"0000"
;xmissile
ExplosionRadius .word 0 ;because when adding in xdraw it is double byte
;round
CurrentRoundNr .byte 0
FallDown1 .byte 0
FallDown2 .byte 0
;leapfrog
LeapFrogAngle .byte 0
;laser
LaserCoordinate .word 0,0,0,0
TanksNames
dta d"1st Tank"
dta d"2nd Tank"
dta d"3rd Tank"
dta d"4th Tank"
dta d"5th Tank"
dta d"6th Tank"
; -------------------------------------------------
; Here go tables with weapons possesed by a given tank
; Index in the table means weapon type
; number entered means ammo for given weapon possessed (max 99)
; Let 0 be "baby missile"
; from $30 the defensive weapons begin
TanksWeapons
TanksWeapon1
.by 99
:63 .by 0
TanksWeapon2
.by 99
:63 .by 0
TanksWeapon3
.by 99
:63 .by 0
TanksWeapon4
.by 99
:63 .by 0
TanksWeapon5
.by 99
:63 .by 0
TanksWeapon6
.by 99
:63 .by 0
TanksWeaponsTableL
.by <TanksWeapon1,<TanksWeapon2,<TanksWeapon3,<TanksWeapon4,<TanksWeapon5,<TanksWeapon6
TanksWeaponsTableH
.by >TanksWeapon1,>TanksWeapon2,>TanksWeapon3,>TanksWeapon4,>TanksWeapon5,>TanksWeapon6
mountaintable ;table of mountains (size=screenwidth)
:screenwidth .by 0
.by 0 ; additional byte for fallout (sometimes 1 pixel)
mountaintable2 ;table of mountains (size=screenwidth)
:screenwidth .by 0
.by 0 ; additional byte for fallout (sometimes 1 pixel)
mountaintable3
:screenwidth .by 0
.by 0 ; additional byte for fallout (sometimes 1 pixel)
MountaintableEnd ;good for table clearing
;----------------------------------------------
TextPositionX .word 0
TextPositionY .byte 0
TextAddress .word 0
TextCounter .byte 0
TextNumberOff .byte 0
;--------------
TankTempY
.byte 0
;----------------------------------------------
LineAddress4x4
.word 0
LineCharNr
.byte 0
LineXdraw
.word 0
LineYdraw
.byte 0
LineTop
dta d"(%%%%%%%%%%%)"
.byte $ff
;# - pion, () * +, % - poziom
LineBottom
dta d"*%%%%%%%%%%%+"
.byte $ff
LineEmpty
dta d"# #"
.byte $ff
LineHeader1
dta d"# ROUND: "
RoundNrDisplay
dta d" #"
.byte $ff
LineHeader2
dta d"# RESULTS #"
.byte $ff
;-----------
ResultLineBuffer
dta d" "
.byte $ff
ResultX
.word 0
ResultY
.byte 0
ResultOfTankNr
.byte 0
;-----------
pmtableL ; addressess of the P/M memory for 5 tanks (6th is without P/M background)
.byte <(pmgraph+$400)
.byte <(pmgraph+$500)
.byte <(pmgraph+$600)
.byte <(pmgraph+$700)
.byte <(pmgraph+$300) ; this is a missile background
pmtableH
.byte >(pmgraph+$400)
.byte >(pmgraph+$500)
.byte >(pmgraph+$600)
.byte >(pmgraph+$700)
.byte >(pmgraph+$300)
;-----------
; this table changes Angle to the appropriate tank character
BarrelTableL
.byte $02,$02,$02,$02,$02,$02,$02,$02
.byte $04,$04,$04,$04,$04,$04,$04,$04
.byte $06,$06,$06,$06,$06,$06,$06,$06,$06
.byte $08,$08,$08,$08,$08,$08,$08,$08
.byte $0a,$0a,$0a,$0a,$0a,$0a,$0a,$0a
.byte $0c,$0c,$0c,$0c,$0c,$0c,$0c,$0c,$0c
.byte $0e,$0e,$0e,$0e,$0e,$0e,$0e,$0e
.byte $10,$10,$10,$10,$10,$10,$10,$10
.byte $12,$12,$12,$12,$12,$12,$12,$12,$12
.byte $14,$14,$14,$14,$14,$14,$14,$14
.byte $16,$16,$16,$16,$16,$16,$16,$16
BarrelTableR
.byte $2c,$2c,$2c,$2c,$2c,$2c,$2c,$2c
.byte $2a,$2a,$2a,$2a,$2a,$2a,$2a,$2a
.byte $28,$28,$28,$28,$28,$28,$28,$28,$28
.byte $26,$26,$26,$26,$26,$26,$26,$26
.byte $24,$24,$24,$24,$24,$24,$24,$24
.byte $22,$22,$22,$22,$22,$22,$22,$22,$22
.byte $20,$20,$20,$20,$20,$20,$20,$20
.byte $1e,$1e,$1e,$1e,$1e,$1e,$1e,$1e
.byte $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c
.byte $1a,$1a,$1a,$1a,$1a,$1a,$1a,$1a
.byte $18,$18,$18,$18,$18,$18,$18,$18
sintable
.byte 0
.byte 4
.byte 8
.byte 13
.byte 17
.byte 22
.byte 26
.byte 31
.byte 35
.byte 40
.byte 44
.byte 48
.byte 53
.byte 57
.byte 61
.byte 66
.byte 70
.byte 74
.byte 79
.byte 83
.byte 87
.byte 91
.byte 95
.byte 100
.byte 104
.byte 108
.byte 112
.byte 116
.byte 120
.byte 124
.byte 128
.byte 131
.byte 135
.byte 139
.byte 143
.byte 146
.byte 150
.byte 154
.byte 157
.byte 161
.byte 164
.byte 167
.byte 171
.byte 174
.byte 177
.byte 181
.byte 184
.byte 187
.byte 190
.byte 193
.byte 196
.byte 198
.byte 201
.byte 204
.byte 207
.byte 209
.byte 212
.byte 214
.byte 217
.byte 219
.byte 221
.byte 223
.byte 226
.byte 228
.byte 230
.byte 232
.byte 233
.byte 235
.byte 237
.byte 238
.byte 240
.byte 242
.byte 243
.byte 244
.byte 246
.byte 247
.byte 248
.byte 249
.byte 250
.byte 251
.byte 252
.byte 252
.byte 253
.byte 254
.byte 254
.byte 255
.byte 255
.byte 255
.byte 255
.byte 255
.byte 255 ;anti self destruction byte
costable
.byte 255 ;anti self destruction byte
.byte 255
.byte 255
.byte 255
.byte 255
.byte 255
.byte 254
.byte 254
.byte 253
.byte 252
.byte 252
.byte 251
.byte 250
.byte 249
.byte 248
.byte 247
.byte 246
.byte 244
.byte 243
.byte 242
.byte 240
.byte 238
.byte 237
.byte 235
.byte 233
.byte 232
.byte 230
.byte 228
.byte 226
.byte 223
.byte 221
.byte 219
.byte 217
.byte 214
.byte 212
.byte 209
.byte 207
.byte 204
.byte 201
.byte 198
.byte 196
.byte 193
.byte 190
.byte 187
.byte 184
.byte 181
.byte 177
.byte 174
.byte 171
.byte 167
.byte 164
.byte 161
.byte 157
.byte 154
.byte 150
.byte 146
.byte 143
.byte 139
.byte 135
.byte 131
.byte 128
.byte 124
.byte 120
.byte 116
.byte 112
.byte 108
.byte 104
.byte 100
.byte 95
.byte 91
.byte 87
.byte 83
.byte 79
.byte 74
.byte 70
.byte 66
.byte 61
.byte 57
.byte 53
.byte 48
.byte 44
.byte 40
.byte 35
.byte 31
.byte 26
.byte 22
.byte 17
.byte 13
.byte 8
.byte 4
.byte 0
linetableL
:screenheight .by <(display+screenBytes*#)
;:20 .by <(display+screenBytes*#)
.by <PlotLine
linetableH
:screenheight .by >(display+screenBytes*#)
;:20 .by >(display+screenBytes*#)
.by >PlotLine
;----------------------------
oldPlotPointerX
.wo 0
;----------------------------
;PutChar4x4
LoopCounter4x4 .byte 0
y4x4 .byte 0
StoreA4x4 .byte 0
Xcounter4x4 .byte 0
nibbler4x4 .byte 0
CharCode4x4 .byte 0
plot4x4color .byte 0 ;1-white, 0-background
bittable
.byte $80,$40,$20,$10,$08,$04,$02,$01
bittable2
.byte $7f,$bf,$df,$ef,$f7,$fb,$fd,$fe
;----------------------------
disktance ;tanks distance
.byte 0,0
.byte screenwidth/3
.byte screenwidth/4
.byte screenwidth/5
.byte screenwidth/6
.byte screenwidth/7
;max number of players=6
; 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: 0 - go down, 1 - go right, 2 - go left
;original table
;.BYTE 1,5,4,4,4,4,4,4,0,0,0,0,0,0,0,0
;.BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;.BYTE 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;.BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;.BYTE 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;.BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;.BYTE 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;.BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;.BYTE 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;.BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;.BYTE 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;.BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;.BYTE 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;.BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;.BYTE 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;.BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
.BYTE 1,5,4,4,4,4,4,4,0,0,0,0,0,0,0,0 ;16
.BYTE 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;32
.BYTE 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;48
.BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;64
.BYTE 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;80
.BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;96
.BYTE 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;112
.BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;128
.BYTE 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
.BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
.BYTE 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
.BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
.BYTE 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
.BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
.BYTE 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
.BYTE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
EndOfTheBarrelX
.byte 4,4,4,4,4,4,4,4,4,4,4
.byte 5,5,5,5,5,5,5,5,5,5
.byte 6,6,6,6,6,6,6,6,6
.byte 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
.byte 7,7,7,7,7,7,7,7,7
.byte 7,7,7,7,7,7,7,7,7,7
.byte 7,7,7,7,7,7,7,7,7,7,7,7,7
.byte 7,7,7,7,7,7,7,7,7,7,7,7,7,7
.byte 0,0,0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0,0,0
.byte 0,0,0,0
.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
.byte 1,1,1,1,1,1,1,1,1
.byte 2,2,2,2,2,2,2,2,2,2
.byte 3,3,3,3,3,3,3,3,3,3,3
EndOfTheBarrelY
.byte 7,7,7,7,7,7,7,7,7,7,7
.byte 7,7,7,7,7,7,7,7,7,7
.byte 7,7,7,7,7,7,7,7,7
.byte 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
.byte 6,6,6,6,6,6,6,6,6
.byte 5,5,5,5,5,5,5,5,5,5
.byte 4,4,4,4,4,4,4,4,4,4,4,4,4
.byte 3,3,3,3,3,3,3,3,3,3,3,3,3,3
.byte 0,0,0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0,0,0
.byte 0,0,0,0,0,0,0,0,0,0
.byte 0,0,0,0
.byte 3,3,3,3,3,3,3,3,3,3,3,3,3,3
.byte 4,4,4,4,4,4,4,4,4,4,4,4,4
.byte 5,5,5,5,5,5,5,5,5,5
.byte 6,6,6,6,6,6,6,6,6
.byte 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
.byte 7,7,7,7,7,7,7,7,7
.byte 7,7,7,7,7,7,7,7,7,7
.byte 7,7,7,7,7,7,7,7,7,7,7
;-------------------------------------------------
TanksNamesDefault
dta d"1st Tank"
dta d"2nd Tank"
dta d"3rd Tank"
dta d"4th Tank"
dta d"5th Tank"
dta d"6th Tank"
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
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
;-------------------------------------------------
; how many units (bulletd) of a given weapon we get for a given price
; This is a table of constans.
; If on a given position is 0 it means that this weapon
; is not present in the game.
; This is the slot for adding new weapons.
WeaponUnits
.byte 10,5,3,1,2,2,3,1,10,2,20,10,10,5,2,10
.byte 5,5,2,10,5,2,10,5,2,10,5,2,2,10,10,5
.byte 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
.byte 6,2,5,5,2,8,10,2,3,3,2,2,1,10,25,0
;-------------------------------------------------
; Screen codes of icons (chars) representing a given weapon
WeaponSymbols
.byte $40,$41,$42,$43,$44,$45,$46,$47
.byte $48,$49,$4a,$4b,$4c,$4d,$4e,$4f
.byte $50,$51,$52,$53,$54,$55,$56,$57
.byte $58,$59,$5a,$5b,$60,$7b,$7c,$7d
.byte $20,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $02,$03,$06,$1d,$0a,$1b,$1c,$1e
.byte $3b,$3c,$3d,$3e,$3f,$5e,$5f,$00
; Names of weapons (16 chars lon)
NamesOfWeapons ;the comment is an index in the tables
dta d"Baby Missile " ; 0
dta d"Missile " ; 1
dta d"Baby Nuke " ; 2
dta d"Nuke " ; 3
dta d"LeapFrog " ; 4
dta d"Funky Bomb " ; 5
dta d"MIRV " ; 6
dta d"Death's Head " ; 7
dta d"Napalm " ; 8
dta d"Hot Napalm " ; 9
dta d"Tracer " ; 10
dta d"Smoke Tracer " ; 11
dta d"Baby Roller " ; 12
dta d"Roller " ; 13
dta d"Heavy Roller " ; 14
dta d"Riot Charge " ; 15
dta d"Riot Blast " ; 16
dta d"Riot Bomb " ; 17
dta d"Heavy Riot Bomb " ; 18
dta d"Baby Digger " ; 19
dta d"Digger " ; 20
dta d"Heavy Digger " ; 21
dta d"Baby Sandhog " ; 22
dta d"Sandhog " ; 23
dta d"Heavy Sandhog " ; 24
dta d"Dirt Clod " ; 25
dta d"Dirt Ball " ; 26
dta d"Ton of Dirt " ; 27
dta d"Liquid Dirt " ; 28
dta d"Dirt Charge " ; 29
dta d"Earth Disrupter " ; 30
dta d"Plasma Blast " ; 31
dta d"Laser " ; 32
dta d"----------------" ; 33
dta d"----------------" ; 34
dta d"----------------" ; 35
dta d"----------------" ; 36
dta d"----------------" ; 37
dta d"----------------" ; 38
dta d"----------------" ; 39
dta d"----------------" ; 40
dta d"----------------" ; 41
dta d"----------------" ; 42
dta d"----------------" ; 43
dta d"----------------" ; 44
dta d"----------------" ; 45
dta d"----------------" ; 46
dta d"----------------" ; 47
dta d"Heat Guidance " ; 48 ($30)
dta d"Bal Guidance " ; 49
dta d"Horz Guidance " ; 50
dta d"Vert Guidance " ; 51
dta d"Lazy Boy " ; 52
dta d"Parachute " ; 53
dta d"Battery " ; 54
dta d"Mag Deflector " ; 55
dta d"Shield " ; 56
dta d"Force Shield " ; 57
dta d"Heavy Shield " ; 58
dta d"Super Mag " ; 59
dta d"Auto Defense " ; 60
dta d"Fuel Tank " ; 61
dta d"Contact Trigger " ; 62
dta d"----------------" ; 63
joyToKeyTable
; .by 00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, 15
.by $ff,$ff,$ff,$ff,$ff,$ff,$ff,$07,$ff,$ff,$ff,$06,$ff,$0f,$0e,$ff
previousAngle
:MaxPlayers .by 0
previousEnergyL
:MaxPlayers .by 0
previousLeftRange
:MaxPlayers .by 0
previousEnergyH
:MaxPlayers .by 0
previousRightAngle
:MaxPlayers .by 0
RandBoundaryLow
.wo 0
RandBoundaryHigh
.wo 1024
AngleTablePointer
.by 0
clearEnd
.endif
+2152
View File
File diff suppressed because it is too large Load Diff