chronokun

Q3 .map -> Reflex .map converter

154 posts in this topic

It's still pretty rough and doesn't do alot of things (entities, patches, etc.) but seems to work well enough for basic usage so might come in handy.
https://www.dropbox.com/s/bf0t5gtk0wku8lx/Q3ToReflex_r14.zip?dl=0

Usage: Run from command line

Q3ToReflex.exe [input].map [output].map [switches]

Available switches are:
-nopatches
-notrigger
-noclip

-allcaulk
-tessfactor [1-7]
-texscale [scaling factor]

Update: also on github: https://github.com/chronokun/Q3ToReflex

Other tools:
https://www.dropbox.com/s/prmdko6s59jlwma/ReflexToQ3_r6.zip?dl=0
https://www.dropbox.com/s/q5jmied69d2a193/ObjToReflex_r4.zip?dl=0

Edited by chronokun
Updated links to other converter tools
MeTzGoRe, Mazu, MAD_JIHAD and 7 others like this

Share this post


Link to post
Share on other sites

It's still pretty rough and doesn't do alot of things (entities, patches, etc.) but seems to work well enough for basic usage so might come in handy.

https://www.dropbox.com/s/rwn9bd0ezr1vc0l/Q3ToReflex.zip?dl=0

Usage: Q3ToReflex.exe q3input.map reflexoutput.map

 

Great!

 

But, it crashes for me!    :(

 

Windows 7 x64. 

 

I tried running it as administrator, and compatibility mode winxp.  Also tried running it from a Temp folder.

 

Can you send me a sample q3.map file that converts successfully, and let me try that.

 

 

(deleting double-post from other thread)

Share this post


Link to post
Share on other sites

Great!

 

But, it crashes for me!    :(

 

Windows 7 x64. 

 

I tried running it as administrator, and compatibility mode winxp.  Also tried running it from a Temp folder.

 

Can you send me a sample q3.map file that converts successfully, and let me try that.

 

 

(deleting double-post from other thread)

These two I've tested and work for me, just realized though that the program may depend on this to run: http://www.microsoft.com/en-nz/download/details.aspx?id=40784

samples.zip

Share this post


Link to post
Share on other sites

I installed that redist package, and this tool still crashes.

 

That samples.zip only has converted files in it.  Can you send me a sample of a quake 3 .map file for me to convert?

Share this post


Link to post
Share on other sites

chances are I screwed up the bit that parses the q3 map input, I was up pretty late working on it and the code started to get a little messy haha hopefully as I tidy it up a bit I can find and fix all the bugs I've no doubt created heh :)

Share this post


Link to post
Share on other sites

Yeah, those work.  

 

This is what my quake editor outputs for .map

{
"classname" "worldspawn"
{
( -128 -32 32 ) ( -128 32 32 ) ( -64 32 32 ) gothic_block/blocks11b 0 0 0 1 1
( -128 -32 -32 ) ( -128 -32 32 ) ( -64 -32 32 ) gothic_block/blocks11b 0 0 0 1 1
( -64 -32 -32 ) ( -64 -32 32 ) ( -64 32 32 ) gothic_block/blocks11b 0 0 0 1 1
( -64 32 -32 ) ( -64 32 32 ) ( -128 32 32 ) gothic_block/blocks11b 0 0 0 1 1
( -128 32 32 ) ( -128 -32 32 ) ( -128 -32 -32 ) gothic_block/blocks11b 0 0 0 1 1
( -128 -32 -32 ) ( -64 -32 -32 ) ( -64 32 -32 ) gothic_block/blocks11b 0 0 0 1 1
}
{
( 32 -32 32 ) ( 32 32 32 ) ( 96 32 32 ) gothic_block/blocks11b 0 0 0 1 1
( 32 -32 -32 ) ( 32 -32 32 ) ( 96 -32 32 ) gothic_block/blocks11b 0 0 0 1 1
( 96 -32 -32 ) ( 96 -32 32 ) ( 96 32 32 ) gothic_block/blocks11b 0 0 0 1 1
( 96 32 -32 ) ( 96 32 32 ) ( 32 32 32 ) gothic_block/blocks11b 0 0 0 1 1
( 32 32 32 ) ( 32 -32 32 ) ( 32 -32 -32 ) gothic_block/blocks11b 0 0 0 1 1
( 32 -32 -32 ) ( 96 -32 -32 ) ( 96 32 -32 ) gothic_block/blocks11b 0 0 0 1 1
}
}
{
"classname" "light"
"origin" "-32 32 -96"
}

But the converter doesn't work on this.  I think because there is different amount of # numbers (after the texture name).

 

Perhaps you could consider making the converter more flexible to ignore those numbers, would be great.  

 

Thanks!

 

This is a great tool!  Best tool so far!

Share this post


Link to post
Share on other sites

Yeah, those work.  

 

This is what my quake editor outputs for .map

{
"classname" "worldspawn"
{
( -128 -32 32 ) ( -128 32 32 ) ( -64 32 32 ) gothic_block/blocks11b 0 0 0 1 1
( -128 -32 -32 ) ( -128 -32 32 ) ( -64 -32 32 ) gothic_block/blocks11b 0 0 0 1 1
( -64 -32 -32 ) ( -64 -32 32 ) ( -64 32 32 ) gothic_block/blocks11b 0 0 0 1 1
( -64 32 -32 ) ( -64 32 32 ) ( -128 32 32 ) gothic_block/blocks11b 0 0 0 1 1
( -128 32 32 ) ( -128 -32 32 ) ( -128 -32 -32 ) gothic_block/blocks11b 0 0 0 1 1
( -128 -32 -32 ) ( -64 -32 -32 ) ( -64 32 -32 ) gothic_block/blocks11b 0 0 0 1 1
}
{
( 32 -32 32 ) ( 32 32 32 ) ( 96 32 32 ) gothic_block/blocks11b 0 0 0 1 1
( 32 -32 -32 ) ( 32 -32 32 ) ( 96 -32 32 ) gothic_block/blocks11b 0 0 0 1 1
( 96 -32 -32 ) ( 96 -32 32 ) ( 96 32 32 ) gothic_block/blocks11b 0 0 0 1 1
( 96 32 -32 ) ( 96 32 32 ) ( 32 32 32 ) gothic_block/blocks11b 0 0 0 1 1
( 32 32 32 ) ( 32 -32 32 ) ( 32 -32 -32 ) gothic_block/blocks11b 0 0 0 1 1
( 32 -32 -32 ) ( 96 -32 -32 ) ( 96 32 -32 ) gothic_block/blocks11b 0 0 0 1 1
}
}
{
"classname" "light"
"origin" "-32 32 -96"
}

But the converter doesn't work on this.  I think because there is different amount of # numbers (after the texture name).

 

Perhaps you could consider making the converter more flexible to ignore those numbers, would be great.  

 

Thanks!

 

This is a great tool!  Best tool so far!

Yeah, that'd be it, actually it *does* ignore those numbers, just throws them away haha, your map actually looks more like what the docs on the format describe, I think those numbers are an optional extra some editors use, anyway I will fix it =)

Share this post


Link to post
Share on other sites

Example screenshot arkore come on.  Want to see. :)  I might have a couple really old q3 maps I made a long time ago laying around on CD's somewhere.  Will have to dig them up to try it out.

Share this post


Link to post
Share on other sites

Found a .map file on a CD from 2004.  It's just a remake of CTF1 with minor modifications.  Nothing original or special. Original was 1.2MB but this one only came out as 32KB.  Makes me think a lot is being deleted during the conversion.

 

2014-12-09_00001_zps16804bd4.jpg

 

Should look like this.  CTF1 "Dueling Keeps"

 

maxresdefault.jpg

 

Kind of neat that the Q3 map increments the brush # and puts it into a comment.  There are 1800 brushes and each is individually numbered in the comment.  Could be very useful but also wasteful in a way.

// brush 2
{
( 684 -1256 596 ) ( 836 -1256 596 ) ( 836 -1260 596 ) common/hint 0 0 0 0.500000 0.500000 0 15 0
( 812 -1256 312 ) ( 660 -1256 312 ) ( 660 -1260 312 ) common/hint 0 0 0 0.500000 0.500000 0 15 0
( 936 -1256 348 ) ( 936 -1256 28 ) ( 936 -1260 28 ) common/hint 0 0 0 0.500000 0.500000 0 15 0
( 596 -1260 344 ) ( 596 -1260 24 ) ( 596 -1256 24 ) common/hint 0 0 0 0.500000 0.500000 0 15 0
( 836 -1260 340 ) ( 836 -1260 20 ) ( 684 -1260 20 ) common/hint 0 0 0 0.500000 0.500000 0 15 0
( 732 -1256 336 ) ( 732 -1256 16 ) ( 884 -1256 16 ) common/hint 0 0 0 0.500000 0.500000 0 15 0
}
// brush 3
{
( 1080 -1264 328 ) ( 1080 -1416 328 ) ( 1076 -1416 328 ) common/hint 0 0 0 0.500000 0.500000 0 15 0
( 1080 -1412 100 ) ( 1080 -1260 100 ) ( 1076 -1260 100 ) common/hint 0 0 0 0.500000 0.500000 0 15 0
( 1080 -1480 344 ) ( 1080 -1480 24 ) ( 1076 -1480 24 ) common/hint 0 0 0 0.500000 0.500000 0 15 0
( 1076 -1268 348 ) ( 1076 -1268 28 ) ( 1080 -1268 28 ) common/hint 0 0 0 0.500000 0.500000 0 15 0
( 1076 -1428 344 ) ( 1076 -1428 24 ) ( 1076 -1276 24 ) common/hint 0 0 0 0.500000 0.500000 0 15 0
( 1080 -1276 344 ) ( 1080 -1276 24 ) ( 1080 -1428 24 ) common/hint 0 0 0 0.500000 0.500000 0 15 0
}
// brush 4
{
( 424 292 324 ) ( 424 140 324 ) ( 420 140 324 ) common/hint 0 0 0 0.500000 0.500000 0 15 0
( 424 212 100 ) ( 424 364 100 ) ( 420 364 100 ) common/hint 0 0 0 0.500000 0.500000 0 15 0
( 424 -16 52 ) ( 424 -16 -268 ) ( 420 -16 -268 ) common/hint 0 0 0 0.500000 0.500000 0 15 0
( 420 196 36 ) ( 420 196 -284 ) ( 424 196 -284 ) common/hint 0 0 0 0.500000 0.500000 0 15 0
( 468 120 140 ) ( 468 120 -180 ) ( 468 272 -180 ) common/hint 0 0 0 0.500000 0.500000 0 15 0
( 472 64 36 ) ( 472 64 -284 ) ( 472 -88 -284 ) common/hint 0 0 0 0.500000 0.500000 0 15 0
}

Here's another very busy section you might get some use out of.  No idea what's going on with this.

// brush 1780
{
patchDef2
{
gothic_trim/skullsvertgray02b
( 3 3 0 0 0 )
(
( ( 54 800 156 0 0 ) ( 54 912 156 0 1.875000 ) ( 54 1024 156 0 3.750000 ) )
( ( 38 800 156 0.250000 0 ) ( 38 912 156 0.250000 1.875000 ) ( 38 1024 156 0.250000 3.750000 ) )
( ( 38 800 144 0.437500 0 ) ( 38 912 144 0.437500 1.875000 ) ( 38 1024 144 0.437500 3.750000 ) )
)
}
}
// brush 1781
{
patchDef2
{
gothic_trim/pitted_rust
( 9 3 0 0 0 )
(
( ( 504.424072 576 309.593506 0 0 ) ( 665.932983 576 292.655273 0 2.537417 ) ( 737.167725 576 115.042725 0 5.527497 ) )
( ( 504.005615 576 297.600830 0.187500 0 ) ( 657.903320 576 283.737549 0.187500 2.537417 ) ( 725.284424 576 113.372559 0.187500 5.527497 ) )
( ( 503.586792 576 285.608154 0.374999 0 ) ( 649.873657 576 274.819580 0.374999 2.537417 ) ( 713.401367 576 111.702393 0.374999 5.527497 ) )
( ( 503.586792 600 285.608154 0.687499 0 ) ( 649.873657 600 274.819580 0.687499 2.537417 ) ( 713.401367 600 111.702393 0.687499 5.527497 ) )
( ( 503.586792 624 285.608154 0.999999 0 ) ( 649.873657 624 274.819580 0.999999 2.537417 ) ( 713.401367 624 111.702393 0.999999 5.527497 ) )
( ( 504.005615 624 297.600830 1.187499 0 ) ( 657.903320 624 283.737549 1.187499 2.537417 ) ( 725.284424 624 113.372559 1.187499 5.527497 ) )
( ( 504.424072 624 309.593506 1.374999 0 ) ( 665.932983 624 292.655273 1.374999 2.537417 ) ( 737.167725 624 115.042725 1.374999 5.527497 ) )
( ( 504.424072 600 309.593506 1.687499 0 ) ( 665.932983 600 292.655273 1.687499 2.537417 ) ( 737.167725 600 115.042725 1.687499 5.527497 ) )
( ( 504.424072 576 309.593506 1.999999 0 ) ( 665.932983 576 292.655273 1.999999 2.537417 ) ( 737.167725 576 115.042725 1.999999 5.527497 ) )
)
}
}
// brush 1782
{
patchDef2
{
gothic_trim/pitted_rust
( 9 3 0 0 0 )
(
( ( 967.575928 624 309.593506 0 0 ) ( 806.067017 624 292.655273 0 2.537417 ) ( 734.832275 624 115.042725 0 5.527497 ) )
( ( 967.994385 624 297.600830 0.187500 0 ) ( 814.096680 624 283.737549 0.187500 2.537417 ) ( 746.715576 624 113.372559 0.187500 5.527497 ) )
( ( 968.413208 624 285.608154 0.374999 0 ) ( 822.126343 624 274.819580 0.374999 2.537417 ) ( 758.598633 624 111.702393 0.374999 5.527497 ) )
( ( 968.413208 600 285.608154 0.687499 0 ) ( 822.126343 600 274.819580 0.687499 2.537417 ) ( 758.598633 600 111.702393 0.687499 5.527497 ) )
( ( 968.413208 576 285.608154 0.999999 0 ) ( 822.126343 576 274.819580 0.999999 2.537417 ) ( 758.598633 576 111.702393 0.999999 5.527497 ) )
( ( 967.994385 576 297.600830 1.187499 0 ) ( 814.096680 576 283.737549 1.187499 2.537417 ) ( 746.715576 576 113.372559 1.187499 5.527497 ) )
( ( 967.575928 576 309.593506 1.374999 0 ) ( 806.067017 576 292.655273 1.374999 2.537417 ) ( 734.832275 576 115.042725 1.374999 5.527497 ) )
( ( 967.575928 600 309.593506 1.687499 0 ) ( 806.067017 600 292.655273 1.687499 2.537417 ) ( 734.832275 600 115.042725 1.687499 5.527497 ) )
( ( 967.575928 624 309.593506 1.999999 0 ) ( 806.067017 624 292.655273 1.999999 2.537417 ) ( 734.832275 624 115.042725 1.999999 5.527497 ) )
)
}
}
// brush 1783

Share this post


Link to post
Share on other sites

Those patch clauses appear to be Quake3's "Curves", I believe.

 

I personally wouldn't expect this converter to convert those into reflex format.

 

As for the other brushes, I'm not sure why those didn't convert for you.  Perhaps try a .map file that has no Patchdefs in it.

Share this post


Link to post
Share on other sites

It's the only one I managed to save all this time.  Here's the file if you guys want to play around with it.

Thanks, I'll have a look at it, but right now I can tell you that any patches (curves) are deleted along with any brushes that aren't within the worldspawn entity, all the brushes that are within worldspawn *should* be kept but perhaps there's something I've missed that's causing them to get dropped either in the parser or in the polygon generation in which case I'll try to fix it.

Share this post


Link to post
Share on other sites

Turns out there was another bug in the parser where due to patchdefs being nested inside brushes it was mistaking the end of the patchdef for the end of the brush and then the end of the brush for the end of the worldspawn entity and ignoring everything else that followed, should now be fixed.

https://www.dropbox.com/s/vfv6vm2s6umuo72/Q3ToReflex_r6.zip?dl=0

Devil likes this

Share this post


Link to post
Share on other sites

Arkore, That could be a glimpse of how the workshop will be used by mappers and modelers.  Reminds me a lot of the stuff made possible from the polycount site.  Workshop will most likely do for Reflex what polycount did for Q3.  Love the modularity of the stairs.  Can stack multiples of these right on top of each other when group select and group clone happens.

 

Chronokun you've finally done it. 

 

Wow! That probably saved me like 20 hours on just remaking the basic layout.  It even made the hanging lanterns.  There are still odd artifacts and some pathways are closed off due to what I'll assume is nodraw.  So heavy use of nodraw will really screw over attempts of a good direct conversion.  Probably good idea to go through the Q3 map and remove all instance of nodraw or at least change them to something else like nolight/darkcaulk.  Since we don't have a nodraw brush yet in Reflex how about adding that to the converter so it automatically changes Q3 caulk to something other than dev gray.  Almost impossible to sort out caulk vs walls since everything is dev gray now.  Also the automated trigger doors in the center of the map were turned into solid brushes but I guess that's normal.  Been a while since I've messed with triggers.

 

2014-12-10_00001_zps18673c6d.jpg

 

Looks like CTF1 to me.

 

2014-12-10_00002_zps11a8061b.jpg

 

CTF1 remake will probably be my next project but as you can see most of the work is already done. :)

 

2014-12-10_00003_zpsc61f984e.jpg

 

This is phenomenal, just absolutely phenomenal.   Typed out the command line parameters and with the click of a button it spit out a fully converted map (with minor issues).  Just blown away.  That's amazing.  Really appreciate all the work you and everyone has done in order to understand the map formatting differences.  Still some room for improvement but it's an awesome start.  All your hard work has paid off.  Can't even explain how much this is going to benefit people that want to remake their old Q3 maps (as long as they have access to the map file). Bravo.

wrjthe and Sharqosity like this

Share this post


Link to post
Share on other sites

Wow! That probably saved me like 20 hours on just remaking the basic layout.  It even made the hanging lanterns.  There are still odd artifacts and some pathways are closed off due to what I'll assume is nodraw.  So heavy use of nodraw will really screw over attempts of a good direct conversion.  Probably good idea to go through the Q3 map and remove all instance of nodraw or at least change them to something else like nolight/darkcaulk.  Since we don't have a nodraw brush yet in Reflex how about adding that to the converter so it automatically changes Q3 caulk to something other than dev gray.  Almost impossible to sort out caulk vs walls since everything is dev gray now.  Also the automated trigger doors in the center of the map were turned into solid brushes but I guess that's normal.  Been a while since I've messed with triggers.

It copies whatever material names the original brushes have so if you go and change them in whatever editor you use to be whatever reflex material you want them replaced with that'd probably be the way to go, for things that don't really have a counterpart and might as well be deleted I guess you can just set a place holder and just find and delete those brushes with your text editor or in reflex for now, wont be much work to add to the converter I just need to figure out the list of all the different kinds of brushes and which to delete and which to substitute.

Share this post


Link to post
Share on other sites

Here are some equivalent brushes.

 

Quake 3 Player Clip

common/clip

Relfex Player Clip

internal/editor/textures/editor_clip

 

Quake 3 Hint

common/hint

Reflex Hint

No equivilent

 

Quake 3 Jump Pad

// entity 38
{
"origin" "738 -2364 250"
"classname" "target_position"
"targetname" "01jump"
}
// entity 39
{
"target" "01jump"
"classname" "trigger_push"
// brush 0
{
( 776 -2288 4 ) ( 776 -2352 4 ) ( 696 -2352 4 ) common/trigger 0 0 0 0.500000 0.500000 0 0 0
( 696 -2352 2 ) ( 776 -2352 2 ) ( 776 -2288 2 ) common/trigger 0 0 0 0.500000 0.500000 0 0 0
( 776 -2320 -4 ) ( 776 -2320 4 ) ( 776 -2280 4 ) common/trigger 0 -24 0 0.500000 0.500000 0 0 0
( 764 -2292 2 ) ( 764 -2292 10 ) ( 736 -2264 10 ) common/trigger 0 -24 0 0.500000 0.500000 0 0 0
( 736 -2280 2 ) ( 736 -2280 10 ) ( 696 -2280 10 ) common/trigger 0 -24 0 0.500000 0.500000 0 0 0
( 708 -2292 -4 ) ( 708 -2292 4 ) ( 680 -2320 4 ) common/trigger 0 -24 0 0.500000 0.500000 0 0 0
( 696 -2320 -4 ) ( 696 -2320 4 ) ( 696 -2360 4 ) common/trigger 0 -24 0 0.500000 0.500000 0 0 0
( 708 -2348 -4 ) ( 708 -2348 4 ) ( 736 -2376 4 ) common/trigger 0 -24 0 0.500000 0.500000 0 0 0
( 736 -2360 -4 ) ( 736 -2360 4 ) ( 776 -2360 4 ) common/trigger 0 -24 0 0.500000 0.500000 0 0 0
( 764 -2348 -4 ) ( 764 -2348 4 ) ( 792 -2320 4 ) common/trigger 0 -24 0 0.500000 0.500000 0 0 0
}
}

Reflex Jump Pad

entity
	type JumpPad
	String32 target 01jump
brush
	vertices
		-368.000000 16.000000 -208.000000
		-176.000000 16.000000 -208.000000
		-176.000000 16.000000 -304.000000
		-368.000000 16.000000 -304.000000
		-368.000000 0.000000 -208.000000
		-176.000000 0.000000 -208.000000
		-176.000000 0.000000 -304.000000
		-368.000000 0.000000 -304.000000
	faces
		0.000000 0.000000 1.000000 1.000000 0.000000 0 1 2 3 
		0.000000 0.000000 1.000000 1.000000 0.000000 6 5 4 7 
		0.000000 0.000000 1.000000 1.000000 0.000000 2 1 5 6 
		0.000000 0.000000 1.000000 1.000000 0.000000 0 3 7 4 
		0.000000 0.000000 1.000000 1.000000 0.000000 3 2 6 7 
		0.000000 0.000000 1.000000 1.000000 0.000000 1 0 4 5 
entity
	type Target
	Vector3 position -256.000000 3584.000000 -224.000000
	String32 name 01jump

Quake 3 Caulk

common/caulk

Reflex Caulk

No Equivilent

 

Quake 3 No Draw

common/nodraw

Reflex

internal/editor/textures/editor_nolight

 

Quake 3 Pointlight

// entity 7
{
"classname" "light"
"light" "10"
"_color" "1.000000 0.501961 0.250980"
"origin" "1246 -1443 166"
}

Sometimes the Quake 3 light has multiple different formats, no idea why.

// entity 9
{
"origin" "288 -220 616"
"light" "30"
"classname" "light"
}
// entity 14
{
"origin" "258 -642 226"
"_color" "0.101820 0.063337 0.015798"
"light" "125"
"spawnflags" "0"
"classname" "light"
}

I have no idea what the equivalent lights for Reflex would be.  Still thought it best to detail the formatting discrepancies while still fresh in my mind.

 

Quake 3 CTF Spawn (team dependent)

// entity 4
{
"classname" "team_CTF_bluespawn"
"angle" "45"
"spawnflags" "4"
"origin" "951 -455 212"
}

Quake 3 CTF flag placements

// entity 30
{
"origin" "736 1240 192"
"classname" "team_CTF_blueflag"
}
// entity 31
{
"classname" "team_CTF_redflag"
"origin" "732 -2514 187"
}

We do have CTF flags in Reflex but they don't do anything.  Still nice to use the paths and have flags in the map even if they are placeholders.

entity effect: internal/items/flag_ctf/flag_ctf

 

Of course there's a huge list of item, weapon pickups, lights, and entities.  I'm not going to go through and look for all of those.  Would take a while.  We do need/want that kind of capability built into the converter though.  Hope that helps.

chronokun likes this

Share this post


Link to post
Share on other sites

Interestingly another one of my old maps would also be interesting for Reflex... now I may save myself having to rebuild it brush by brush. And another folks well acquainted with GTKradiant will want to do is, clean up their map files in Radiant *first*, and only then export them to Reflex. E.g. quickly remove entities and the like.

 

Am I correct that you need an account at dropbox to download? (Not such a huge fan of such sites.) Could the next update maybe be uploaded as a attachment at this forum, please? Thank you.

chronokun likes this

Share this post


Link to post
Share on other sites

No you don't need account to download.  I had to go make one after seeing Chronokun use it because forums have max size of 140KB.  Honestly dropbox is good though.  Just started using it last night.  It's basically run like tortoise cvs or a private domain shared folder (in real time).  Have to run a program and background service for it to work.   Since the ul limit on this forum is so small you'll have to use something like dropbox instead if you want to share files.  ReflexFiles is only for completed stuff not just stuff we're messing around with so dropbox does a nice job of it, can recommend.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now