Front Office Football Central  

Go Back   Front Office Football Central > Main Forums > Dynasty Reports
Register FAQ Members List Calendar Mark Forums Read Statistics

Reply
 
Thread Tools
Old 03-09-2019, 02:52 PM   #1
GoldenCrest Games
High School Varsity
 
Join Date: Jul 2016
Thumbs up The Saunders Project (New football game dev log)

Now that Desktop Dynasties is officially released, it's time to start on the next project! I'm sticking to football since I learned a lot during the development of DD. I don't want to lose all that by waiting too long.

My process is very much "figure it out as I go", so dynasties work pretty well to look back on later. Also, I've been doing a lot of streaming on YouTube and posting on twitter but I've found that a good old-fashioned forum is really the way to go.

Plan for the Saunders Project:
  • Overall, the game is going to be a "Coaching RPG" with full college and professional league play.
  • 100% coach-mode.
  • Start at the bottom of the college league with a rookie coach, and develop your way to the top of the college/pro league. (hiring, firing, etc)
  • Integrated play and playbook designer. Somehow this is going to be based on your coaching skills.
  • Use the same basic visual in-game engine style as DD. 3D players, bright colors, bordering on "toon" style. (not the gritty realistic style a lot of the 3D engines are using)
  • 11-on-11 instead of the 8-on-8 game DD uses.
  • Not a tabletop game setting like DD. Make the players actual humans.
  • Multiplayer (most likely import/export system)
  • I will adjust the NFL/NCAA rules a bit to make the game a little more fun. There are a lot of things that annoy me about football, and I get to fix them now. (example: I hate penalties, so no penalties!)

My goal is to have something ready for Early Access by 4th of July weekend. Full launch before the college football season kicks off. (assuming I don't go broke and have to get a job before then)

First up, play creator!
__________________
Live Chat!
YouTube Channel

GoldenCrest Games is offline   Reply With Quote
Old 03-09-2019, 08:18 PM   #2
GoldenCrest Games
High School Varsity
 
Join Date: Jul 2016
Thumbs up

So here's where the week starts. I've got the shell of the play editor done. I can design offensive and defensive plays, but that's about it. No save/loading, and the real-time engine doesn't run them yet. (because it isn't written yet!)



This time around I'm going to make the play editor first, and then build out the real-time engine from this screen. This strategy will allow me to develop/test very specific things in the engine without having anything else to worry about. If I want to test 5-wide QB pass progressions, I just put a 5-wide play together and run it against a bunch of different defenses. If I want to run bubble screens against an all-out blitz, just draw it up and run it. Don't even need to have any playbook logic done! Heck, I don't even need the final list of player rating. I just need the ratings for what I'm testing.

I'm also looking into a new interface style. I have a couple ideas, but I'm not ready to commit yet. That's why the interface is still Unity default.

Hopefully, progress on this feature is fast and furious. I want to have it up and running by the end of next week. (including the ability to run plays from this screen) After that, the focus will be on getting the real-time engine/AI completed so the list of players ratings can be finalized. That's where the fun part is.
__________________
Live Chat!
YouTube Channel
GoldenCrest Games is offline   Reply With Quote
Old 03-11-2019, 08:22 AM   #3
GoldenCrest Games
High School Varsity
 
Join Date: Jul 2016
Thumbs up

It looks like all the tools works in the play creator now. Had to do some serious debugging because the previous version of the play creator wasn't designed to have both offense and defense on the field at the same time. That's a lot of variable management!

As you can see here, both offense and defense can be constructed simultaneously.



Few things to note here: (so you know what you're looking at as we keep progressing)
  • Circles under the offensive and defensive lines let you know what each player is doing. The o-line is pass blocking, so they get the blue. Run blocking is red. The DE are pass rushing, while the DT are run rushing. (I'm not settled on the actual colors yet, but that's how the system works)
  • CBs are in man defense. Their positioning isn't representative of who they are covering, though. The AI matches up man defenders on the appropriate receivers before the snap. If I were to run this play, there are a bunch of pre-snap reads that happen before I'm allowed to snap the ball.
  • Outside LBs are in zone defense. It's different than than the FS zone because the FS has an arrow at the top of his zone. That means he has deep zone responsibility while the LBs only cover the assigned zone depth.
  • One new feature that isn't in DD is the MLB with the small blue circle. He's in "Spy" defense on the QB. That's a new wrinkle added to defense due to the success of running QBs in DD.

  • On offense, we're running a screen to WR1, with the WR on the opposite side as a bailout option. The dark green routes are screen blocking routes. This system works the same for running. Red routes are where the runner is supposed to go, while dark red means a lead block.

  • If you ever see a white route, that's a non-AI route. (decoy receiving route or QB drop route) All that means is there is nothing for that player to do while he's running.
Some of the colors may change on receiver progressions, pass/run rush, and pass/run block. I'm pretty locked in on the rest.

That's the basics of the play creator visuals. Let me know if anything is unclear as I start progressing through this system.

Now let's see if we can get these guys actually playing out the play!
__________________
Live Chat!
YouTube Channel
GoldenCrest Games is offline   Reply With Quote
Old 03-11-2019, 10:52 AM   #4
GoldenCrest Games
High School Varsity
 
Join Date: Jul 2016
This just in: Making plays takes a while, and I should have a save/load system in place before I start testing the real-time engine.

oops!
__________________
Live Chat!
YouTube Channel
GoldenCrest Games is offline   Reply With Quote
Old 03-11-2019, 02:24 PM   #5
GoldenCrest Games
High School Varsity
 
Join Date: Jul 2016
Thumbs up

Well, that didn't take nearly as long as I thought it would....

Plays can be saved/loaded/edited/re-saved and then loaded into the game engine for testing. I only have OL and DL logic implemented so far, but it's running the play as intended.



I guess we can start moving things up, now that I have 4 free days in the schedule. Let's see if we can get ALL the real-time player AI and at least a draft of the interface done this week!

It shouldn't be too hard to get the AI done, since I'm using many of the same basic ideas as the previous (Iverson) engine. I've refined the AI to be a lot faster and more efficient, but much of the logic is the same. I know I was talking big about going to a steering system for the AI a few weeks ago. After prototyping it, I realized it wasn't going to be any better than the point-cloud system I'm using now. I decided to stick with the point cloud system and refine it to be faster, rather than start all over with something new. Afterall, this will be my 3rd engine using the point-cloud. I'm sure I can make it better than ever!
__________________
Live Chat!
YouTube Channel
GoldenCrest Games is offline   Reply With Quote
Old 03-13-2019, 09:46 AM   #6
GoldenCrest Games
High School Varsity
 
Join Date: Jul 2016
Thumbs up

Did a quick stream to lay some tape on the play creator and ball physics.

GoldenCrest Games Live Stream - YouTube

I'm working on getting pass arc and speed right. One thing I learned in DD was that I need to have a system that allows me to vary the pass height/speed more effectively, so I can have more interesting throws. (like the endzone back corner lob) I'm trying out a new system that lets me change the throw angle, and it looks pretty good so far. (towards the end of the video)

Today I want to lock down all the major throwing code. If I can always hit receivers in stride, no matter the distance or receiver speed, the rest of the passing game should be easy. Adding throw error or reading openness is straight forward, and easy to adjust without breaking anything. Getting the throw on target is unexpectedly hard.
__________________
Live Chat!
YouTube Channel
GoldenCrest Games is offline   Reply With Quote
Old 03-13-2019, 04:09 PM   #7
GoldenCrest Games
High School Varsity
 
Join Date: Jul 2016
Thumbs up

I think I finally got the receiver targeting to work. I fried my brain in the process, but it looks like I'm within a half-yard accuracy on all throws, with the whole range of receiver speed. That's pretty good considering how much of it is estimation of the amount to lead the receiver.

I didn't get as far as I wanted today, but at least the hard part is done. I'll hit it hard tomorrow and see if I can catch up.
__________________
Live Chat!
YouTube Channel
GoldenCrest Games is offline   Reply With Quote
Old 03-14-2019, 07:57 AM   #8
GoldenCrest Games
High School Varsity
 
Join Date: Jul 2016
Thumbs up

Here's the plan for today. (somewhat stream of consciousness)

Need to get the QB to read if a receiver is open or not, and then make the throw. To do that, I need to get the following systems in place:
  • QB cycle through his passing progression. I'm going to use the same system as DD for this. In the play creator a receiver is given a progression number 1-5. Need to have the QB cycle through and come back to the 1 read when he's done.
  • Need to have a way for the QB to stay on a read for some amount of time, probably dependent on pass skill. I'll use a modified version of the DD system for this. Great QBs should cycle through progressions faster than bad QBs, so there needs to be a timer system that is based on passingSkill.
  • When a QB is on a read, he needs to do a "is he open" determination, so that needs to be created. I don't want to do this every frame, so this will also be based on a timer. Probably the decision timer. (different than the progression timer)
  • I can't have perfect read recognition this time, so there needs to be some sort of "incorrect" reads. I'm thinking of normal read error, some sort of gunslinger/confidence override for the QB, something that lets you force the ball to superstar WRs who have bad defenders covering them, ...... I think that's it. Error override, QB override, and WR override. Not sure how this gets implemented, though.
  • Need a system to allow the QB to pull down and run. I don't love the DD system, so I need to think of something else. Ideally I would have QBs with a lot of running ability take off earlier than the statues. I don't want the pocket passers just sitting there until they get killed, though. I also don't need pocket passers taking off running, only to get demolished by a waiting LB and then ending up injured. I probably need to implement a "throw the ball away" system this time. Maybe when the pocket timer runs out, there's a check to see if scrambling is viable. If not, just throw it away.
  • Throwing system is done, so that's good.
  • Probably need to set up the "in air adjustment" system for receivers and defenders. After the ball is thrown, start the adjustment timer for everyone else to see who can adjust to the ball while it's in the air.
  • Set the ball to kill the play when it hits the ground. I'll save catching for another time, after defense AI is implemented.

After all this is written, I'll have to do another stream to lay it down on tape. There's no defense, so I'll have to fake the funk a little bit on openness reads. That's easy enough to do.
__________________
Live Chat!
YouTube Channel
GoldenCrest Games is offline   Reply With Quote
Old 03-15-2019, 08:20 AM   #9
GoldenCrest Games
High School Varsity
 
Join Date: Jul 2016
Thumbs up

I went down a little bit of a rabbit hole yesterday on passing, but it's looking pretty good right now. The gunslinger options aren't quite right, but all the systems are in place. It should be easier to fine-tune those when we see how the QB reacts to live defense. Speaking of which, it's defense day!

Right now I'm working on man coverage, and the biggest problem to solve from the Iverson engine is how the CB positions himself in coverage. Iverson uses man defense skill and sets a "coverage error" based off the ideal coverage position. It kinda works, but I don't love it. I want the CB to pick a coverage style on his own, and have his skills only affect his reaction time and ability to defend/intercept the ball. I can't see a real reason to have coverage skill determine where he's positioning himself. That means I need a new AI to figure out where to aim at when covering a receiver.



I think I've narrowed it down to two basic cover styles. What I'm calling Over and Between. I want the decision to be fairly simple, so I ditched a lot of complex cover schemes. The last thing I want is for this system to be complex and buggy. I think if I have the CB pick the most appropriate cover style based on the route/positioning, it should be enough to provide some quality pass defense. I'd use a ratio of vertical and horizontal direction in relation to the QB to determine the final positioning style

Over:
Receiver is running vertically towards the QB
Receiver is running horizontally towards the QB

Between:
Receiver is running vertically away from the QB
Receiver is running horizontally away from the QB

Idk, it seems like this should work. I'll probably make that function stand on its own so I can change it easily once we get to play testing.
__________________
Live Chat!
YouTube Channel
GoldenCrest Games is offline   Reply With Quote
Old 03-16-2019, 05:21 PM   #10
LastWhiteSoxFanStanding
College Starter
 
Join Date: Jun 2003
Looking forward to this!!
LastWhiteSoxFanStanding is offline   Reply With Quote
Old 03-18-2019, 01:44 PM   #11
GoldenCrest Games
High School Varsity
 
Join Date: Jul 2016
Thumbs up

Lots of nitpicky stuff to get done before any real progress on the engine can be done. I really needed to put some time into the play creator screen to get everything working correctly. At least now I have something that's fairly stable, and transfers all the correct information to the engine.

Once I got all that done, it became obvious that my pocket movement AI was totally messed up. The QB would never get to his drop correctly, and would do some freaking out before finally throwing the ball to some random receiver. In the end, it was a mismatch between the distance a player moves in a frame, and the distance we count as being at his target. The move distance was more than the arrival distance, so the QB was just bouncing back and forth over his move target. ugh, dumb error.....

Once that was fixed, everything started working a lot better. I have a basic man defense AI in there, so the QB has something to read receiver openness against. Right now the QBs are still too good at reading defense. I'll have to find a good way to add a little more gunslinger into the mix.

In this shot, the QB was on his 4th read before he found the open receiver streaking up the middle.



I think there's enough here for me to spend a decent amount of time getting this AI right, before moving on to more AI. The things I want to lock in are:
  • All the QB passing AI (reading and throwing)
  • Receiver and defender adjustment to the ball while it's in the air
  • Pass blocking
  • Pass rushing
  • Man defense positioning and reaction
  • Various pathfinding

Also, the snow is finally melting so I can get out and work off some of this belly!
__________________
Live Chat!
YouTube Channel
GoldenCrest Games is offline   Reply With Quote
Old 03-18-2019, 04:01 PM   #12
SirBlurton
High School Varsity
 
Join Date: Feb 2007
Whelp, had gotten used to looking on Discord for news and missed this - good luck, off to a great start!
SirBlurton is offline   Reply With Quote
Old 03-18-2019, 04:20 PM   #13
GoldenCrest Games
High School Varsity
 
Join Date: Jul 2016
Ah! Sorry! I'm not great at staying consistent in my media.
__________________
Live Chat!
YouTube Channel
GoldenCrest Games is offline   Reply With Quote
Old 03-18-2019, 04:24 PM   #14
GoldenCrest Games
High School Varsity
 
Join Date: Jul 2016
There really is a reason I posted the dynasty here. For the beta/alpha program, I'm going to run it exclusively through a multiplayer league. As I looked around, I figured that this was the best audience for something like that. The OS forums are a little intense, and twitter is a little too random.
__________________
Live Chat!
YouTube Channel
GoldenCrest Games is offline   Reply With Quote
Old 03-19-2019, 09:01 AM   #15
GoldenCrest Games
High School Varsity
 
Join Date: Jul 2016
Thumbs up

Waiting for my build to get completed and dropboxed over to the streaming computer, so there''s some time for a chat....

Let's talk about "potential" and scouting.

There are a lot of things I don't like about nearly every sports sim out there when it comes to potential and scouting. I tried to eliminate potential in DD, but that's didn't work as well as I'd hoped either. While out running through the snow yesterday, I think I landed on a good system!

First, let's go through the thought process in case I change my mind again later.

The potential (POT) rating: Not bad. It's simple, and makes sense. One number to determine how much your player could improve each year. I like it for ease of use and how easy it is to understand. What I don't like about it is there is no room for surprise or specialization. (and I don't like just hoarding the high-POT guys) Does a 99 rated QB mean he will develop into a passing QB or a running QB? If it's based on what he is right now, how can he ever change? Maybe that doesn't matter for a QB, but how about a defender? I think it really matters if a defender can develop into something different than what he is right now. The POT rating just feels too random or limiting. Scouting is problematic because you only get 1 number to determine the future career of a player. What if your scout is wrong on POT? Then you've basically misjudged the entire career arc. Too drastic.

The potential "bars" (Like FOF): Lets you have different career arcs for players, and lets them change over time. Pretty flexible and powerful. I actually really like this system, but it falls apart on scouting. If your game is based on multiplayer like mine is, you can't have the entire potential system based on how well you scout because then you're inviting people to mine the save files for information. If the potential bars are random and not truly representative of the player's potential, well that's worse.

No potential. (Like DD):
Plus - Allows for completely freeform player development.
Minus - Allows for completely freeform player development.
There's no rhyme or reason to it. You can't use potential in any way to create a strategy. You just hoard young players and hope for the best. Also eliminates the need for scouting, which I kind of like.

Scouting: Scouting in multiplayer is a tricky business. Scouting is generally based on the idea of imperfect information. You get a better idea of what players are, based on the quality of your scout. The problem with that is that he actual player ratings exist somewhere in the save files. If you have 100 owners in your NCAA league, they all probably have different scouts who will give different player value reports. BUT, all 100 owners need to have the real ratings in order for scouts/transactions/roster management etc to work. That means the real ratings are somewhere in the save files. You know for 100% certainty that the #1 task for all of the owners is to find the real ratings of players they are looking to invest in. It's an arms race between me to hide ratings, and owners to find them. (besides the fact that hiding ratings makes it hard for 3rd party tools)

That's not how I want the game to be played. However, I also don't want every coach to get the exact same information and value the exact same players. That's kind of boring and will lead to one group of players getting heavily recruited while another group of players gets totally ignored. yuck.

I want owners to have no need to dig for extra information. I just want them thinking about the decisions they have to make, not worrying about the quality of their information. That means rethinking scouting all together. I ended up designing a system that combined scouting with potential to solve several problems at once.

First, some terminology....
rating - The number value a player has for a skill. Saved in the save file.
skill - The actual variables for the player. speed, strength, pass skill, run defense skill, etc.
value - Calculated based on skills/ratings. Used to determine how "valuable" a player is at something general. Things like "receiving", "man defense", "open field blocking", etc. These aren't saved, but calculated when needed. Not used in the game engine to resolve plays. Used to figure out matchups, though. (like "who is the best receiver?")

The Saunders Scouting and Potential System: (v1.0)
  • First of all, scouts are really just an extension of your coach. They don't have their own ratings or faults.
  • All scouting is 100% accurate. What you see is real, so there is no need to worry about imperfect information and player ratings are available for 3rd party tools.
  • Scouting is based on your coach's idea of what makes a "good player". Think of your scout as a formula for what you think is valuable. Each function a player can perform is based on a combination of ratings. Based on your coach's idea of the relative value of those ratings, the overall player value changes even though his ratings haven't changed. For example, "receiving value" is based on 45% speed, 50% receiving skill, and 5% running. What if you run a spread offense that relies on speed? Maybe you decide you think a receiver's value is more like 60% speed, 40% receiving skill. Your scout uses your preference to score players on receiving, which will differ from other scouts receiving score for the same player.

In short, scouting gives you a picture of a player through the lens of what you value. This brings us to potential....
  • Every player has a potential for each skill. (speed, strength, run defense, pass block, etc)
  • Skill potential means the max a player could reach in that skill, as they develop. (a 18 year old player rated 50 in coverage skill has a 90 coverage skill potential. He could possibly reach 90 for his coverage skill if everything works out right)
  • As the player ages and develops, the potential "window" changes. Usually it shrinks because the player is developing and his potential is becoming more realized. On rare occasions, it will increase to simulate a player with undiscovered potential. This could also be used to simulate injuries that hurt physical potential, but not mental potential. (that 18 year old player may only have a coverage potential of 85 by the time he's 23 and graduating to the draft, but may have achieved an actual rating of 65)
  • Potential can never be negative. At worst, a player's potential is equal to his ratings. That means he's not getting any better and it's only downhill from here.

Potential and scouting come together here. Since each player has potential in each skill, and each scout bases his player value on your coach's idea of what's valuable, you get an individualized scouting report for each player's potential based on what your coach likes. I would see a recruit that has high potential in the skill I value as a potential star. Another coach might not see him as high because they value different things. It ends up being about what you value, rather than who gets better information.

But wait, there's more!

You might think "Well that's cute, but the engine is what the engine is. It doesn't matter what I like because the engine has a specific formula."

Not really. The engine uses skills to determine what happens, not player value calculations. If a receiver is trying to make a catch, he uses receiving skill. If the receiver is trying to outrun a defender, he's using speed. If the receiver is trying to adjust to a thrown ball, it's receiving skill again. You just need to try to put your players in the right positions to use the skills you value, which you can do by designing plays in the play editor!

BOOM!
__________________
Live Chat!
YouTube Channel
GoldenCrest Games is offline   Reply With Quote
Old 03-19-2019, 12:18 PM   #16
GoldenCrest Games
High School Varsity
 
Join Date: Jul 2016
Thumbs up

The worst part about this phase of development is that there are so many things to do, I tend to get lost on tangents...

I ended up finishing off zone defense and implemented rollouts for QB drops, instead of hitting the coverage and QB reads hard. eh, maybe I'll just get all the basic AI done and then improve it as a whole. That seemed to work pretty well last time.



By the way, anyone who joins the multiplayer league better be ready for that 5DL pass rush. I will demolish your QB.
__________________
Live Chat!
YouTube Channel
GoldenCrest Games is offline   Reply With Quote
Old 03-20-2019, 02:25 PM   #17
GoldenCrest Games
High School Varsity
 
Join Date: Jul 2016
Thumbs up

Fried my brain today. I got all the non-special teams AI in place, except for open field blocking and open field running. Math hurts.

Right now a lot of it is pretty similar to the Iverson engine AI, but with some small upgrades that I've been wanting to do over the last month. The biggest thing is that I've separated decision making AI from movement AI. It seems like a small thing, but it's going to allow me more flexibility in changing player behavior on the field. Before, if I wanted to do something drastic in the decision AI, it messed up movement too much and I had to be careful. I don't always want to be careful.

I think I'll get the open field AI done today and probably have it all linked up tomorrow morning. If that all goes as planned, I should be able to stream and test out various play designs to see if I can break the engine. That part is always fun.
__________________
Live Chat!
YouTube Channel
GoldenCrest Games is offline   Reply With Quote
Old 03-21-2019, 11:14 AM   #18
GoldenCrest Games
High School Varsity
 
Join Date: Jul 2016
Thumbs up

Got all the AI implemented and........ WTF is this??

http://www.goldencrestgames.com/wp-c.../runissues.mp4

There is so much wrong with this I don't even know what to say! LOL!

I'm 90% sure this has to do with my new "AI component sliders" system. Here's how it works:
  • Each AI is made out of a bunch of individual AI components, but follows a similar pattern
  • The first components remove potential options based on a specific criteria. Ex: (One component that's often used is the "remove invalid path" component. It removes any move option that can't be reached. Another component removes move options that are too far behind the runner. etc.)
  • Next are the "interest" components. These score each option based on their own set of criteria. In this case, the runner is scoring based on things like moving upfield, avoiding collisions, following blocks, etc.
  • Each interest component is scored on a 0-100 scale, and then is scaled according to that component's slider.
  • Each interest score is added to the total move position option score for that point
  • The top scoring position is selected for the player to move to

As a default, I have all the sliders set to the same value. That means that each AI is probably overvaluing some components and undervaluing others. I think it's clear that the RB is overvaluing the follow block component.

All the other players have their own component slider issues as well, but the RB one is pretty funny.

Off to tune!!
__________________
Live Chat!
YouTube Channel
GoldenCrest Games is offline   Reply With Quote
Old 03-22-2019, 07:23 AM   #19
GoldenCrest Games
High School Varsity
 
Join Date: Jul 2016
Thumbs up

Found a good system yesterday for tinkering with component AI balance. I've started running them all 1 at a time to make sure it is evaluating what I think it is. After that, I start combining them in interesting pairs to see what the result is. Then, I'll start slowly adding in other components until the behavior is just right.

Here's a good example to compare with the last video. In this one, I only have the "run upfield" and the "find open field" interest components turned on. (I also keep the avoid collisions eliminators on all the time)

http://www.goldencrestgames.com/wp-c...dOpenfield.mp4

Just by turning those on, all of a sudden we get a more interesting running AI. Towards the end, you can see we need something else. We need to tell runners to run away from defenders, not just try to avoid running into them. It also looks a little weird that the runner takes that angle across the field when he has open field in front of him. There probably needs to be something that tells him to take the most direct route to the endzone.
__________________
Live Chat!
YouTube Channel
GoldenCrest Games is offline   Reply With Quote
Old 03-22-2019, 08:31 AM   #20
GoldenCrest Games
High School Varsity
 
Join Date: Jul 2016
Thumbs up

This time I turned on the "straight upfield" component and gave it a 10% slider, turned on the "run away from defenders" component at 50%, and turned on the "follow blocks" at 50%

It's kind of cool to see the RB get more and more interesting with his decision making ability.

http://www.goldencrestgames.com/wp-c...3/moreRbAI.mp4

I need to work on the other players before I can take the RB any farther. Right now he's the only one with meaningful AI, so this isn't really a representative scenario. Next up is line AI!
__________________
Live Chat!
YouTube Channel
GoldenCrest Games is offline   Reply With Quote
Old 06-28-2019, 09:42 PM   #21
ninazhudson
n00b
 
Join Date: Jun 2019
wait

Currently the game has been completed yet, I feel that you have put a lot of time and effort into this game




happy wheels
ninazhudson is offline   Reply With Quote
Reply


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is On
Forum Jump


All times are GMT -5. The time now is 02:34 AM.



Powered by vBulletin Version 3.6.0
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.