Home » MODDING HQ 1.13 » v1.13 Idea Incubation Lab » New CTH system - Presentation
|
|
|
|
|
Re: New CTH system - Presentation[message #263166]
|
Tue, 21 September 2010 12:52
|
|
CptMoore |
|
Messages:224
Registered:March 2009 |
|
|
At least 20 years, headrock is currently reimplementing everything to run on a quantum computer, his code is finished at the end of this week but the first computers will only arrive in 20 years.
Report message to a moderator
|
Sergeant 1st Class
|
|
|
|
|
Re: New CTH system - Presentation[message #263357]
|
Thu, 23 September 2010 17:52
|
|
loonyphoenix |
|
Messages:45
Registered:September 2010 |
|
|
I have a couple of questions regarding the NCTH.
1. "Sway and Deviation are both calculated at the "Normal" distance if possible (shown in the first three images up there)."
I don't understand this part. Isn't Sway and Deviation angles which don't depend upon the distance to the target? Sure, the Muzzle Point and the Impact Point will be different depending on the angle at different distances; however, the Sway and Deviation are unchanged regardless of the distance.
So I don't really understand what "Normal" distance does. If we're subtracting from the maximum Muzzle Sway of 22.5 degrees (for example, 30% Base CTH, and then 60% with extra aiming, making it a 90% decrease, which makes the actual Maximum Sway for this particular shot 2.25 degrees to any side from the center), does it really matter how far away the target is?
The only practical application of the Normal Distance I can see is to calculate the distances at which the scopes become less useful. As I understand it, the scopes start to deteriorate at distances shorter than Normal Distance multiplied by the scope's Magnification Factor. What else does the Normal Distance have effect on?
2. What happens when the Muzzle Point is at the edge of the red arch (the maximum Bullet Deviation in the geme), and then random Bullet Deviation adds up on top of it in the direction outside the red arch? If it is shot at the nearest available point within the arch, then what happens when Base CTH is 0%, the shooter doesn't do any aiming, and the weapon is cheap and broken (like, 10 degrees bullet deviation or something like that). Does the probability of shooting at the points of the red arch actually increase? Is it a possible exploit of the system to shoot at a point 22.5 degrees to the left/right of a target with a bad weapon in bad codition to increase the probability of a hit?
[Updated on: Thu, 23 September 2010 18:13] by Moderator Report message to a moderator
|
Corporal
|
|
|
Re: New CTH system - Presentation[message #263362]
|
Thu, 23 September 2010 18:32
|
|
Headrock |
|
Messages:1760
Registered:March 2006 Location: Jerusalem |
|
|
Quote:I don't understand this part. Isn't sway and deviation an angle which doesn't depend upon the distance to the target? Sure, the the muzzle point and the impact point will be different depending on the angle at different distances; however, the sway and diviation itself are unchanged regardless of the distance.
In essence you are correct, but you need to remember that this presentation was just that - a presentation of an idea. Since it was written there have been quite a few changes. Among them, sway and deviation (as well as other things that change the impact point) are calculated by distance from the target center, not by angle. This is why it's important to have a distance multiplier (and hence, a scope divisor). The reason I decided to dump angles is because it would've required finagling with very fine decimal values when firing at very distant targets. That proved to be very unwieldy when I sat down to write the code.
Quote:The only practical application of the normal distance I can see is in the range of the weapon (if it has any effect on it) and the distances at which scopes become less useful.
Just for scopes and lasers, actually. Think of it as a multiplier and divisor working against each other. If your shot is randomly determined to deviate 1 unit up and 3 left, at 2x distance it will deviate 2 up and 6 left, and so forth. A 2x scope would divide by 2, giving 1 up and 3 left again. Bullet deviation is unaffected by scopes, and so is only multiplied and never divided (which is why you need guns with very high accuracy values to hit far-away targets). Similarly, recoil is also not affected by scopes. All of this is, again, due to the fact that I don't use angles in the calculation, except for determining the size of the outer circle for making sure that shots don't go outside that circle.
Quote:2. What happens when the muzzle point is at the edge of the red arch...
Shots are always restricted to the red arch, with one exception: raising the gun upwards to compensate for shooting outside the gun's range. In theory that does indeed increase the chance of hitting a target on the edge of the outer arch. However, if you do have 100% Muzzle Sway, at virtually any distance your chances of hitting the target are slim, whether you try to exploit the boundary or not. Not to mention the fact that accurately placing a target at the edge of the circle is virtually impossible unless you spend a lot of time measuring your angles - no one is that bored.
Report message to a moderator
|
|
|
|
Re: New CTH system - Presentation[message #263364]
|
Thu, 23 September 2010 18:53
|
|
loonyphoenix |
|
Messages:45
Registered:September 2010 |
|
|
One more thing.
Quote:Base CTH = a value based primarily on the shooter's stats and various other factors. It is anywhere between 0 and 30.
Aiming CTH = a value based primarily on the shooter's stats and various other factors. It increases as more Extra Aiming Levels are added.
CTH Cap = a value based primarily on the shooter's Marksmanship. It can be anywhere between 0 and 100.
Muzzle Sway = Base CTH + Aiming CTH, both depending on the shooter's stats and all the conditional modifiers.
Muzzle Sway is limited to between 0 and CTH Cap.
Bullet Deviation = A value derived from the gun's properties only.
RandomMuzzleSway = a random number between 0 and (100-Muzzle Sway)
RandomBulletDev = a random number between 0 and Bullet Deviation
Muzzle Point = a random point within RandomMuzzleSway distance from the target's center
Impact Point = a random point within RandomBulletDev distance from the Muzzle Point.
Fire a bullet directly towards Impact Point
Do I understand correctly that the probability of any number within the RandomMuzzleSway and RandomBulletDev is equal?
Muzzle Sway is constant (depends on the shooter and aiming). Let's say 90. RandomMuzzleSway is then from 0 to 10.
Let's say the target is round. It is the center from which Muzzle Sway is calculated (by definition) and is, let's say, half the radius of Muzzle Sway. However! It is 0.25 of the AREA within the arch. But the probability of hitting it is 55% (it can be hit with R=0..5, 6 out of the 11 equal possibilities). In fact, the probability of hitting the exact center (Muzzle Sway = 0), one point out of the thousand of points within the area of MuzzleSway, is 9%. Do you think this is realistic?
The same goes for Bullet Deviation.
Edit: I should have reread the topic; seems you answered several of my previous points
PS: Regarding the above: I think at least the Bullet Deviation should be completely random. Aiming might actually be realistic -- that is, you are more probable to hit nearer the center than at the edges; however, the bullets don't aim at all. I'm no ballistics expert, though
PPS: To make the bullet deviation completely random, I'd propose the following method.
Let's say the exact center is 1 cm in radius (it can't really be one point), and each point of deviation adds one cm of radius. The area of the center would be Pi cm^2. The area of the first strip would be 4Pi minus 1Pi = 3Pi. The area of the second strip would be 9Pi minus 4Pi = 5Pi. The area of the the third strip would be 16-9 = 7Pi. And so on.
In fact, the increase of 2Pi is constant: ((X+1)^2-X^2) - (X^2-(X-1)^2) = (X^2 + 2X + 1 - X^2) - (X^2 - X^2 + 2X - 1) = (2X + 1) - (2X - 1) = 2
Therefore, each subsequent strip is 2Pi cm^2 larger than the previous.
The area of the whole circle is BulletDeviation^2*Pi. Let's drop the Pi from all values.
So we have an area of (BD+1)^2 sub-divided into strips with the following areas: 1, 3, 5, 7, 9, ... 1+2(BD+1). BD+1 is to account for the extra inner radius of one centimeter. The probability of hitting each strip is proportional to that value.
The script for calculating the probability of hitting a praticular diameter would be the following:
Take a random number between 1 and (BD+1)^2. Compare it to 1+0*2=1. If it's equal or less (in this case if it's 1), shoot at the center. Otherwise, compare it to (1+0*2)+(1+1*2)=4. If it's less or equals 4 (and we know it is more than one), shoot at the first strip. And so on.
Edit: Or we could do it easier. Take a random number between 1 and (BD+1)^2. Compare it to the area of the innermost circle, that is, 1^2. If it's less or equal, it goes within that circle. If it's more, compare it to the area of the second circle, one with the first strip tucked upon the innermost one: 2^2=4. If it's less or equal, shoot the first strip. Otherwise... and so on.
For example: BD=5. Random number between 1 and (5+1)^2=36. Let's say 17.
17<=(0+1)^2? No. No center.
17<=(1+1)^2? No. No first radius.
17<=(2+1)^2? No. No second radius.
17<=(3+1)^2? No. No third radius.
17<=(4+1)^2? Yes. Pick a random point inside the fourth radius.
I feel stupid that I haven't thought of this way before. It's so obvious.
Anyway, maybe I've done all these calculations in vain and you're already doing this
[Updated on: Thu, 23 September 2010 21:55] by Moderator Report message to a moderator
|
Corporal
|
|
|
Re: New CTH system - Presentation[message #263372]
|
Thu, 23 September 2010 20:34
|
|
Headrock |
|
Messages:1760
Registered:March 2006 Location: Jerusalem |
|
|
Quote:But the probability of hitting it is 55% (it can be hit with R=0..5, 6 out of the 11 equal possibilities). In fact, the probability of hitting the exact center (Muzzle Sway = 0), one point out of the thousand of points within the area of MuzzleSway, is 9%. Do you think this is realistic?
Again, the pseudo code you quoted above was just an abstract explanation of the process, not the way it actually works. In practice, the randomized deviation is done as:
RandomMuzzleSway = (random(Muzzle Sway Radius*100)) / 100
So the chance of drawing an exact 0 is 1/1000 for a shot whose maximum radius is 10 (1 tile). It may not be 100% realistic to calculate things that way (I'm not very good with maths to begin with), but this is a simpler method that achieves a fairly randomal result.
Quote:PPS: To make the bullet deviation completely random, I'd propose the following method.
I didn't understand any of it, sorry... As I said, I'm very bad with maths. You have no idea how difficult it was to get the trigonometry correct with regards to shooting angles.
Report message to a moderator
|
|
|
|
|
|
Re: New CTH system - Presentation[message #263378]
|
Thu, 23 September 2010 21:11
|
|
loonyphoenix |
|
Messages:45
Registered:September 2010 |
|
|
HeadrockAgain, the pseudo code you quoted above was just an abstract explanation of the process, not the way it actually works. In practice, the randomized deviation is done as:
RandomMuzzleSway = (random(Muzzle Sway Radius*100)) / 100
So the chance of drawing an exact 0 is 1/1000 for a shot whose maximum radius is 10 (1 tile). It may not be 100% realistic to calculate things that way (I'm not very good with maths to begin with), but this is a simpler method that achieves a fairly randomal result.
Do I understand correctly that the resulting RandomMuzzleSway is any value between 0 and MuzzleSwayRadius, with the step of 0.01? That doesn't remove the problem I'm talking about. The probability of shooting inside from 0 to 1 (the small inner circle with the radius of 1 point) is the same as the probability of shooting from 8 to 9, which is a big strip on the outside. Again, I'm not sure it's bad, maybe it's realistic. This makes the density of shots in the center higher, which I think is natural. However, I want to make sure this is intended, not accidental.
Report message to a moderator
|
Corporal
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Re: New CTH system - Presentation[message #279977]
|
Sun, 15 May 2011 19:16
|
|
Kermi |
|
Messages:81
Registered:October 2002 |
|
|
ChrisLWhat's not intuitive?
1) Put your cursor over a target.
2) Right click and/or mouse wheel to reduce the size of the aiming aperture.
3) Left click to fire.
From a "new person" stand point, what more do you need to know?
Now, if you're trying to understand exactly how 3D/2D math is being used to calculate flight paths of the bullets being fired, and how that is used to determine if a target gets hit or not.... or if you're trying to understand exactly how ever variable effects the 3D/2D calculations.... well, honestly there isn't an "intuitive" way to explain all that short of writting a short novel.
Well, to start with, would you care to explain why would it be, that i have a merc with an SMG, and a merc with an AR with stats close to each other, shooting at the same enemy from roughly at the same range (2 or 3 squares differend range), the merc with the AR hasn't got a chance in hell to hit?
As it stands, i actually do know why it happends, but only after i wasted half an hour of good playing time to read this very same topic...
Edit: Now that i tried to find the bit again, for the life of me i can't find it. So it was one piece of info possibly in this specific forum thread, or somewhere else among the thousands of threads in the board..
Edit2: And i just checked, this information is not presented IN ANY WAY to the player inside the game. Currently, to figure out what the hell is going on, you need to either shuffle through insane amount of forums posts, or alternatively shuffle through insurmountable amount of XML files.
[Updated on: Sun, 15 May 2011 19:30] by Moderator Report message to a moderator
|
Corporal 1st Class
|
|
|
Re: New CTH system - Presentation[message #280028]
|
Mon, 16 May 2011 21:15
|
|
ctiberious |
|
Messages:605
Registered:March 2007 |
|
|
There are lots of reasons why two merc will have drastically different hit chances. Range is an obvious factor, as are the individual merc's skills and traits. But assuming all that is pretty close for both merc's, there's still terrain and attachments, plus a number of other factors.
Terrain has a huge effect on chance of hitting because it controls how well the program thinks your merc can see the target. Just because two mercs are approximately the same distance from the same target, doesn't mean they can both see the target equally as well. That's all part of the LOS system, however, which is not directly effected by NCTH. Both NCTH and OCTH use the LOS data in the same way so I'd imagine you'd have similar CTH results if you turned NCTH off.
Attachments also play a big role in determining hit chance. Especially scopes. Using a scope below it's minimum effective range will make it alot harder to hit the target because it's alot harder to keep the target in your sights. Unlike OCTH, NCTH at least tries to warn you of this by displaying a reduced magnification factor right on the cursor. But both systems cause penalties to their related hit chance systems when using scopes at close range. The way to work around this is to carry multiple scopes and change them out depending on the range you're attacking at.
But what you're looking for is more then simply how the system operates for a user. You're after coding details which are beyond what any sort of user guide would probably ever offer. Even if someone were ever willing to write one. And to learn all that, you really do have to read the threads where all this has been discussed. Of course, if you think you want to take up the challenge of writting a user guide, I'll be happy to answer whatever questions you have.
Report message to a moderator
|
|
|
|
|
|
|
|
Re: New CTH system - Presentation[message #284108]
|
Mon, 20 June 2011 19:55
|
|
ctiberious |
|
Messages:605
Registered:March 2007 |
|
|
PercentHandling directly effects the handling portion of the NCTH system. Handling is pulled directly from the "Handling" tag in Weapons.xml. Bigger weapons are harder to handle/control (i.e., keep stable) therefore have higher Handling values. So, if PercentHandling is a positive number it will increase the overall Handling value of a weapon, making the weapon harder to handle. And therefore a negative PercentHandling should make a weapon easier to handle by lowering the effective Handling value.
So, as an example, something like an AR or Sniper suppressor, which make the weapon longer, or a C-Mag adapter which makes the weapon heavier (well, technically it's the filled C-Mag magazine but current 1.13 can't distinguish that yet), would probably deserve some kind of positive PercentHandling modifier. The heavier weapon would be harder for the shooter to keep stable.
While things like foregrips and bipods, which help with weapon stability, would probably deserve some kind of negative PercentHandling modifier.
Something to note here.... since foregrips are only supposed to effect the standing and crouching stances, if you wanted to add a PercentHandling modifier for a foregrip you'd actually want to add whatever modifier you wanted in the STANDING_MODIFIERS section but you'd also want to include a PercentHandling=0 in the PRONE_MODIFIERS section so that the system would know not to apply any handling modifiers when a shooter was prone.
To apply the PercentHandling modifer for a bipod, you'd simply add a single entry to the PRONE_MODIFIERS section and leave the modifier completely out of the Crouch and Standing sections which would result in the modifier ONLY being applied when the shooter was prone.
EDIT: One more thing. Because "Handling" was originally controled through the ubReadyTime tag, NCTH still uses the PercentReadyTimeAPReduction tag from items.xml as a generic handling modifier. This tag is not stance dependant, though. So if you want a generic, stand independant handling modifier, you can use this tag as well. Unfortunately, PercentReadyTimeAPReduction ALSO effects that actual ubReadyTime which is the APs required to "ready" a weapon. Originally Headrock felt that the time it took to ready a weapon would have a direct relationship to the weapons handling characteristics (big, slow weapons take more APs to ready and are also harder to handle/keep stable). When I integrated NCTH into the release code, enough people complained about these two characteristics being controled by a single tag that I added the "Handling" tag so they could be controlled seperately. I didn't create a seperate "PercentReadyTimeAPReduction" tag specific for handling, though, which is they that one tag still effects both values.
[Updated on: Mon, 20 June 2011 20:03] by Moderator Report message to a moderator
|
|
|
|
Re: New CTH system - Presentation[message #284185]
|
Tue, 21 June 2011 04:25
|
|
Bever |
|
Messages:24
Registered:March 2009 Location: Australia |
|
|
Awesome that more than answered my question. It's good to know about the ap ready reduction still being a valid operator too, thanks.
Quote:PercentHandling directly effects the handling portion of the NCTH system. Handling is pulled directly from the "Handling" tag in Weapons.xml. Bigger weapons are harder to handle/control (i.e., keep stable) therefore have higher Handling values. So, if PercentHandling is a positive number it will increase the overall Handling value of a weapon, making the weapon harder to handle. And therefore a negative PercentHandling should make a weapon easier to handle by lowering the effective Handling value.
I actually thought that was how the tag was supposed to work but became a little unsure when I found that in SVN 1.13 the silencers actually have a negative value making the weapon easier to handle even though technically it would be heavier and longer. I think it was -3 from memory. All good though I'll just swap them to positives.
Quote:EDIT: One more thing. Because "Handling" was originally controled through the ubReadyTime tag, NCTH still uses the PercentReadyTimeAPReduction tag from items.xml as a generic handling modifier. This tag is not stance dependant, though. So if you want a generic, stand independant handling modifier, you can use this tag as well. Unfortunately, PercentReadyTimeAPReduction ALSO effects that actual ubReadyTime which is the APs required to "ready" a weapon. Originally Headrock felt that the time it took to ready a weapon would have a direct relationship to the weapons handling characteristics (big, slow weapons take more APs to ready and are also harder to handle/keep stable). When I integrated NCTH into the release code, enough people complained about these two characteristics being controled by a single tag that I added the "Handling" tag so they could be controlled seperately. I didn't create a seperate "PercentReadyTimeAPReduction" tag specific for handling, though, which is they that one tag still effects both values.
Clearly your the one in the know for how this has all been implemented into the current build so i'd like to encourage you to write a very quick/rough guide for us modders on what the tags for NCTH are for (single sentance descriptions with indication of +/- better/worse would be enough) and which of the old xml tags are obsolete/active with NCTH. :crossed:
I know your probably flat out with real life and your own projects at the moment but just thought I'd ask anyway... surely I can't be the only casual modder who is not 100% sure which each tag is.
Report message to a moderator
|
Private 1st Class
|
|
|
|
|
Re: New CTH system - Presentation[message #284339]
|
Wed, 22 June 2011 08:27
|
|
ctiberious |
|
Messages:605
Registered:March 2007 |
|
|
All the STOMP traits are used in NCTH as far as I know. The big things about STOMP and NCTH is that:
1) STOMP traits that impact CTH are split between the "Base" and "Aim" portions of the NCTH calculation in a 40%/60% split.
2) You don't gain extra aim clicks which would, in fact, mean you were a worse shot in NCTH.
In OCTH, you gain a certain CTH bonus for each additional click. So the more clicks you can have, the more accurate your shot can be. In NCTH, however, "max aim" is determined by your merc's abilities. The only question NCTH asks is, "how quickly can you reach 'max aim'?". Basically, the system calculates your "base" stability and your "max aim" stability. It takes the difference between those and splits the result between all possible aim clicks in a weighted fashion (i.e., you get a larger bonus for your first click then for you last). So if the code calculates that you have a 20% base stability and an 80% "max aim", and you get 3 clicks with the weapon you're using, then one click would get you something like 50% stability, two clicks is something like 70% and three clicks gets you your max 80%. If you only need 1 click to reach "max aim" you just from 20% strait to 80%. And if you need 8 clicks to reach max aim, then you've got to spend the AP for 8 full clicks in order to attain that 80% "max aim". So instead of having STOMP ADD clicks for traits like gunslinger and marksmen, it REMOVES clicks meaning mercs with those traits can reach max aim FASTER then mercs without those traits.
I do need to work out a way to update the STOMP tooltips so it'll display the fact that you need fewer clicks instead of the misleading "+1 aim clicks" that is currently there. It's also on my todo list.
And, sure, you can change the value to -1 but you're penalizing yourself cause your mercs would take longer to reach max aim.
As for NIV, yes, all that is hard coded. I had considered externalized values when I wrote NIV, but then you have to include a ton of checks to make sure that slots appear "on the screen" (it's incredibly easy to accidentally write a slot off the screen which will crash the program) and that you have exactly the correct amount of available slots. Also, because of how the rendering is done, we had to hard code the slots because of all the extra checking and layout control needed. Not to mention having to include ways for the game code and the xml editor to know what size slot is needed. Not saying all that wasn't doable but NIV was one of the larger code changes (up there with MP and Big Maps). It involved completely re-writting several dozen functions, not to mention something like 6 completely redesigned and rebuilt structures (which have direct impact on savegame compatibility). And keep in mind, we had to make sure OIV compatability remained plus we had to make sure the AI could still use the old inventory system even in NIV mode (too much extra "thinking" to get the AI to actually use NIV) and even though nothing is actually rendered on the screen, the AI still uses all the same functions.
NAS also had to deal with the rendering concerns that resulted in NIV being statically setup. But NAS is also a little more forgiving because it's much smaller. You might have, at most (and assuming you were going for some exceedling over-attached items) 10-15 attachment slots that display in a relatively small area well within the borders of the display area. It might look funky, but you won't cause a game crash if you try to render an NIV pocket outside of the IDB window. Also, NAS can (and does) use the exact same layout in both tactical and strategic screens. NIV, on the other hand, had to squeeze 55 pockets into an area that basically takes up the entire width of the screen in tactical, and pretty much the entire usable height of the screen in strategic. And both screens have to have a completely different set of coordinates. Plus, each screen gets a different set of coords for each of the two current screen resolutions that support NIV.
Basically, making NIV use dynamic (or externalized) pocket placement would have made an already incredibly complicated project even more complicated. Does that mean we'll never have a dynamic setup? Never say never. I'd still love to get NIV so you could manipulate the items stored in an LBENode (that is, LBE gear that's not currently worn) just like we can add/remove attachments. But redesigning NIV also isn't high on my list of priorities. I'm more interested in working out existing bugs, cleaning up balance issues with NCTH and writting the New Magazine System (NMS).
Report message to a moderator
|
|
|
|
|
|
Re: New CTH system - Presentation[message #289758]
|
Wed, 24 August 2011 18:47
|
|
ctiberious |
|
Messages:605
Registered:March 2007 |
|
|
I actually used that recoil webpage to help with some of the last batch of code changes I worked on after Headrock turned the NCTH project over to me. Unfortunately, while the calculator is cool, the problem is converting the results into something the game can use. For intance, if you look at the ".308 Win" sample inputs, you get outputs like:
Momentum: 93.7 lb-fps
Velocity: 11.7 fps
Velocity (at exit): 9.6 fps
Energy: 17.0 ft-lb
Energy (at exit): 11.4 ft-lb
But how does that equate to a mercs attributes? How much Strength (STR), training (MRK) and experience (LVL) does it take to "overcome" 93.7 lb-fps.
Next, the recoil calculator can't take weapon configuration or equipment into consideration. For instance, take a look at images of most big bore hunting/sniper rifles. Most of them include something on the rifle butt which is meant to help compensate for recoil. Watch some videos of a .338 sniper rifle being fired (15.4fps velocity) compared to videos of a .223 assault rifle being fired (5.8fps velocity). The .223 has only about 1/3 the velocity of a .338 but you won't see three times as much recoil because that .338 has built in recoil compensation.
I'm not considering attachments which would modify the results of any built in calculator we might put into the code. I'm just talking about recoil comensation that should be factored into the weapon itself. An M16 or AK often has just a simple, ridgid butt because there's relatively little recoil in these rounds. But a big .50cal Barret or .338 AI AWM have things like piston barrels and heavily padded stocks specifically to help absorb the recoil so that the weapon remain controlable after a shot. These are factors that we don't currently track so they would be holes in any recoil calculator we tried to add to the code.
Not saying this is a bad idea. But it would require adding a ton of data that we don't currently track. I'd much rather see an external formula we could use to setup the recoil (and even ubShotsPer4Turns) tags that already exist. Unfortuantely, coming up with that formula has so far been beyond me. If you can come up with a system, I'd love to hear about it. If it works, I'll do what I can to help get it put into the game.
Report message to a moderator
|
|
|
|
Goto Forum:
Current Time: Fri Apr 19 21:12:28 GMT+3 2024
Total time taken to generate the page: 0.02866 seconds
|