Forum Topic: Require fairly basic code quickly

(326 views • 28 replies)

This topic is 1 page long.

<< < > >>
None

rmbrstrongbad18

Reply To Post Reply & Quote

Posted at: 11/3/09 02:38 PM

rmbrstrongbad18 NEUTRAL LEVEL 06

Sign-Up: 12/23/05

Posts: 450

I was pretty sure I wouldn't need to refer to the Newgrounds forums for this project, but Actionscript is being more frustrating than I can handle at the moment.

Basically, this concerns using letters such as A and D; however, not when the key is held down. I know that if you, for example, wanted the character to move left with A, you would probably put:

onClipEvent(enterFrame){
if(Key.isDown(65)){
this._x-=20;
}
}

And things like that tend to work fine. However, what I can't get to work is letters by simply pushing a key rather than holding it down. So if I had a button and wanted to push the F key or something:

on(keyPress "<70>"){

would not work. Can someone please help me with this? Thanks in advance. =)


None

rmbrstrongbad18

Reply To Post Reply & Quote

Posted at: 11/3/09 04:46 PM

rmbrstrongbad18 NEUTRAL LEVEL 06

Sign-Up: 12/23/05

Posts: 450

Really need help with this, guys...


None

Schmastalukas

Reply To Post Reply & Quote

Posted at: 11/3/09 06:52 PM

Schmastalukas NEUTRAL LEVEL 17

Sign-Up: 10/22/07

Posts: 394

I think (about 75-80% sure maybeh?) that with keypress you can just do something like
on (keyPress "<A>") {
blahblahcodeblah
}

I never really got into keyPress though, so I might be wrong.

Winning = failing at failing
Failing at failing = failing
Therefore... Winning = failing

BBS Signature

Winking

Doomsday-One

Reply To Post Reply & Quote

Posted at: 11/3/09 07:20 PM

Doomsday-One EVIL LEVEL 10

Sign-Up: 10/28/05

Posts: 1,362

You need a boolean (true/false) value to keep tabs on whether the key is already down or not.

fkeyalreadydown = false; //sets up a variable
onClipEvent(enterFrame){
	if(Key.isDown(70)){
		if(fkeyalreadydown == false) { //only runs the code if the variable is false
			//do stuff here
			fkeyalreadydown = true; //changes the variable to true so that the code doesn't run next time
		}
	} else { //if the key is not down, do this
		fkeyalreadydown = false //changes the variable back to false so that the earlier code can run again
	}
}

Not the most efficient method, but it gets the job done well.
Please note, DO NOT say "if(Key.isDown(70)&&fkeyalreadydown==fal se)" (the '&&' means 'and', if you weren't aware). It's a common mistake, and the problem is that the 'else' statement can run even when the key is still down. You need two different 'if' statements (or convoluted work-arounds).

Doomsday-One, working on stuff better than preloaders.

By the way, I made the 'Create an Animated Sprite' preloader for Sprite TV 3!


None

rmbrstrongbad18

Reply To Post Reply & Quote

Posted at: 11/3/09 07:23 PM

rmbrstrongbad18 NEUTRAL LEVEL 06

Sign-Up: 12/23/05

Posts: 450

Not the most efficient method, but it gets the job done well.
Please note, DO NOT say "if(Key.isDown(70)&&fkeyalreadydown==fal se)" (the '&&' means 'and', if you weren't aware). It's a common mistake, and the problem is that the 'else' statement can run even when the key is still down. You need two different 'if' statements (or convoluted work-arounds).

Actually, that wasn't my problem, I've got that covered, but thanks anyway. And to the other person, I'll try that.


Resigned

Doomsday-One

Reply To Post Reply & Quote

Posted at: 11/3/09 07:45 PM

Doomsday-One EVIL LEVEL 10

Sign-Up: 10/28/05

Posts: 1,362

At 11/3/09 07:23 PM, rmbrstrongbad18 wrote: Actually, that wasn't my problem, I've got that covered, but thanks anyway. And to the other person, I'll try that.

I think you missed the point of my post. Flash doesn't have an in-built function for telling it when 'normal' keys are just pressed; it only works with the built-in key shortcuts (like RIGHT, LEFT, SPACE). Also, oddly enough, on(keyPress...) is declared true again if the key is held down for more than about a second, making it somewhat less useful.
By creating a variable, you can basically say "Is this key down? Yes. Was it down in the last frame? Yes. Then the code shall not run". This is exactly what you need to test whether a key has just been pressed.

Seriously, if you're after something that makes code run when the key is pressed, but not again until it is released and pressed again, use the code I posted.

Doomsday-One, working on stuff better than preloaders.

By the way, I made the 'Create an Animated Sprite' preloader for Sprite TV 3!


None

Fion

Reply To Post Reply & Quote

Posted at: 11/3/09 08:06 PM

Fion LIGHT LEVEL 34

Sign-Up: 08/21/05

Posts: 2,373

AS: Listeners by Sir-Davey


None

rmbrstrongbad18

Reply To Post Reply & Quote

Posted at: 11/3/09 08:09 PM

rmbrstrongbad18 NEUTRAL LEVEL 06

Sign-Up: 12/23/05

Posts: 450

At 11/3/09 06:52 PM, Schmastalukas wrote: I think (about 75-80% sure maybeh?) that with keypress you can just do something like
on (keyPress "<A>") {
blahblahcodeblah
}

I never really got into keyPress though, so I might be wrong.

Damn, that didn't work either. Thanks anyway, though. =)


None

rmbrstrongbad18

Reply To Post Reply & Quote

Posted at: 11/3/09 08:11 PM

rmbrstrongbad18 NEUTRAL LEVEL 06

Sign-Up: 12/23/05

Posts: 450


I think you missed the point of my post. Flash doesn't have an in-built function for telling it when 'normal' keys are just pressed; it only works with the built-in key shortcuts (like RIGHT, LEFT, SPACE). Also, oddly enough, on(keyPress...) is declared true again if the key is held down for more than about a second, making it somewhat less useful.
By creating a variable, you can basically say "Is this key down? Yes. Was it down in the last frame? Yes. Then the code shall not run". This is exactly what you need to test whether a key has just been pressed.

Seriously, if you're after something that makes code run when the key is pressed, but not again until it is released and pressed again, use the code I posted.

Alright, and again, thanks again, but that's not what I'm after, not really related to what I was asking for, but I realize it might've been easy to misinterpret, sorry for not being clear.


None

Kart-Man

Reply To Post Reply & Quote

Posted at: 11/3/09 08:15 PM

Kart-Man NEUTRAL LEVEL 27

Sign-Up: 01/07/07

Posts: 3,723

Event listeners are your friends.

var pressed:Boolean = false;
var keypresser:Object = new Object();
keypresser.onKeyDown = function() {
if (Key.getCode() == your key code number here && !pressed) {
//do something
pressed = true;
}
}
keypresser.onKeyUp = function() {
if (Key.getCode() == your key code number here) {
pressed = false;
}
}
Key.addListener(keypresser);

None

Doomsday-One

Reply To Post Reply & Quote

Posted at: 11/3/09 08:22 PM

Doomsday-One EVIL LEVEL 10

Sign-Up: 10/28/05

Posts: 1,362

At 11/3/09 08:11 PM, rmbrstrongbad18 wrote: Alright, and again, thanks again, but that's not what I'm after, not really related to what I was asking for, but I realize it might've been easy to misinterpret, sorry for not being clear.

Perhaps the reason that my code isn't working properly (if you've tried it) is that I neglected putting 'onClipEvent(load){' and '}' around the first line.

Pah, timeline coding all the way

If that isn't what you're after, you're going to have to give us a better idea of what you want.

Doomsday-One, working on stuff better than preloaders.

By the way, I made the 'Create an Animated Sprite' preloader for Sprite TV 3!


None

rmbrstrongbad18

Reply To Post Reply & Quote

Posted at: 11/3/09 08:27 PM

rmbrstrongbad18 NEUTRAL LEVEL 06

Sign-Up: 12/23/05

Posts: 450


Perhaps the reason that my code isn't working properly (if you've tried it) is that I neglected putting 'onClipEvent(load){' and '}' around the first line.
Pah, timeline coding all the way
If that isn't what you're after, you're going to have to give us a better idea of what you want.

Actually, I didn't try the code because it isn't really related to what I'm looking for at all. I need to be able to incorporate letters and other miscellaneous characters (other than the defaults like Shift, Enter, Up, Down, etc.) into buttons that begin with on(keyPress), so it would be something along the lines of:

on(keyPress "<65>"){

Basically, it works with "if(Key.isDown(65))" but doesn't work with "on(keyPress "<65>")

If you still don't understand what I mean, look at the person who responded to me first.


None

Fion

Reply To Post Reply & Quote

Posted at: 11/3/09 08:29 PM

Fion LIGHT LEVEL 34

Sign-Up: 08/21/05

Posts: 2,373

Hey look at that Kart-man and I have both given you the method you need to get the job done. Perhaps if you took a look you might solve your problem.


None

Doomsday-One

Reply To Post Reply & Quote

Posted at: 11/3/09 08:38 PM

Doomsday-One EVIL LEVEL 10

Sign-Up: 10/28/05

Posts: 1,362

At 11/3/09 08:27 PM, rmbrstrongbad18 wrote: Basically, it works with "if(Key.isDown(65))" but doesn't work with "on(keyPress "<65>")

As I explained, the keyPress code does not work with key codes. At all.
You cannot make it work with whatever key you want, only a strict few 'pre-set' keys.
Hence, you need to create your own function to deal with it.

The code I gave you will fit into your current code (if you remember the 'onClipEvent(load) {' and '}' around the first line), or you can follow Kart-Man's lead and learn about event listeners.
The listeners are better, if you learn them properly.

Doomsday-One, working on stuff better than preloaders.

By the way, I made the 'Create an Animated Sprite' preloader for Sprite TV 3!


None

rmbrstrongbad18

Reply To Post Reply & Quote

Posted at: 11/3/09 08:41 PM

rmbrstrongbad18 NEUTRAL LEVEL 06

Sign-Up: 12/23/05

Posts: 450

At 11/3/09 08:29 PM, Fion wrote: Hey look at that Kart-man and I have both given you the method you need to get the job done. Perhaps if you took a look you might solve your problem.

Well, I'm looking for something that helps...I want to be able to know what the code does and then use what's needed of it and apply it to what I need. To simplify things for me...what would I do in this situation: Say I wanted to push the A key and cause the scene to go to frame 65? Nothing else, just push the A key and go to frame 65 (Yes, it's just an example).


None

Kart-Man

Reply To Post Reply & Quote

Posted at: 11/3/09 08:54 PM

Kart-Man NEUTRAL LEVEL 27

Sign-Up: 01/07/07

Posts: 3,723

At 11/3/09 08:41 PM, rmbrstrongbad18 wrote:
At 11/3/09 08:29 PM, Fion wrote: Hey look at that Kart-man and I have both given you the method you need to get the job done. Perhaps if you took a look you might solve your problem.
Well, I'm looking for something that helps...I want to be able to know what the code does and then use what's needed of it and apply it to what I need. To simplify things for me...what would I do in this situation: Say I wanted to push the A key and cause the scene to go to frame 65? Nothing else, just push the A key and go to frame 65 (Yes, it's just an example).

Fion linked you to the AS: Listeners tutorial in AS: Main, which covers exactly what you have just asked. To answer your question though, you need to create a onKeyDown function that will cause the timeline to go to frame 65 when "A" (known as "65" in Flash keycode format) is pressed.

if (Key.getCode() == 65) {
gotoAndPlay(65);
}

Follow the tutorial (it has explanations too!) and you'll see how listeners work. In fact, Denvish's post right below the OP's is precisely what you need.


None

YoinK

Reply To Post Reply & Quote

Posted at: 11/3/09 09:13 PM

YoinK LIGHT LEVEL 53

Sign-Up: 01/05/01

Posts: 6,089

onClipEvent(enterFrame){
if(!Key.isDown(65)){
this._x-=20;
}

hmmm perhaps this is what you need? when the key code 65 button is released... it will do the action.
All you need to do is add the "!" symbol in front of Key.isDown.

Kanye West Did What??????
They should make a black guy the manager, they know how to run shit!
2 Girls 1 Cup .... THE SONG!!!!


None

grafik2d

Reply To Post Reply & Quote

Posted at: 11/3/09 10:34 PM

grafik2d NEUTRAL LEVEL 10

Sign-Up: 06/29/04

Posts: 164

Let see is this what you are after? (If it's not then you REALLY need to explain what you are looking for and read yourself to make sure it makes sense)

on (keyPress 'd') {
code
}

You can change d to any letter you want. Though I suggest you to: 1 stop coding from inside movie clips and buttons and 2 make a file using this code to get whatever key you are looking for.

var keyListener:Object = new Object();
keyListener.onKeyDown = function() {

if (Key.getCode() == Key.ENTER) {
trace ("Virtual key code: "+Key.getCode()+" (ENTER key)");
}
else {
trace("Virtual key code: "+Key.getCode());

}
};
Key.addListener(keyListener);

Thanks to our friends at Macromedia and the well documented help section for that code. By the way does anybody have problem with using keys like A and S while testing a swf in CS3, but only when you are working on the file?


None

hdxmike

Reply To Post Reply & Quote

Posted at: 11/4/09 05:34 AM

hdxmike LIGHT LEVEL 08

Sign-Up: 09/11/09

Posts: 1,746

At 11/3/09 09:13 PM, YoinK wrote: onClipEvent(enterFrame){
if(!Key.isDown(65)){
this._x-=20;
}

hmmm perhaps this is what you need? when the key code 65 button is released... it will do the action.
All you need to do is add the "!" symbol in front of Key.isDown.

Oh yoink you dummy , ! is for when its not pressed down so if your not pressing a that code will continue to run :P

Anyway to the OP everything you want has already been given to you if its not easy to follow its your fault not theirs .

OOP AS3 || Flash 8,CS3,CS4 || *sigh* || one month of sarcasm !

BBS Signature

None

Yambanshee

Reply To Post Reply & Quote

Posted at: 11/4/09 08:16 AM

Yambanshee DARK LEVEL 11

Sign-Up: 10/05/08

Posts: 1,582

another thing people have neglegted to add is:
Key.getCode() traces the key code (numbers) if the key that has been pressed so:

if(Key.getCode() == 65)
is the same as
if(Key.isDown(65))

AS2||AS3||Motox
Thanks to hdxmike for the sig :]

BBS Signature

None

rmbrstrongbad18

Reply To Post Reply & Quote

Posted at: 11/4/09 04:56 PM

rmbrstrongbad18 NEUTRAL LEVEL 06

Sign-Up: 12/23/05

Posts: 450

Gah...Nothing works still...alright, can I get the exact code, for anyone who wants to...the exact code, not an excerpt from it...of how I would do this? To be somewhat more specfic, I need it so that if someone were holding down A, and pushed F, it would go to a certain frame. For example:

if(keyPress "<F>"){
if(Key.isDown(65)){
gotoAndPlay(6);
}
}

The reason I'm being more specific now is because I was hoping if someone could give me the code exactly as I would need it (or as close to exactly as possible since I'm still being sort of vague) then it would help me make sense of it more and I'd be able to understand it better, as trying to interpret the code as it's written in the tutorial and twist it to apply to different situations isn't working for me right now. Thanks to everyone who's still with me.


None

rmbrstrongbad18

Reply To Post Reply & Quote

Posted at: 11/4/09 05:56 PM

rmbrstrongbad18 NEUTRAL LEVEL 06

Sign-Up: 12/23/05

Posts: 450

At 11/4/09 04:56 PM, rmbrstrongbad18 wrote:

:I need it so that if someone were holding down A, and pushed F

I meant if they pushed F while they were holding down A by the way


None

Doomsday-One

Reply To Post Reply & Quote

Posted at: 11/4/09 06:45 PM

Doomsday-One EVIL LEVEL 10

Sign-Up: 10/28/05

Posts: 1,362

At 11/4/09 04:56 PM, rmbrstrongbad18 wrote: if(keyPress "<F>"){
if(Key.isDown(65)){
gotoAndPlay(6);
}
}

Ah, I see.

Right, I'm going to teach you how to do it on a movie clip, as that seems to be the kind of code that you're used to.
You're more than welcome to learn key listeners (and I recommend it), but don't get fooled into thinking that it is the best technique. Key listeners 'activate' every time any key is pressed and is independent of the frame rate. This can be great sometimes! But one big disadvantage is that it doesn't continue to perform a function if a key is held down (this property alone can't be used for your keyPress function as the code will still occur if they key is held down and any other key is pressed). Hence, you need need to pass values to your onEnterFrame or onClipEvent(enterFrame) code and by that point your code may have gotten unnecessarily bloated.
Basically, choose wisely.

Right, code (put this on a movie clip; you know what to do):

onClipEvent(load) {	//activates only once, when the movie clip appears on the stage
					//note, if you already have one of these on the movie clip, just put the below line of code in your other one
	var fkeypressed:Boolean = false; //creates a variable we will use to hold the current state of the 'f' key
}
onClipEvent(enterFrame) {	//activates once per frame
							//again, if you already have one, just put the below code in that instead of making a new one
	if(Key.isDown(70)) { //checks if the 'f' key (70) is being held down
		if(fkeypressed == false) { //checks whether the 'f' key had already been pressed using the variable
			fkeypressed = true; //if it hadn't already been pressed, change the variable to tell it that it has now been pressed
			if(Key.isDown(65)) { //checks if the 'a' key (65) is being held down
				trace("You are holding down the 'a' key and have pressed the 'f' key"); //this shows that it works; remove it once you are done testing
				gotoAndPlay(6); //you know what this does
			} //end of 'a' test
		} //end of 'fkeypressed' test
	} else { //executes only if the 'f' key is not being held down; that is to say that it is 'up'
		fkeypressed = false; //changes the variable back to false so that the key can be pressed again
	}
}

I've checked, and that works. Put it on a movie clip, hold down 'a', and hold down 'f', and the 'trace' code I put in there will only run once. Release 'f', press it again, and it traces again.
To make code that runs if 'a' is down only, either do it the simple way by putting that code separate to this, or mess about with the order of these 'if' statements (not recommended until you fully understand the concept).
Also note that if you very quickly tap the 'f' key, you may find that it won't register. That is because you held the key down for less than a frame, and so it didn't realise it was down at all. Such problems can be addressed by using listeners (or a greater frame rate).
I hope you can understand how that all works. If not, try using 'trace' statements and see what happens when you do different things.

Doomsday-One, working on stuff better than preloaders.

By the way, I made the 'Create an Animated Sprite' preloader for Sprite TV 3!


None

rmbrstrongbad18

Reply To Post Reply & Quote

Posted at: 11/4/09 09:41 PM

rmbrstrongbad18 NEUTRAL LEVEL 06

Sign-Up: 12/23/05

Posts: 450

I've checked, and that works. Put it on a movie clip, hold down 'a', and hold down 'f', and the 'trace' code I put in there will only run once. Release 'f', press it again, and it traces again.
To make code that runs if 'a' is down only, either do it the simple way by putting that code separate to this, or mess about with the order of these 'if' statements (not recommended until you fully understand the concept).
Also note that if you very quickly tap the 'f' key, you may find that it won't register. That is because you held the key down for less than a frame, and so it didn't realise it was down at all. Such problems can be addressed by using listeners (or a greater frame rate).
I hope you can understand how that all works. If not, try using 'trace' statements and see what happens when you do different things.

Thanks a lot doomsday, for dedicating your time to my thread and my idiocy on the subject. At first I was thinking that since it said "Key.isDown" it required that the key was down for it to work, when I need it to be pressed...then I looked at the rest of the code and it seemed like it was there to stop it from functioning after it was pressed, so it was the equivalent of just being pressed as opposed to being held down. I'm gonna try this code and see if it works, thanks! Although, if you can't tap the button continously and have it work each time, that might be a problem, but I'll get to that later. Thanks!


None

rmbrstrongbad18

Reply To Post Reply & Quote

Posted at: 11/5/09 03:06 PM

rmbrstrongbad18 NEUTRAL LEVEL 06

Sign-Up: 12/23/05

Posts: 450

Also note that if you very quickly tap the 'f' key, you may find that it won't register. That is because you held the key down for less than a frame, and so it didn't realise it was down at all. Such problems can be addressed by using listeners (or a greater frame rate).
I hope you can understand how that all works. If not, try using 'trace' statements and see what happens when you do different things.

When you said you checked the code and it worked...did you flash told you there were no errors in the script, or did you actually test the movie? Because I tried it and the script was fine, and it even traced properly, but for some reason didn't go to the frame.


Questioning

Doomsday-One

Reply To Post Reply & Quote

Posted at: 11/5/09 06:01 PM

Doomsday-One EVIL LEVEL 10

Sign-Up: 10/28/05

Posts: 1,362

At 11/5/09 03:06 PM, rmbrstrongbad18 wrote: When you said you checked the code and it worked...did you flash told you there were no errors in the script, or did you actually test the movie? Because I tried it and the script was fine, and it even traced properly, but for some reason didn't go to the frame.

I tested it on a single frame movie clip, relying on the trace() statement to tell me whether it was working or not.
I just tried it on a multiple framed movie clip, and it worked fine. Remember, if you want to go to a different frame on the main timeline, you use '_root.gotoAndPlay(6)'. Other than that, the only problems I can possibly see are:
The movie clip doesn't have a 6th frame (an embarrassing but easy to make error)
There is code later in your script which sends the movie clip to a different frame
There is code on the sixth frame which sends the movie clip to a different frame
You accidentally mistyped the gotoAndPlay() statement

Check all these, and try again. If it still doesn't work, try it on a different movie clip with no other code. It works perfectly on my computer without me changing it at all.

At 11/4/09 09:41 PM, rmbrstrongbad18 wrote: Although, if you can't tap the button continously and have it work each time, that might be a problem

If you look at the last bit of the code (the 'else' bit), you'll see why it works multiple times. That bit is basically saying "if the 'f' key is no longer down (i.e. Key.isDown(65) is false), return the variable to how it was at the very beginning (essentially resetting the pressing thing)". This means that the next time the 'f' key is pressed, it works once again, and then the variable gets changed back to true to stop it working again. And again, when 'f' is released, the variable gets changed to false to make it work again, and so on.

Doomsday-One, working on stuff better than preloaders.

By the way, I made the 'Create an Animated Sprite' preloader for Sprite TV 3!


None

rmbrstrongbad18

Reply To Post Reply & Quote

Posted at: 11/6/09 03:04 PM

rmbrstrongbad18 NEUTRAL LEVEL 06

Sign-Up: 12/23/05

Posts: 450

If you look at the last bit of the code (the 'else' bit), you'll see why it works multiple times. That bit is basically saying "if the 'f' key is no longer down (i.e. Key.isDown(65) is false), return the variable to how it was at the very beginning (essentially resetting the pressing thing)". This means that the next time the 'f' key is pressed, it works once again, and then the variable gets changed back to true to stop it working again. And again, when 'f' is released, the variable gets changed to false to make it work again, and so on.

Thanks, I'll try that, but just to be reassurred...this DOES mean that you can have two "if(Key.isDown)" codes, right?

Like:

if(Key.isDown(80)){
if(Key.isDown(65)){
//conditions
}
else if(Key.isDown(68)){
//next conditions
}
}

Basically saying that the first conditions happen if A is held down while F is held down, and the next conditions happen if D is held down while F is held down?


None

hdxmike

Reply To Post Reply & Quote

Posted at: 11/6/09 03:53 PM

hdxmike LIGHT LEVEL 08

Sign-Up: 09/11/09

Posts: 1,746

At 11/6/09 03:04 PM, rmbrstrongbad18 wrote: Basically saying that the first conditions happen if A is held down while F is held down, and the next conditions happen if D is held down while F is held down?

Happy Birthday , now you can go script GTA4 !

OOP AS3 || Flash 8,CS3,CS4 || *sigh* || one month of sarcasm !

BBS Signature

None

Doomsday-One

Reply To Post Reply & Quote

Posted at: 11/6/09 07:00 PM

Doomsday-One EVIL LEVEL 10

Sign-Up: 10/28/05

Posts: 1,362

At 11/6/09 03:04 PM, rmbrstrongbad18 wrote: Like:

if(Key.isDown(80)){
if(Key.isDown(65)){
//conditions
}
else if(Key.isDown(68)){
//next conditions
}
}

Basically saying that the first conditions happen if A is held down while F is held down, and the next conditions happen if D is held down while F is held down?

That actually says "If P is down ('F' has key code 70, not 80) and A is down, first code block. If P is down and D is down and A is NOT DOWN (the else statement makes that happen, a plain 'if' would mean that it didn't matter if A was down or not ), second code block.
Otherwise, yes. And you give as many as you like 'press' variables.

Doomsday-One, working on stuff better than preloaders.

By the way, I made the 'Create an Animated Sprite' preloader for Sprite TV 3!


All times are Eastern Standard Time (GMT -5) | Current Time: 06:48 AM

<< Back

This topic is 1 page long.

<< < > >>
You need a Grounds Gold Account to post on the NG BBS! If you don't have one, click here to sign up now! It's fast, free, and easy — and opens up tons of great NG features!