# Actionscript Tennis

**URL:** <https://forum.kirupa.com/t/actionscript-tennis/25510>\
**Category:** design\
**Created:** [July 13, 2003, 6:48pm UTC](https://forum.kirupa.com/t/actionscript-tennis/25510 "2003-07-13T18:48:29Z")\
**Posts on this page:** 20\
**Page:** 2

<div class="post-metadata">

**Author:** ![system](https://canada1.discourse-cdn.com/flex011/uploads/kirupa/original/3X/6/2/621e5c11736f46532526e61be85940af4230f3e5.png) [@system](https://forum.kirupa.com/u/system)\
**Post date:** [July 16, 2003, 10:33am UTC](https://forum.kirupa.com/t/actionscript-tennis/25510/21 "2003-07-16T10:33:57Z")

</div>

so far:

```auto
/ **************** \
 * Volley #1
 * Author:	Ahmed
 * Date:	7/15
\ **************** /

StageDim = {width:Stage.width, height:Stage.height}; // Stage Dimensions (renamed by sen 7/15)
container = []; // contains circles created by createCircle
createCircle = function(i){
	clip = _root.createEmptyMovieClip("mc"+i, i); // create an empty clip to contain the circle
	clip.lineStyle(10+Math.random()*60, Math.random()*0x0000FF,10+Math.random()*50); // define random linestyle
	clip.lineTo(.15,.45); // draw circle (a very fat line)
	clip._x = Math.random()*StageDim.width; // position circle based on Stage Dimensions
	clip._y = Math.random()*StageDim.height; 
	container.push(clip); // add circle clip to container
}
for(i=0; i<15; i++) createCircle(i); // create 15 circles

/ **************** \
 * Volley #2
 * Author:	Senocular
 * Date:	7/15
\ **************** /

// create a clip at depth 100 as an "object layer" with more managable
// depths using ObjectLayer.depth++ to prevent overlapping
// in ObjectLayer create a spaceShip clip and define an outline for it
this.createEmptyMovieClip("ObjectLayer", 100).createEmptyMovieClip("spaceShip", ObjectLayer.depth++).outline = [[91,19],[31,-35],[-26,-20],[-76,-45],[-98,-43],[-60,-13],[-77,-4],[-76,9],[-58,15],[-31,15],[-53,47],[-20,43],[34,2],[75,20],[91,19]];
// drawOutlines: draws lines defined by points in an array in a movieclip
// allows optional lineStyle and fillStyle parameters
MovieClip.prototype.drawOutlines = function(points, lStyle, fStyle){
	if (lStyle != undefined) this.lineStyle.apply(this, lStyle); // apply linestyle if passed
	if (fStyle != undefined) this.beginFill.apply(this, fStyle); // apply fillstyle if passed
	for (var i=0; i<points.length; i++){ // cycle through all the points in the array
		if (i) this.lineTo(points*[0],points*[1]); // use a line if not the first point
		else this.moveTo(points*[0],points*[1]);} // otherwise, move to the point if the first
	if (fStyle != undefined) this.endFill(); // end the fill if passed
};
// defines 'ship' in this timeline and draws its outlines with specified line and fill
(ship = ObjectLayer.spaceShip).drawOutlines(ObjectLayer.spaceShip.outline, [2,0,100], [0xbfbfbf,100]);

```

---

<div class="post-metadata">

**Author:** ![system](https://canada1.discourse-cdn.com/flex011/uploads/kirupa/original/3X/6/2/621e5c11736f46532526e61be85940af4230f3e5.png) [@system](https://forum.kirupa.com/u/system)\
**Post date:** [July 16, 2003, 10:35am UTC](https://forum.kirupa.com/t/actionscript-tennis/25510/22 "2003-07-16T10:35:44Z")

</div>

:beam:

---

<div class="post-metadata">

**Author:** ![system](https://canada1.discourse-cdn.com/flex011/uploads/kirupa/original/3X/6/2/621e5c11736f46532526e61be85940af4230f3e5.png) [@system](https://forum.kirupa.com/u/system)\
**Post date:** [July 16, 2003, 10:38am UTC](https://forum.kirupa.com/t/actionscript-tennis/25510/23 "2003-07-16T10:38:16Z")

</div>

mind if i join? 🙂

---

<div class="post-metadata">

**Author:** ![system](https://canada1.discourse-cdn.com/flex011/uploads/kirupa/original/3X/6/2/621e5c11736f46532526e61be85940af4230f3e5.png) [@system](https://forum.kirupa.com/u/system)\
**Post date:** [July 16, 2003, 10:38am UTC](https://forum.kirupa.com/t/actionscript-tennis/25510/24 "2003-07-16T10:38:33Z")

</div>

jump on in! :beam:

---

<div class="post-metadata">

**Author:** ![system](https://canada1.discourse-cdn.com/flex011/uploads/kirupa/original/3X/6/2/621e5c11736f46532526e61be85940af4230f3e5.png) [@system](https://forum.kirupa.com/u/system)\
**Post date:** [July 16, 2003, 10:39am UTC](https://forum.kirupa.com/t/actionscript-tennis/25510/25 "2003-07-16T10:39:59Z")

</div>

k, let me get to work and i’ll start on a starfield.

---

<div class="post-metadata">

**Author:** ![system](https://canada1.discourse-cdn.com/flex011/uploads/kirupa/original/3X/6/2/621e5c11736f46532526e61be85940af4230f3e5.png) [@system](https://forum.kirupa.com/u/system)\
**Post date:** [July 16, 2003, 10:43am UTC](https://forum.kirupa.com/t/actionscript-tennis/25510/26 "2003-07-16T10:43:41Z")

</div>

You need to “Check out” the file, Thor 🙂 [size=1]and the starField is already there… :)[/size]

---

<div class="post-metadata">

**Author:** ![system](https://canada1.discourse-cdn.com/flex011/uploads/kirupa/original/3X/6/2/621e5c11736f46532526e61be85940af4230f3e5.png) [@system](https://forum.kirupa.com/u/system)\
**Post date:** [July 16, 2003, 11:25am UTC](https://forum.kirupa.com/t/actionscript-tennis/25510/27 "2003-07-16T11:25:19Z")

</div>

doh! gotcha. i haven’t downloaded the FLA yet. i’ll see what i can do.

---

<div class="post-metadata">

**Author:** ![system](https://canada1.discourse-cdn.com/flex011/uploads/kirupa/original/3X/6/2/621e5c11736f46532526e61be85940af4230f3e5.png) [@system](https://forum.kirupa.com/u/system)\
**Post date:** [July 16, 2003, 2:27pm UTC](https://forum.kirupa.com/t/actionscript-tennis/25510/28 "2003-07-16T14:27:40Z")

</div>

Here’s what I have so far. I wasn’t really pleased with how this turned out. Hopefully I was able to start what someone else can finish. I’m having a hard time working on this while at the same time Alt+Tabbing to dodge my boss.

and for ilyas, here’s the code:

```auto
/ **************** \
 * Volley #1
 * Author:	Ahmed
 * Date:	7/15
\ **************** /
StageDim = {width:Stage.width, height:Stage.height}; // Stage Dimensions (renamed by sen 7/15)
container = []; // contains circles created by createCircle
createCircle = function(i){
	clip = _root.createEmptyMovieClip("mc"+i, i); // create an empty clip to contain the circle
	clip.lineStyle(10+Math.random()*60, Math.random()*0x0000FF,10+Math.random()*50); // define random linestyle
	clip.lineTo(.15,.45); // draw circle (a very fat line)
	clip._x = Math.random()*StageDim.width; // position circle based on Stage Dimensions
	clip._y = Math.random()*StageDim.height; 
	container.push(clip); // add circle clip to container
}
for(i=0; i<15; i++) createCircle(i); // create 15 circles

/ **************** \
 * Volley #2
 * Author:	Senocular
 * Date:	7/15
\ **************** /

// create a clip at depth 100 as an "object layer" with more managable
// depths using ObjectLayer.depth++ to prevent overlapping
// in ObjectLayer create a spaceShip clip and define an outline for it
this.createEmptyMovieClip("ObjectLayer", 100).createEmptyMovieClip("spaceShip", ObjectLayer.depth++).outline = [[91,19],[31,-35],[-26,-20],[-76,-45],[-98,-43],[-60,-13],[-77,-4],[-76,9],[-58,15],[-31,15],[-53,47],[-20,43],[34,2],[75,20],[91,19]];
// drawOutlines: draws lines defined by points in an array in a movieclip
// allows optional lineStyle and fillStyle parameters
MovieClip.prototype.drawOutlines = function(points, lStyle, fStyle){
	if (lStyle != undefined) this.lineStyle.apply(this, lStyle); // apply linestyle if passed
	if (fStyle != undefined) this.beginFill.apply(this, fStyle); // apply fillstyle if passed
	for (var i=0; i<points.length; i++){ // cycle through all the points in the array
		if (i) this.lineTo(points*[0],points*[1]); // use a line if not the first point
		else this.moveTo(points*[0],points*[1]);} // otherwise, move to the point if the first
	if (fStyle != undefined) this.endFill(); // end the fill if passed
};
// defines 'ship' in this timeline and draws its outlines with specified line and fill
(ship = ObjectLayer.spaceShip).drawOutlines(ObjectLayer.spaceShip.outline, [2,0,100], [0xbfbfbf,100]);

/ **************** \
 * Volley #3
 * Author:	thoriphes
 * Date:	7/16
\ **************** /

// I can make really long lines of code too ;)
with (ship) {accel = 1.01; decel = 0.99; maxvel = 10; vx = vy = 0; onEnterFrame = function(){this._x = -(_x += this.vx); this._y = -(_y += this.vy);};}
Key.addListener(keyList = new Object());
keyList.onKeyDown = function () {
	with (ship) {
		down = true;
		vx = Key.isDown(Key.RIGHT) ? vx + (vx <= maxvel ? accel : 0) : Key.isDown(Key.LEFT) ? vx - (vx >= -maxvel ? decel : 0) : vx;
		vy = Key.isDown(Key.DOWN) ? vy + (vy <= maxvel ? accel : 0) : Key.isDown(Key.UP) ? vy - (vy >= -maxvel ? decel : 0) : vy;
	}
}

```

---

<div class="post-metadata">

**Author:** ![system](https://canada1.discourse-cdn.com/flex011/uploads/kirupa/original/3X/6/2/621e5c11736f46532526e61be85940af4230f3e5.png) [@system](https://forum.kirupa.com/u/system)\
**Post date:** [July 16, 2003, 3:07pm UTC](https://forum.kirupa.com/t/actionscript-tennis/25510/29 "2003-07-16T15:07:17Z")

</div>

OK, let’s clear up the rules. Putting several commands in the same line will not be admitted, because it ofuscates the code, and this completely defeats the whole line limitation thing. Everybody OK with that?

---

<div class="post-metadata">

**Author:** ![system](https://canada1.discourse-cdn.com/flex011/uploads/kirupa/original/3X/6/2/621e5c11736f46532526e61be85940af4230f3e5.png) [@system](https://forum.kirupa.com/u/system)\
**Post date:** [July 16, 2003, 3:14pm UTC](https://forum.kirupa.com/t/actionscript-tennis/25510/30 "2003-07-16T15:14:07Z")

</div>

> \*Originally posted by Ilyas \*  
> \*\*OK, let’s clear up the rules. Putting several commands in the same line will not be admitted, because it ofuscates the code, and this completely defeats the whole line limitation thing. Everybody OK with that? \*\*  
> …that said. here it is again.

```auto
/ **************** \
 * Volley #1
 * Author:	Ahmed
 * Date:	7/15
\ **************** /
StageDim = {width:Stage.width, height:Stage.height}; // Stage Dimensions (renamed by sen 7/15)
container = []; // contains circles created by createCircle
createCircle = function(i){
	clip = _root.createEmptyMovieClip("mc"+i, i); // create an empty clip to contain the circle
	clip.lineStyle(10+Math.random()*60, Math.random()*0x0000FF,10+Math.random()*50); // define random linestyle
	clip.lineTo(.15,.45); // draw circle (a very fat line)
	clip._x = Math.random()*StageDim.width; // position circle based on Stage Dimensions
	clip._y = Math.random()*StageDim.height; 
	container.push(clip); // add circle clip to container
}
for(i=0; i<15; i++) createCircle(i); // create 15 circles

/ **************** \
 * Volley #2
 * Author:	Senocular
 * Date:	7/15
\ **************** /

// create a clip at depth 100 as an "object layer" with more managable
// depths using ObjectLayer.depth++ to prevent overlapping
// in ObjectLayer create a spaceShip clip and define an outline for it
this.createEmptyMovieClip("ObjectLayer", 100).createEmptyMovieClip("spaceShip", ObjectLayer.depth++).outline = [[91,19],[31,-35],[-26,-20],[-76,-45],[-98,-43],[-60,-13],[-77,-4],[-76,9],[-58,15],[-31,15],[-53,47],[-20,43],[34,2],[75,20],[91,19]];
// drawOutlines: draws lines defined by points in an array in a movieclip
// allows optional lineStyle and fillStyle parameters
MovieClip.prototype.drawOutlines = function(points, lStyle, fStyle){
	if (lStyle != undefined) this.lineStyle.apply(this, lStyle); // apply linestyle if passed
	if (fStyle != undefined) this.beginFill.apply(this, fStyle); // apply fillstyle if passed
	for (var i=0; i<points.length; i++){ // cycle through all the points in the array
		if (i) this.lineTo(points*[0],points*[1]); // use a line if not the first point
		else this.moveTo(points*[0],points*[1]);} // otherwise, move to the point if the first
	if (fStyle != undefined) this.endFill(); // end the fill if passed
};
// defines 'ship' in this timeline and draws its outlines with specified line and fill
(ship = ObjectLayer.spaceShip).drawOutlines(ObjectLayer.spaceShip.outline, [2,0,100], [0xbfbfbf,100]);

/ **************** \
 * Volley #3
 * Author:	thoriphes
 * Date:	7/16
\ **************** /

with (ship) {
	accel = 1.01; 
	decel = 0.99; 
	maxvel = 10; 
	vx = vy = 0; 
	onEnterFrame = function(){
		this._x = -(_x += this.vx); 
		this._y = -(_y += this.vy);};}
Key.addListener(keyList = new Object());
keyList.onKeyDown = function () {
	with (ship) {
		vx = Key.isDown(Key.RIGHT) ? vx + (vx <= maxvel ? accel : 0) : Key.isDown(Key.LEFT) ? vx - (vx >= -maxvel ? decel : 0) : vx;
		vy = Key.isDown(Key.DOWN) ? vy + (vy <= maxvel ? accel : 0) : Key.isDown(Key.UP) ? vy - (vy >= -maxvel ? decel : 0) : vy;
	}
}

```

---

<div class="post-metadata">

**Author:** ![system](https://canada1.discourse-cdn.com/flex011/uploads/kirupa/original/3X/6/2/621e5c11736f46532526e61be85940af4230f3e5.png) [@system](https://forum.kirupa.com/u/system)\
**Post date:** [July 17, 2003, 9:12am UTC](https://forum.kirupa.com/t/actionscript-tennis/25510/31 "2003-07-17T09:12:25Z")

</div>

All righty, I’ll be checking out the file tonight :beam:

---

<div class="post-metadata">

**Author:** ![system](https://canada1.discourse-cdn.com/flex011/uploads/kirupa/original/3X/6/2/621e5c11736f46532526e61be85940af4230f3e5.png) [@system](https://forum.kirupa.com/u/system)\
**Post date:** [July 17, 2003, 9:13pm UTC](https://forum.kirupa.com/t/actionscript-tennis/25510/32 "2003-07-17T21:13:05Z")

</div>

I had to edit Ahmed’s createCircle function, it was a bit too specific… Am I allowed to do that?

---

<div class="post-metadata">

**Author:** ![system](https://canada1.discourse-cdn.com/flex011/uploads/kirupa/original/3X/6/2/621e5c11736f46532526e61be85940af4230f3e5.png) [@system](https://forum.kirupa.com/u/system)\
**Post date:** [July 17, 2003, 9:37pm UTC](https://forum.kirupa.com/t/actionscript-tennis/25510/33 "2003-07-17T21:37:31Z")

</div>

Pas de nouvelles, bonnes nouvelles :evil:

```auto
/ ****************
* Volley #1
* Author:	Ahmed
* Edit: pom ( makeCircle proto) 7/17
* Date:	7/15
**************** /
StageDim = {width:Stage.width, height:Stage.height}; // Stage Dimensions (renamed by sen 7/15)
container = []; // contains circles created by createCircle
MovieClip.prototype.makeCircle = function ( size, col, alpha ) {
	this.moveTo ( 0, 0 ) ;
	this.lineStyle ( size, col, alpha ) ;
	this.lineTo ( .45, .15 ) ;
}
for(i=0; i<15; i++) {
	clip = _root.createEmptyMovieClip("mc"+i, i);// create an empty clip to contain the circle
	clip.makeCircle (10+Math.random()*60, Math.random()*0x0000FF,10+Math.random()*50); // define random linestyle 
	clip._x = Math.random()*StageDim.width; // position circle based on Stage Dimensions
	clip._y = Math.random()*StageDim.height;
	container.push(clip); // add circle clip to container
}

/ ****************
* Volley #2
* Author:	Senocular
* Date:	7/15
**************** /

// create a clip at depth 100 as an "object layer" with more managable
// depths using ObjectLayer.depth++ to prevent overlapping
// in ObjectLayer create a spaceShip clip and define an outline for it
this.createEmptyMovieClip("ObjectLayer", 100).createEmptyMovieClip("spaceShip", ObjectLayer.depth++).outline = [[91,19],[31,-35],[-26,-20],[-76,-45],[-98,-43],[-60,-13],[-77,-4],[-76,9],[-58,15],[-31,15],[-53,47],[-20,43],[34,2],[75,20],[91,19]];
// drawOutlines: draws lines defined by points in an array in a movieclip
// allows optional lineStyle and fillStyle parameters
MovieClip.prototype.drawOutlines = function(points, lStyle, fStyle){
        if (lStyle != undefined) this.lineStyle.apply(this, lStyle); // apply linestyle if passed
        if (fStyle != undefined) this.beginFill.apply(this, fStyle); // apply fillstyle if passed
        for (var i=0; i<points.length; i++){ // cycle through all the points in the array
                if (i) this.lineTo(points*[0],points*[1]); // use a line if not the first point
                else this.moveTo(points*[0],points*[1]);} // otherwise, move to the point if the first
        if (fStyle != undefined) this.endFill(); // end the fill if passed
};
// defines 'ship' in this timeline and draws its outlines with specified line and fill
(ship = ObjectLayer.spaceShip).drawOutlines(ObjectLayer.spaceShip.outline, [2,0,100], [0xbfbfbf,100]);

/ ****************
* Volley #3
* Author:	thoriphes
* Date:	7/16
**************** /

with (ship) {
        accel = 1.01;
        decel = 0.99;
        maxvel = 10;
        vx = vy = 0;
        onEnterFrame = function(){
			this._x = -(_x += this.vx);
			this._y = -(_y += this.vy);
		};
}
Key.addListener(keyList = new Object());
keyList.onKeyDown = function () {
        with (ObjectLayer) {
                vx = Key.isDown(Key.RIGHT) ? vx + (vx <= maxvel ? accel : 0) : Key.isDown(Key.LEFT) ? vx - (vx >= -maxvel ? decel : 0) : vx;
                vy = Key.isDown(Key.DOWN) ? vy + (vy <= maxvel ? accel : 0) : Key.isDown(Key.UP) ? vy - (vy >= -maxvel ? decel : 0) : vy;
        }
}

/ ****************
* Volley #4
* Author:	pom
* Date:	7/17
**************** /
afterBurner = ship.createEmptyMovieClip("Afterburner",99); // container clip
col = 0xff0000 ; // base color of the flame
for ( var i = 0; i < 20 ; i++ ) {
	// We make a bunch of small clips that get red little by little
	var clip = afterBurner.createEmptyMovieClip ( "b" + i, i ) ;
	clip.makeCircle ( size = 5 + 10*Math.cos ( a+= .15 ), col += 0x001000, 20 ) ;
	clip.makeCircle ( size + 10, 0xffff00, 10 ) ;
	clip._x = -90 -3 * i ;
	clip._y = 5 ;
}
afterBurner.onEnterFrame = function () {
	// The afterburner is visible only when a key is pressed
	this._visible = Key.isDown(Key.UP) + Key.isDown(Key.DOWN) + Key.isDown(Key.RIGHT) ;
}

```

---

<div class="post-metadata">

**Author:** ![system](https://canada1.discourse-cdn.com/flex011/uploads/kirupa/original/3X/6/2/621e5c11736f46532526e61be85940af4230f3e5.png) [@system](https://forum.kirupa.com/u/system)\
**Post date:** [July 22, 2003, 1:40am UTC](https://forum.kirupa.com/t/actionscript-tennis/25510/34 "2003-07-22T01:40:16Z")

</div>

i’ll post my volley tonight 🙂

---

<div class="post-metadata">

**Author:** ![system](https://canada1.discourse-cdn.com/flex011/uploads/kirupa/original/3X/6/2/621e5c11736f46532526e61be85940af4230f3e5.png) [@system](https://forum.kirupa.com/u/system)\
**Post date:** [July 23, 2003, 12:22am UTC](https://forum.kirupa.com/t/actionscript-tennis/25510/35 "2003-07-23T00:22:14Z")

</div>

This is great. I just checked back here to see what everyone was up to and I find this jewel of a thread. Keep it up. I may pop in and “check out” the file myself. 🙂

-Al

---

<div class="post-metadata">

**Author:** ![system](https://canada1.discourse-cdn.com/flex011/uploads/kirupa/original/3X/6/2/621e5c11736f46532526e61be85940af4230f3e5.png) [@system](https://forum.kirupa.com/u/system)\
**Post date:** [July 23, 2003, 12:38pm UTC](https://forum.kirupa.com/t/actionscript-tennis/25510/36 "2003-07-23T12:38:02Z")

</div>

Long time no see, Al 🙂 I hope you find time the check out the file :beam:

---

<div class="post-metadata">

**Author:** ![system](https://canada1.discourse-cdn.com/flex011/uploads/kirupa/original/3X/6/2/621e5c11736f46532526e61be85940af4230f3e5.png) [@system](https://forum.kirupa.com/u/system)\
**Post date:** [July 24, 2003, 8:31am UTC](https://forum.kirupa.com/t/actionscript-tennis/25510/37 "2003-07-24T08:31:03Z")

</div>

> \*Originally posted by ahmed \*  
> \*\*i’ll post my volley tonight 🙂 \*\*  
> Hem… :sure:

---

<div class="post-metadata">

**Author:** ![system](https://canada1.discourse-cdn.com/flex011/uploads/kirupa/original/3X/6/2/621e5c11736f46532526e61be85940af4230f3e5.png) [@system](https://forum.kirupa.com/u/system)\
**Post date:** [July 24, 2003, 9:33am UTC](https://forum.kirupa.com/t/actionscript-tennis/25510/38 "2003-07-24T09:33:31Z")

</div>

aaah… sorry

i got side-tracked, i forgot about my volley ;(

if someone wants to check out the file, feel free to do so… if not, i’ll try to get mine in sometime these two days =)

---

<div class="post-metadata">

**Author:** ![system](https://canada1.discourse-cdn.com/flex011/uploads/kirupa/original/3X/6/2/621e5c11736f46532526e61be85940af4230f3e5.png) [@system](https://forum.kirupa.com/u/system)\
**Post date:** [July 27, 2003, 10:00pm UTC](https://forum.kirupa.com/t/actionscript-tennis/25510/39 "2003-07-27T22:00:10Z")

</div>

I’ve always wanted to try that bump feature…

---

<div class="post-metadata">

**Author:** ![system](https://canada1.discourse-cdn.com/flex011/uploads/kirupa/original/3X/6/2/621e5c11736f46532526e61be85940af4230f3e5.png) [@system](https://forum.kirupa.com/u/system)\
**Post date:** [July 31, 2003, 11:13am UTC](https://forum.kirupa.com/t/actionscript-tennis/25510/40 "2003-07-31T11:13:36Z")

</div>

Sorry i’m too late 😊

```auto
/ ****************
* Volley #5
* Author:	ahmed
* Date:	7/31
* Note:	run at 24 fps
**************** /

MovieClip.prototype.repel = function() {
	this.dist = Math.sqrt((this._x-ship._x)*(this._x-ship._x)+(this._y-ship._y)*(this._y-ship._y))
	if (this.dist<=_root.rad) {
		this.force = (_root.rad-this.dist)/30
		this._x = this._x+10*this.force*(this._x-ship._x)/this.dist
		this._y = this._y+10*this.force*(this._y-ship._y)/this.dist
	}
}
_root.rad = 150
for(i=0; i<container.length; i++) container*.onEnterFrame = function() { this.repel() }

```

[Previous page](https://forum.kirupa.com/t/actionscript-tennis/25510.md?page=1)

[Next page](https://forum.kirupa.com/t/actionscript-tennis/25510.md?page=3)
