Page 1 of 2 12 LastLast
Results 1 to 20 of 22
  1. #1
    hamChan is offline Member
    Join Date
    Jun 2013
    Posts
    18
    Rep Power
    0

    Default How to move all bullets when a key is pressed only once?

    Hi,
    Im making a simple shooting game just like Space Invader.

    The player creates a certain number of bullets(playerMP / bulletCost) when a fire button is pressed.
    A problem I'm struggling to solve is I want "all" the bullets move without keep pressing the button.
    once the fire button is pressed then move all the bullets.

    At this moment, I need to keep pressing the button for moving the bullets.

    For example, 10 bullets are created when a fire button is pressed.
    Then, only a few of them move and rest of them remain still. waiting for the button to be pressed again....

    Here is what Ive got so far.
    Java Code:
    public void run() {
    		while (true) {
    			move(); // move the player
    			player.update(); // update the player's conditions
    			playerAttack(); // player fires
    			moveShots();
    
    			repaint(); // repaint
    
    			// Stop
    			try {
    				Thread.sleep(20);
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    
    	private void playerAttack() {
    		if (attackPressed) {
    			// set player's state as "firing"
    			player.setCurState(ActionState.FIRING); // shows the player now is firing
    			Shot shot = new Shot(this);
    			// use all player's MP up to make shots
    			int shotNum = player.getCurrentMP() / shot.getCost();
    			for (int i = 0; i < shotNum; i++) {
    				if (player.getCurrentMP() >= shot.getCost()) {
    					player.comsumeMP(shot.getCost());
    					Shot newShot = new Shot(this);
    					shots.add(newShot);
    				}
    			}
    			// set the position of shots to player's position
    			for (int i = 0; i < shots.size(); i++) {
    				if (shots.get(i).isInStorage()) {
    					shots.get(i).setPos(
    							player.getPosX() + player.getWidth() / 4,
    							player.getPosY() + player.getHeight() / 4);
    					break;
    				}
    			}
    		}
    	}
    
    
    	private void moveShots(){ // use while(!shots.isEmpty) instead???
    		if (!shots.isEmpty()) { // if there any shots
    			for (int i = 0; i < shots.size(); i++) {
    				shots.get(i).move();// move the shots
    			}
    		}
    	}
    
    	public void keyPressed(KeyEvent e) {
    		int key = e.getKeyCode();
    
    		if (key == KeyEvent.VK_A) {
    			leftPressed = true;
    		}
    		if (key == KeyEvent.VK_D) {
    			rightPressed = true;
    		}
    		if (key == KeyEvent.VK_SPACE) {
    			attackPressed = true;
    		}
    	}
    
    	public void keyReleased(KeyEvent e) {
    		int key = e.getKeyCode();
    
    		if (key == KeyEvent.VK_A) {
    			leftPressed = false;
    		}
    		if (key == KeyEvent.VK_D) {
    			rightPressed = false;
    		}
    		if (key == KeyEvent.VK_SPACE) {
    			attackPressed = false;
    		}
    	}

  2. #2
    Norm's Avatar
    Norm is offline Moderator
    Join Date
    Jun 2008
    Location
    Eastern Florida
    Posts
    16,589
    Rep Power
    23

    Default Re: How to move all bullets when a key is pressed only once?

    Try using a Timer to change the bullets' positions every so often and then call the repaint() method for them to be drawn at their new positions.
    If you don't understand my response, don't ignore it, ask a question.

  3. #3
    hamChan is offline Member
    Join Date
    Jun 2013
    Posts
    18
    Rep Power
    0

    Default Re: How to move all bullets when a key is pressed only once?

    Quote Originally Posted by Norm View Post
    Try using a Timer to change the bullets' positions every so often and then call the repaint() method for them to be drawn at their new positions.
    I'm not sure if I understand what you mean correctly.
    Every time when moveShots() is called in while statement, it checks whether some bullets created. if so, all bullets should be moved.
    Java Code:
    private void moveShots(){ // use while(!shots.isEmpty) instead???
    		if (!shots.isEmpty()) { // if there any shots
    			for (int i = 0; i < shots.size(); i++) {
    				shots.get(i).move();// move the shots
    			}
    		}
    	}
    but according to the result I got, the bullets only move while a fire button is pressed.

    so I cannot really see the reason why a Timer needs to change the bullets' positions.
    sorry if I'm misunderstanding.
    Last edited by Norm; 11-22-2013 at 12:45 PM. Reason: added / to end tag

  4. #4
    Norm's Avatar
    Norm is offline Moderator
    Join Date
    Jun 2008
    Location
    Eastern Florida
    Posts
    16,589
    Rep Power
    23

    Default Re: How to move all bullets when a key is pressed only once?

    If moveShots() is called and it moves the bullets, then what is the problem?
    Is it called? Does it move the bullets?
    If you don't understand my response, don't ignore it, ask a question.

  5. #5
    gimbal2 is offline Just a guy
    Join Date
    Jun 2013
    Location
    Netherlands
    Posts
    3,083
    Rep Power
    4

    Default Re: How to move all bullets when a key is pressed only once?

    Quote Originally Posted by hamChan View Post

    so I cannot really see the reason why a Timer needs to change the bullets' positions.
    Lets pretend that the Timer class is actually called Repeater. Does that perhaps answer your question? Bullets tend to keep repeatedly moving in a certain direction until they hit something, after all.
    "Syntactic sugar causes cancer of the semicolon." -- Alan Perlis

  6. #6
    hamChan is offline Member
    Join Date
    Jun 2013
    Posts
    18
    Rep Power
    0

    Default Re: How to move all bullets when a key is pressed only once?

    Quote Originally Posted by Norm View Post
    If moveShots() is called and it moves the bullets, then what is the problem?
    Is it called? Does it move the bullets?
    Yes the moveShots() is being called and all the bullets move according to the direction I defined only "while" I press the fire button.

    The problem is,
    I want to prevent bullets from remain in shots(list of Shot) once the button is pressed.

    let's say if the fire button is pressed, 10 bullets will be created and stored in "shots" at playerAttack().
    when moveShots() is called, there 10 bullets to be move. However, not all of the bullets moved. Only a few of them will be moved.

    I just want press the button only once and move all created bullets. don't want to keep pressing it until all the bullets moved.

  7. #7
    Norm's Avatar
    Norm is offline Moderator
    Join Date
    Jun 2008
    Location
    Eastern Florida
    Posts
    16,589
    Rep Power
    23

    Default Re: How to move all bullets when a key is pressed only once?

    If moveShots() is called inside the loop, are the bullets moved every time moveShots() is called?

    I don't understand why the pressing of the button is required for the bullets to move if moveShots() is called every time around the loop.

    Can you make a small, complete program that compiles, executes and shows the problem?
    If you don't understand my response, don't ignore it, ask a question.

  8. #8
    hamChan is offline Member
    Join Date
    Jun 2013
    Posts
    18
    Rep Power
    0

    Default Re: How to move all bullets when a key is pressed only once?

    Quote Originally Posted by Norm View Post
    If moveShots() is called inside the loop, are the bullets moved every time moveShots() is called?

    I don't understand why the pressing of the button is required for the bullets to move if moveShots() is called every time around the loop.

    Can you make a small, complete program that compiles, executes and shows the problem?
    It seems not. I too dont really get the moveShots(). anyway, here is the whole program.

    Java Code:
    import java.awt.Container;
    import javax.swing.JFrame;
    public class ShotTest extends JFrame{
      public ShotTest(){
        setTitle("shot test");
        setResizable(false);    
        MainPanel panel = new MainPanel();
        Container contentPane = getContentPane();
        contentPane.add(panel);
        pack();
      }
      
      public static void main(String[] args){
        ShotTest frame = new ShotTest();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
      }
    }
    Java Code:
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import java.util.ArrayList;
    import javax.swing.JPanel;
    
    public class MainPanel extends JPanel implements Runnable, KeyListener {
    	// the panel size
    	public static final int WIDTH = 200; // the width of a panel
    	public static final int HEIGHT = 400; // the height of a panel
    
    	// the direction instance variables
    	private static final int LEFT = 0;
    	private static final int RIGHT = 1;
    
    	private Player player; // a player
    	private Shot shot;
    	private ArrayList<Shot> shots = new ArrayList<>();
    	private int maxShot = 10;
    
    	// Key conditions (use these conditions to control a player)
    	private boolean leftPressed = false;
    	private boolean rightPressed = false;
    	private boolean attackPressed = false;
    
    	private Thread gameLoop; // for a game loop thread
    
    	public MainPanel() {
    		setPreferredSize(new Dimension(WIDTH, HEIGHT));
    		setFocusable(true);
    
    		player = new Player(0, HEIGHT - 32);
    		shot = new Shot(this);
    
    		addKeyListener(this);
    		gameLoop = new Thread(this);
    		gameLoop.start();
    	}
    
    	private void move() {
    		// move a player
    		// when nothing is prssed, no movement
    		if (leftPressed) {
    			player.move(LEFT);
    		} else if (rightPressed) {
    			player.move(RIGHT);
    		} else {
    			player.stop();
    		}
    	}
    
    	public void run() {
    		while (true) {
    			move(); // move the player
    			player.update(); // update the player's conditions
    			playerAttack(); // player's attack
    			moveShots();
    
    			repaint(); // repaint
    
    			// Stop
    			try {
    				Thread.sleep(20);
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    
    	private void playerAttack() {
    		if (attackPressed) { // secret technique of magic is used
    			// set player's state as "firing"
    			player.setCurState(ActionState.FIRING);
    			Shot shot = new Shot(this);
    			// use all player's MP up to make magic shots
    			int shotNum = player.getCurrentMP() / shot.getCost();
    			// player can shoot only a limited number of shots
    			if (shotNum > maxShot) {
    				shotNum = maxShot;
    			}
    			System.out.println(shotNum); // max shotNum == 10
    			for (int i = 0; i < shotNum; i++) {
    				if (player.getCurrentMP() >= shot.getCost()) {
    					player.comsumeMP(shot.getCost());
    					Shot newShot = new Shot(this);
    					shots.add(newShot);
    				}
    			}
    			// set the position of shots to player's position
    			for (int i = 0; i < shots.size(); i++) {
    				if (shots.get(i).isInStorage()) {
    					shots.get(i).setPos(
    							player.getPosX() + player.getWidth() / 4,
    							player.getPosY() + player.getHeight() / 4);
    					break;
    				}
    			}
    		}
    	}
    
    
    	private void moveShots(){
    		if (!shots.isEmpty()) { // if there any magic shots
    			for (int i = 0; i < shots.size(); i++) {
    				shots.get(i).move();// move the shots
    			}
    		}
    	}
    
    	// Get  shots
    	public ArrayList<Shot> getShots() {
    		return shots;
    	}
    
    	public void paintComponent(Graphics g) {
    		super.paintComponent(g);
    
    		g.setColor(Color.BLACK);
    		g.fillRect(0, 0, getWidth(), getHeight());
    
    		player.draw(g); // draw a player
    		if (!shots.isEmpty()) { // iff there are some shots in list
    			for (int i = 0; i < shots.size(); i++) {
    				// draw a magic shot
    				shots.get(i).draw(g);
    			}
    		}
    		g.setColor(Color.GREEN);
    		g.drawString("The # of shots ["+shots.size()+"]", 10, 10);
    		g.drawString("Player's MP [" + player.getCurrentMP() + "]", 10, 25);
    		g.drawString("Shot's cost [" + shot.getCost() + "]", 10, 40);
    	}
    
    	public void keyTyped(KeyEvent e) {
    	}
    	public void keyPressed(KeyEvent e) {
    		int key = e.getKeyCode();
    
    		if (key == KeyEvent.VK_A) {
    			leftPressed = true;
    		}
    		if (key == KeyEvent.VK_D) {
    			rightPressed = true;
    		}
    		if (key == KeyEvent.VK_SPACE) {
    			attackPressed = true;
    		}
    	}
    	public void keyReleased(KeyEvent e) {
    		int key = e.getKeyCode();
    
    		if (key == KeyEvent.VK_A) {
    			leftPressed = false;
    		}
    		if (key == KeyEvent.VK_D) {
    			rightPressed = false;
    		}
    		if (key == KeyEvent.VK_SPACE) {
    			attackPressed = false;
    		}
    	}
    }
    Java Code:
    import java.awt.Color;
    import java.awt.Graphics;
    
    public class Player {
    	public static final int WIDTH = 32;
    	public static final int HEIGHT = 32;
    	private static final int SPEED = 6; // the player's movement speed
    
    	private static final int LEFT = 0; // direction instance variable
    	private static final int RIGHT = 1; // direction instance variable
    
    	private int mpRegenerate; // amount of MP to be regenerated
    	private int maxMP; // maximum magic point
    	private int currentMP; // current magic point
    
    	private double x; // the player's position (x-coordinate)
    	private double y; // the player's position (y-coordinate)
    
    	// speed rate
    	private double vx;
    	private double vy;
    
    	private ActionState currentSate; // current state
    
    	public Player(double x, double y) {
    		this.x = x;
    		this.y = y;
    
    		vx = 0;
    		vy = 0;
    		this.mpRegenerate = 3;
    		this.maxMP = 15;
    		this.currentMP = 10;
    		this.currentSate = ActionState.IDLING;
    	}
    
    	public void move(int dir) {
    		if (dir == LEFT) {
    			vx = -SPEED;
    		} else if (dir == RIGHT) {
    			vx = SPEED;
    		}
    		currentSate = ActionState.MOVING; // the player is moving
    	}
    
    	// Stop the player movement
    	public void stop() {
    		vx = 0;
    		if (currentSate != ActionState.FIRING) {
    			currentSate = ActionState.IDLING; // the player is in idle
    		}
    	}
    
    	public void update() {
    		x += vx;
    		y += vy;
    	}
    
    	public void draw(Graphics g) {
    		g.setColor(Color.GREEN);
    		g.fillRect((int) x, (int) y, WIDTH, HEIGHT);
    	}
    
    	public void setCurState(ActionState state) {
    		currentSate = state;
    	}
    
    	public void comsumeMP(int cost) {
    		int newMP = currentMP - cost;
    		currentMP = newMP;
    	}
    
    	public ActionState getCurSate() {
    		return currentSate;
    	}
    
    	public int getMPRegenRate() {
    		return mpRegenerate;
    	}
    
    	public int getCurrentMP() {
    		return currentMP;
    	}
    
    	public int getMaxMP() {
    		return maxMP;
    	}
    
    	public double getPosX() {
    		return x;
    	}
    
    	public double getPosY() {
    		return y;
    	}
    
    	public int getWidth() {
    		int width = WIDTH;
    		return width;
    	}
    
    	public int getHeight() {
    		int height = HEIGHT;
    		return height;
    	}
    }
    Java Code:
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Point;
    
    public class Shot {
    	private static final int WIDTH = 32;
    	private static final int HEIGHT = 32;
    	private static final int SPEED = 3;
    
    	// a storage where attack stored
    	private static final Point STORAGE = new Point(-40, -40);
    
    	// coordinates
    	private double x;
    	private double y;
    
    
    	private MainPanel panel; // reference to MainPpanel
    	private int cost; // magic cost
    
    	public Shot(MainPanel panel) {
    		this.x = STORAGE.x;
    		this.y = STORAGE.y;
    		this.panel = panel;
    		this.cost = 1;
    	}
    
    	public void move() {
    		if (isInStorage()) {
    			return; // do nothing
    		}
    		
    		y -= SPEED;
    		
    		if (y < 0) {
    			panel.getShots().remove(this);
    		}
    	}
    
    	public void draw(Graphics g) {
    		g.setColor(Color.BLUE);
    		g.fillRect((int) x, (int) y, WIDTH, HEIGHT);
    	}
    
    	public void setPos(double x, double y) {
    		this.x = x;
    		this.y = y;
    	}
    
    	public double getWidth() {
    		double width = WIDTH;
    		return width;
    	}
    
    	public double getHeight() {
    		double height = HEIGHT;
    		return height;
    	}
    
    	public Point getPos() {
    		return new Point((int) x, (int) y);
    	}
    
    	public int getCost() {
    		return cost;
    	}
    
    	public void store() {
    		x = STORAGE.x;
    		y = STORAGE.y;
    	}
    
    	public boolean isInStorage() {
    		if (x == STORAGE.x && y == STORAGE.x) {
    			return true;
    		}
    		return false;
    	}
    }
    Java Code:
    public enum ActionState {
    	IDLING, MOVING, TALKING, FIRING, ATTACKING, OPENING_MENU;
    }

  9. #9
    hamChan is offline Member
    Join Date
    Jun 2013
    Posts
    18
    Rep Power
    0

    Default Re: How to move all bullets when a key is pressed only once?

    Quote Originally Posted by gimbal2 View Post
    Lets pretend that the Timer class is actually called Repeater. Does that perhaps answer your question? Bullets tend to keep repeatedly moving in a certain direction until they hit something, after all.
    Repeater meaning methods will be repeatedly called over and over?

  10. #10
    Norm's Avatar
    Norm is offline Moderator
    Join Date
    Jun 2008
    Location
    Eastern Florida
    Posts
    16,589
    Rep Power
    23

    Default Re: How to move all bullets when a key is pressed only once?

    There are no comments in the code about how to test it.
    If you don't understand my response, don't ignore it, ask a question.

  11. #11
    jim829 is offline Senior Member
    Join Date
    Jan 2013
    Location
    United States
    Posts
    2,935
    Rep Power
    4

    Default Re: How to move all bullets when a key is pressed only once?

    First, you are not changing the coordinates of your bullet. So every time you press space, several get fired (but they are being drawn overlapping each other).
    Second, you have a design flaw. When I print out the size of the array list within the paintComponent method, it keeps printing zero prior to me typing a space.
    You should only call paintComponent when you have something to paint.

    Regards,
    Jim
    The Java™ Tutorial | SSCCE | Java Naming Conventions
    Poor planning our your part does not constitute an emergency on my part.

  12. #12
    gimbal2 is offline Just a guy
    Join Date
    Jun 2013
    Location
    Netherlands
    Posts
    3,083
    Rep Power
    4

    Default Re: How to move all bullets when a key is pressed only once?

    I'd say one method is called over and over; that one method is among other things responsible for updating the state of all 'living' objects in the game, such as updating their current location based on the direction and the speed at which the object is moving. I tend to call that method updateGameState().
    "Syntactic sugar causes cancer of the semicolon." -- Alan Perlis

  13. #13
    hamChan is offline Member
    Join Date
    Jun 2013
    Posts
    18
    Rep Power
    0

    Default Re: How to move all bullets when a key is pressed only once?

    Quote Originally Posted by jim829 View Post
    First, you are not changing the coordinates of your bullet. So every time you press space, several get fired (but they are being drawn overlapping each other).
    Second, you have a design flaw. When I print out the size of the array list within the paintComponent method, it keeps printing zero prior to me typing a space.
    You should only call paintComponent when you have something to paint.
    I think the coordinates of bullets is being changed when moveShots() is called.
    The condition inside of the method keeps returning true when some bullets still exist but, the remaining bullets wont move.
    I'm just showing the size for debugging at this moment so yes Ill do so once this thing gets solved.

  14. #14
    Norm's Avatar
    Norm is offline Moderator
    Join Date
    Jun 2008
    Location
    Eastern Florida
    Posts
    16,589
    Rep Power
    23

    Default Re: How to move all bullets when a key is pressed only once?

    How are you debugging the code? I use println()s to print out the values of variables as they are changed.
    What are the numbers the code prints out? It's useful to print an id string with numbers so the variables that the numbers came from can be identified.
    If you don't understand my response, don't ignore it, ask a question.

  15. #15
    jim829 is offline Senior Member
    Join Date
    Jan 2013
    Location
    United States
    Posts
    2,935
    Rep Power
    4

    Default Re: How to move all bullets when a key is pressed only once?

    Quote Originally Posted by hamChan View Post
    I think the coordinates of bullets is being changed when moveShots() is called.
    Okay. I now see that. I changed the speed to 35 so I could see the individual bullets. So you have the speed tied to the y coordinate. The larger the SPEED the faster the bullets go up. But this both stretches their spacing and slow them up. For example, say you are firing a gun, the bullet always travels the same speed. But rapid fire simply means the distance between bullets gets shorter, not that each one arrives at its target slower.

    But that is not the issue at hand. I believe this may be a thread problem. You have at least two threads running but I see no synchronization anywhere.

    Regards,
    Jim
    The Java™ Tutorial | SSCCE | Java Naming Conventions
    Poor planning our your part does not constitute an emergency on my part.

  16. #16
    hamChan is offline Member
    Join Date
    Jun 2013
    Posts
    18
    Rep Power
    0

    Default Re: How to move all bullets when a key is pressed only once?

    Quote Originally Posted by Norm View Post
    How are you debugging the code? I use println()s to print out the values of variables as they are changed.
    What are the numbers the code prints out? It's useful to print an id string with numbers so the variables that the numbers came from can be identified.
    still the same. I feel like I'm misunderstanding something.
    Showing values of variables surely helpful when you having troubles.
    By default, the number of player's MP is 10, the cost of shot is 1. These can be changed at each Player and Shot class.
    It might be late but run ShotTest class then the program will start. sorry for not mentioning.

  17. #17
    Norm's Avatar
    Norm is offline Moderator
    Join Date
    Jun 2008
    Location
    Eastern Florida
    Posts
    16,589
    Rep Power
    23

    Default Re: How to move all bullets when a key is pressed only once?

    What is supposed to happen when the program is executed? What does the user need to do to use the program?
    What should happen when the user does an action? What does happen that is wrong?

    Showing values of variables surely helpful when you having troubles.
    Yes, it should help you with your problem.
    If you don't understand my response, don't ignore it, ask a question.

  18. #18
    hamChan is offline Member
    Join Date
    Jun 2013
    Posts
    18
    Rep Power
    0

    Default Re: How to move all bullets when a key is pressed only once?

    um.. so you see 10 bullets will be created only when the user pressed Space button right?
    but you need to keep pressing the button till all of the 10 bullets go outside the game screen.

    The number of bullets now is so small that the time it takes to move all of them may not be long. but if the number gets for example 1000, the amount of time the user needs to keep press the Space button takes considerably long time.

    now that's what I dont want it. All bullets suppose to move "only once" the button is pressed. (not keep pressing).

    well I hope I make the point a bit clearer.

  19. #19
    Norm's Avatar
    Norm is offline Moderator
    Join Date
    Jun 2008
    Location
    Eastern Florida
    Posts
    16,589
    Rep Power
    23

    Default Re: How to move all bullets when a key is pressed only once?

    To see what the code is doing, you need to add some println() statements that print out the values of variables as the code executes so that you can see what the computer sees when the program executes.

    A hint for debugging: Assign every instance of the Shot class an id number. Add code to the draw() method that draws that number on the bullet so you can see which bullet is moving. Also include that bullet id number in all the println() statements so you know what the values of the variables are for each bullet. Add this to the Shot class:
    Java Code:
       static int cntr = 0;
       int id = cntr++;         //assign next id number to this Shot
    If you don't understand my response, don't ignore it, ask a question.

  20. #20
    hamChan is offline Member
    Join Date
    Jun 2013
    Posts
    18
    Rep Power
    0

    Default Re: How to move all bullets when a key is pressed only once?

    Quote Originally Posted by jim829 View Post
    Okay. I now see that. I changed the speed to 35 so I could see the individual bullets. So you have the speed tied to the y coordinate. The larger the SPEED the faster the bullets go up. But this both stretches their spacing and slow them up. For example, say you are firing a gun, the bullet always travels the same speed. But rapid fire simply means the distance between bullets gets shorter, not that each one arrives at its target slower.

    But that is not the issue at hand. I believe this may be a thread problem. You have at least two threads running but I see no synchronization anywhere.

    Regards,
    Jim
    yes that's what I'm planning to do. I'm still studying about threads so dont know many thing about it.
    figuring out simple solutions is hard.

Page 1 of 2 12 LastLast

Similar Threads

  1. How to set button to be pressed more than once
    By ajs1351 in forum New To Java
    Replies: 20
    Last Post: 12-04-2011, 06:53 AM
  2. Kep Pressed
    By mustachMan in forum New To Java
    Replies: 3
    Last Post: 03-01-2011, 08:07 PM
  3. get key pressed
    By prashant in forum Networking
    Replies: 1
    Last Post: 03-26-2009, 09:10 PM
  4. key pressed event
    By kavithas in forum New To Java
    Replies: 7
    Last Post: 12-10-2007, 02:01 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •