Jump to content
The Dark Mod Forums

[Plugin Request] Save map in Quake 3 format


Recommended Posts

I had to go back to NetRadiant at some point and I just plain hated it after working for some time with Dark Radiant. Can you guys make a plugin / script to save map in Quake 3 format? (obviously a few things would have to be tweaked in NetRadiant afterward, but it's just wouldn't be as painful as making whole map)

 

Thanks.

Link to post
Share on other sites

Can't you just select all the geometry/patch in DarkRadiant, do a CTRL+C, then open NetRadiant and do a CTRL+V? I used to be able to do this between GTKRadiant and DarkRadiant long time ago, but haven't done it in a long time.

 

EDIT: Nevermind, DarkRadiant doesn't like the format from NetRadiant and NR doesn't even try to paste the contents from clipboard copied from DarkRadiant.

I always assumed I'd taste like boot leather.

 

Link to post
Share on other sites

A plugin like that is VERY unlikely to happen as long as nobody from outside the team steps up to do it. There were only very few coders working on DR to begin with and nowadays they only drop in every now and then to do some important fixes to maintain mod compatibility.

 

That being said, I'd try to have a look at different level editors and see if they have plugins. I am actually quite surprised to find out the quake 3 map format isn't supported anymore, seeing that Dark Radiant is forked of GTK Radiant, which supports that format.

Link to post
Share on other sites

The only major difference between D3map and Q3map formats is how brush planes are constructed. I am not 100% sure about patches, because I don't really use them, but for brushes it's that. Doom 3 defines a plane using normalized vector and distance along that vector to the plane, Quake 3 defines a plane using 3 points in space. That's about it. I am not sure about texture coordinates, might be exactly same thing. Quake 3 also has flags for detailed and structural brushes.

 

Entities are defined a bit differently, but I guess i could place them either in Blender or in NetRadiant.

Link to post
Share on other sites

I'm not sure whether it's possible to write meaningful Q3 maps even with a plugin since I removed the surface flags code entirely from DarkRadiant. Can you post an example of a valid Q3 map here, showing off the full syntax?

Link to post
Share on other sites

The following are Quake 3 .map cubes of 64^3 units. The first one is structural brush, using alternative texture projection (I think DR has same exact option as NetRadiant). The second one is detail brush, using alternative texture projection. The third one, and this one I think is really dated and no one cares about it, uses old style projections (it looks like some planes are flipped in the 3D view), and it's a detail brush. Note that in Q3 .map file first line is empty, second one has //entity 0 on it. I'll make an example for patches later, if this will be moving anywhere.

 

Example 1:


// entity 0
{
"classname" "worldspawn"
// brush 0
{
brushDef
{
( -64 64 64 ) ( 64 -64 64 ) ( -64 -64 64 ) ( ( 0.015625 0 -0 ) ( -0 0.015625 0 ) ) common/caulk 0 0 0
( -64 64 64 ) ( 64 64 -64 ) ( 64 64 64 ) ( ( 0.015625 0 0 ) ( 0 0.015625 0 ) ) common/caulk 0 0 0
( 64 64 64 ) ( 64 -64 -64 ) ( 64 -64 64 ) ( ( 0.015625 0 -0 ) ( -0 0.015625 0 ) ) common/caulk 0 0 0
( 64 64 -64 ) ( -64 -64 -64 ) ( 64 -64 -64 ) ( ( 0.015625 0 -0 ) ( -0 0.015625 0 ) ) common/caulk 0 0 0
( 64 -64 -64 ) ( -64 -64 64 ) ( 64 -64 64 ) ( ( 0.015625 0 -0 ) ( -0 0.015625 0 ) ) common/caulk 0 0 0
( -64 -64 64 ) ( -64 64 -64 ) ( -64 64 64 ) ( ( 0.015625 0 -0 ) ( -0 0.015625 0 ) ) common/caulk 0 0 0
}
}
}

 

Example 2:


// entity 0
{
"classname" "worldspawn"
// brush 0
{
brushDef
{
( 64 64 64 ) ( 64 -64 64 ) ( -64 64 64 ) ( ( 0.015625 0 -0 ) ( -0 0.015625 0 ) ) common/caulk 134217728 0 0
( 64 64 64 ) ( -64 64 64 ) ( 64 64 -64 ) ( ( 0.015625 0 -0 ) ( -0 0.015625 0 ) ) common/caulk 134217728 0 0
( 64 64 64 ) ( 64 64 -64 ) ( 64 -64 64 ) ( ( 0.015625 0 -0 ) ( -0 0.015625 0 ) ) common/caulk 134217728 0 0
( -64 -64 -64 ) ( 64 -64 -64 ) ( -64 64 -64 ) ( ( 0.015625 0 -0 ) ( -0 0.015625 0 ) ) common/caulk 134217728 0 0
( -64 -64 -64 ) ( -64 -64 64 ) ( 64 -64 -64 ) ( ( 0.015625 0 -0 ) ( -0 0.015625 0 ) ) common/caulk 134217728 0 0
( -64 -64 -64 ) ( -64 64 -64 ) ( -64 -64 64 ) ( ( 0.015625 0 -0 ) ( -0 0.015625 0 ) ) common/caulk 134217728 0 0
}
}
}

 

 

Example 3:


// entity 0
{
"classname" "worldspawn"
// brush 0
{
( 64 64 64 ) ( 64 -64 64 ) ( -64 64 64 ) common/caulk 0 0 0 1 1 134217728 0 0
( 64 64 64 ) ( -64 64 64 ) ( 64 64 -64 ) common/caulk 0 0 0 1 1 134217728 0 0
( 64 64 64 ) ( 64 64 -64 ) ( 64 -64 64 ) common/caulk 0 0 0 1 1 134217728 0 0
( -64 -64 -64 ) ( 64 -64 -64 ) ( -64 64 -64 ) common/caulk 0 0 0 1 1 134217728 0 0
( -64 -64 -64 ) ( -64 -64 64 ) ( 64 -64 -64 ) common/caulk 0 0 0 1 1 134217728 0 0
( -64 -64 -64 ) ( -64 64 -64 ) ( -64 -64 64 ) common/caulk 0 0 0 1 1 134217728 0 0
}
}

Edited by motorsep
Link to post
Share on other sites

I'd like to see the patches too, basically I need to see all the functionality needed to define a Q3 map. Otherwise I can't judge whether it's feasible at all.

 

Alright, here come patches :)

 

Simple patch:

 


// entity 0
{
"classname" "worldspawn"
// brush 0
{
patchDef2
{
common/caulk
( 3 3 0 0 0 )
(
( ( -64 -64 0 0 0 ) ( -64 0 0 0 -1 ) ( -64 64 0 0 -2 ) )
( ( 0 -64 0 1 0 ) ( 0 0 0 1 -1 ) ( 0 64 0 1 -2 ) )
( ( 64 -64 0 2 0 ) ( 64 0 0 2 -1 ) ( 64 64 0 2 -2 ) )
)
}
}
}

 

Uncapped cylinder:

 

 


// entity 0
{
"classname" "worldspawn"
// brush 0
{
patchDef2
{
common/caulk
( 9 3 0 0 0 )
(
( ( -64 0 -64 0 0 ) ( -64 0 0 0 -1 ) ( -64 0 64 0 -2 ) )
( ( -64 -64 -64 1 0 ) ( -64 -64 0 1 -1 ) ( -64 -64 64 1 -2 ) )
( ( 0 -64 -64 2 0 ) ( 0 -64 0 2 -1 ) ( 0 -64 64 2 -2 ) )
( ( 64 -64 -64 3 0 ) ( 64 -64 0 3 -1 ) ( 64 -64 64 3 -2 ) )
( ( 64 0 -64 4 0 ) ( 64 0 0 4 -1 ) ( 64 0 64 4 -2 ) )
( ( 64 64 -64 5 0 ) ( 64 64 0 5 -1 ) ( 64 64 64 5 -2 ) )
( ( 0 64 -64 6 0 ) ( 0 64 0 6 -1 ) ( 0 64 64 6 -2 ) )
( ( -64 64 -64 7 0 ) ( -64 64 0 7 -1 ) ( -64 64 64 7 -2 ) )
( ( -64 0 -64 8 0 ) ( -64 0 0 8 -1 ) ( -64 0 64 8 -2 ) )
)
}
}
}

 

Capped cylinder:

 


// entity 0
{
"classname" "worldspawn"
// brush 0
{
patchDef2
{
common/caulk
( 9 3 0 0 0 )
(
( ( -64 0 -64 0 0 ) ( -64 0 0 0 -1 ) ( -64 0 64 0 -2 ) )
( ( -64 -64 -64 1 0 ) ( -64 -64 0 1 -1 ) ( -64 -64 64 1 -2 ) )
( ( 0 -64 -64 2 0 ) ( 0 -64 0 2 -1 ) ( 0 -64 64 2 -2 ) )
( ( 64 -64 -64 3 0 ) ( 64 -64 0 3 -1 ) ( 64 -64 64 3 -2 ) )
( ( 64 0 -64 4 0 ) ( 64 0 0 4 -1 ) ( 64 0 64 4 -2 ) )
( ( 64 64 -64 5 0 ) ( 64 64 0 5 -1 ) ( 64 64 64 5 -2 ) )
( ( 0 64 -64 6 0 ) ( 0 64 0 6 -1 ) ( 0 64 64 6 -2 ) )
( ( -64 64 -64 7 0 ) ( -64 64 0 7 -1 ) ( -64 64 64 7 -2 ) )
( ( -64 0 -64 8 0 ) ( -64 0 0 8 -1 ) ( -64 0 64 8 -2 ) )
)
}
}
// brush 1
{
patchDef2
{
common/caulk
( 3 5 0 0 0 )
(
( ( 64 0 -64 -1 -0 ) ( 64 64 -64 -1 -1 ) ( 0 64 -64 0 -1 ) ( -64 64 -64 1 -1 ) ( -64 0 -64 1 -0 ) )
( ( 64 0 -64 -1 -0 ) ( 64 0 -64 -1 -0 ) ( 0 0 -64 0 -0 ) ( -64 0 -64 1 -0 ) ( -64 0 -64 1 -0 ) )
( ( 64 0 -64 -1 -0 ) ( 64 -64 -64 -1 1 ) ( 0 -64 -64 0 1 ) ( -64 -64 -64 1 1 ) ( -64 0 -64 1 -0 ) )
)
}
}
// brush 2
{
patchDef2
{
common/caulk
( 3 5 0 0 0 )
(
( ( -64 0 64 -1 -0 ) ( -64 64 64 -1 -1 ) ( 0 64 64 0 -1 ) ( 64 64 64 1 -1 ) ( 64 0 64 1 -0 ) )
( ( -64 0 64 -1 -0 ) ( -64 0 64 -1 -0 ) ( 0 0 64 0 -0 ) ( 64 0 64 1 -0 ) ( 64 0 64 1 -0 ) )
( ( -64 0 64 -1 -0 ) ( -64 -64 64 -1 1 ) ( 0 -64 64 0 1 ) ( 64 -64 64 1 1 ) ( 64 0 64 1 -0 ) )
)
}
}
}

 

Cone:

 

 


// entity 0
{
"classname" "worldspawn"
// brush 0
{
patchDef2
{
common/caulk
( 9 3 0 0 0 )
(
( ( -64 0 -64 0 0 ) ( -64 0 0 0 -1 ) ( 0 0 64 0 -2.4142136574 ) )
( ( -64 -64 -64 1 0 ) ( -64 -64 0 1 -1 ) ( 0 0 64 1 -2.4142136574 ) )
( ( 0 -64 -64 2 0 ) ( 0 -64 0 2 -1 ) ( 0 0 64 2 -2.4142136574 ) )
( ( 64 -64 -64 3 0 ) ( 64 -64 0 3 -1 ) ( 0 0 64 3 -2.4142136574 ) )
( ( 64 0 -64 4 0 ) ( 64 0 0 4 -1 ) ( 0 0 64 4 -2.4142136574 ) )
( ( 64 64 -64 5 0 ) ( 64 64 0 5 -1 ) ( 0 0 64 5 -2.4142136574 ) )
( ( 0 64 -64 6 0 ) ( 0 64 0 6 -1 ) ( 0 0 64 6 -2.4142136574 ) )
( ( -64 64 -64 7 0 ) ( -64 64 0 7 -1 ) ( 0 0 64 7 -2.4142136574 ) )
( ( -64 0 -64 8 0 ) ( -64 0 0 8 -1 ) ( 0 0 64 8 -2.4142136574 ) )
)
}
}
}

 

Sphere:

 

 


// entity 0
{
"classname" "worldspawn"
// brush 0
{
patchDef2
{
common/caulk
( 11 11 0 0 0 )
(
( ( 0 0 -64 0 0 ) ( 20.7948608398 0 -63.9999961853 0 -0.3249197006 ) ( 37.6182556152 0 -51.7770881653 0 -0.6498393416 ) ( 54.4416503906 0 -39.5541725159 0 -0.9747590423 ) ( 60.8676185608 0 -19.7770862579 0 -1.2996788025 ) ( 67.2935791016 0 0.0000029415 0 -1.6245985031 ) ( 60.8676147461 0 19.7770900726 0 -1.9495180845 ) ( 54.4416503906 0 39.5541687012 0 -2.2744376659 ) ( 37.6182518005 0 51.77709198 0 -2.599357605 ) ( 20.7948627472 0 63.9999961853 0 -2.9242770672 ) ( -0.0000055951 0 64 0 -3.2491967678 ) )
( ( 0 0 -64 0.7639320493 0 ) ( 20.7948608398 15.1083507538 -63.9999961853 0.7639320493 -0.3249197006 ) ( 37.6182594299 27.3312644958 -51.7770881653 0.7639320493 -0.6498393416 ) ( 54.4416503906 39.5541763306 -39.5541725159 0.7639320493 -0.9747590423 ) ( 60.8676185608 44.2229156494 -19.7770862579 0.7639320493 -1.2996788025 ) ( 67.2935791016 48.8916511536 0.0000029415 0.7639320493 -1.6245985031 ) ( 60.8676185608 44.2229156494 19.7770900726 0.7639320493 -1.9495180845 ) ( 54.4416503906 39.5541763306 39.5541687012 0.7639320493 -2.2744376659 ) ( 37.6182518005 27.3312625885 51.77709198 0.7639320493 -2.599357605 ) ( 20.7948627472 15.1083526611 63.9999961853 0.7639320493 -2.9242770672 ) ( -0.0000055951 -0.000004065 64 0.7639320493 -3.2491967678 ) )
( ( 0 0 -64 1.5278640985 0 ) ( 6.4259643555 19.7770881653 -63.9999961853 1.5278640985 -0.3249197006 ) ( 11.6246795654 35.7770881653 -51.7770881653 1.5278640985 -0.6498393416 ) ( 16.823392868 51.7770881653 -39.5541725159 1.5278640985 -0.9747590423 ) ( 18.8091259003 57.88854599 -19.7770862579 1.5278640985 -1.2996788025 ) ( 20.7948570251 63.9999961853 0.0000029415 1.5278640985 -1.6245985031 ) ( 18.8091259003 57.8885421753 19.7770900726 1.5278640985 -1.9495180845 ) ( 16.823392868 51.7770881653 39.5541687012 1.5278640985 -2.2744376659 ) ( 11.6246776581 35.7770843506 51.77709198 1.5278640985 -2.599357605 ) ( 6.4259653091 19.7770900726 63.9999961853 1.5278640985 -2.9242770672 ) ( -0.000001729 -0.0000053212 64 1.5278640985 -3.2491967678 ) )
( ( 0 0 -64 2.291795969 0 ) ( -7.9429311752 24.4458236694 -63.9999961853 2.291795969 -0.3249197006 ) ( -14.3688983917 44.2229156494 -51.7770881653 2.291795969 -0.6498393416 ) ( -20.7948646545 64 -39.5541725159 2.291795969 -0.9747590423 ) ( -23.2493648529 71.5541763306 -19.7770862579 2.291795969 -1.2996788025 ) ( -25.7038650513 79.1083450317 0.0000029415 2.291795969 -1.6245985031 ) ( -23.2493648529 71.5541763306 19.7770900726 2.291795969 -1.9495180845 ) ( -20.7948646545 64 39.5541687012 2.291795969 -2.2744376659 ) ( -14.3688964844 44.22290802 51.77709198 2.291795969 -2.599357605 ) ( -7.9429321289 24.4458274841 63.9999961853 2.291795969 -2.9242770672 ) ( 0.0000021371 -0.0000065774 64 2.291795969 -3.2491967678 ) )
( ( 0 0 -64 3.0557279587 0 ) ( -16.8233966827 12.222910881 -63.9999961853 3.0557279587 -0.3249197006 ) ( -30.4338111877 22.11145401 -51.7770881653 3.0557279587 -0.6498393416 ) ( -44.0442237854 31.9999961853 -39.5541725159 3.0557279587 -0.9747590423 ) ( -49.2429389954 35.7770843506 -19.7770862579 3.0557279587 -1.2996788025 ) ( -54.4416503906 39.5541687012 0.0000029415 3.0557279587 -1.6245985031 ) ( -49.2429389954 35.7770843506 19.7770900726 3.0557279587 -1.9495180845 ) ( -44.0442237854 31.9999961853 39.5541687012 3.0557279587 -2.2744376659 ) ( -30.433807373 22.1114521027 51.77709198 3.0557279587 -2.599357605 ) ( -16.8233985901 12.2229118347 63.9999961853 3.0557279587 -2.9242770672 ) ( 0.0000045265 -0.0000032887 64 3.0557279587 -3.2491967678 ) )
( ( 0 0 -64 3.8196601868 0 ) ( -25.7038612366 -0.0000022471 -63.9999961853 3.8196601868 -0.3249197006 ) ( -46.4987258911 -0.000004065 -51.7770881653 3.8196601868 -0.6498393416 ) ( -67.2935791016 -0.000005883 -39.5541725159 3.8196601868 -0.9747590423 ) ( -75.2365188599 -0.0000065774 -19.7770862579 3.8196601868 -1.2996788025 ) ( -83.1794433594 -0.0000072718 0.0000029415 3.8196601868 -1.6245985031 ) ( -75.2365112305 -0.0000065774 19.7770900726 3.8196601868 -1.9495180845 ) ( -67.293586731 -0.000005883 39.5541687012 3.8196601868 -2.2744376659 ) ( -46.4987182617 -0.000004065 51.77709198 3.8196601868 -2.599357605 ) ( -25.7038631439 -0.0000022471 63.9999961853 3.8196601868 -2.9242770672 ) ( 0.0000069159 0 64 3.8196601868 -3.2491967678 ) )
( ( 0 0 -64 4.583591938 0 ) ( -16.8233947754 -12.2229137421 -63.9999961853 4.583591938 -0.3249197006 ) ( -30.433807373 -22.1114597321 -51.7770881653 4.583591938 -0.6498393416 ) ( -44.044216156 -32.0000038147 -39.5541725159 4.583591938 -0.9747590423 ) ( -49.2429351807 -35.77709198 -19.7770862579 4.583591938 -1.2996788025 ) ( -54.4416465759 -39.5541801453 0.0000029415 4.583591938 -1.6245985031 ) ( -49.242931366 -35.77709198 19.7770900726 4.583591938 -1.9495180845 ) ( -44.044216156 -32.0000038147 39.5541687012 4.583591938 -2.2744376659 ) ( -30.4338035583 -22.1114578247 51.77709198 4.583591938 -2.599357605 ) ( -16.8233947754 -12.2229146957 63.9999961853 4.583591938 -2.9242770672 ) ( 0.0000045265 0.0000032887 64 4.583591938 -3.2491967678 ) )
( ( 0 0 -64 5.3475236893 0 ) ( -7.9429326057 -24.4458236694 -63.9999961853 5.3475236893 -0.3249197006 ) ( -14.3689012527 -44.2229118347 -51.7770881653 5.3475236893 -0.6498393416 ) ( -20.7948684692 -63.9999961853 -39.5541725159 5.3475236893 -0.9747590423 ) ( -23.249370575 -71.5541763306 -19.7770862579 5.3475236893 -1.2996788025 ) ( -25.7038707733 -79.1083450317 0.0000029415 5.3475236893 -1.6245985031 ) ( -23.2493686676 -71.5541763306 19.7770900726 5.3475236893 -1.9495180845 ) ( -20.7948684692 -64 39.5541687012 5.3475236893 -2.2744376659 ) ( -14.3688993454 -44.22290802 51.77709198 5.3475236893 -2.599357605 ) ( -7.9429335594 -24.4458255768 63.9999961853 5.3475236893 -2.9242770672 ) ( 0.0000021371 0.0000065774 64 5.3475236893 -3.2491967678 ) )
( ( 0 0 -64 6.1114563942 0 ) ( 6.4259681702 -19.7770862579 -63.9999961853 6.1114563942 -0.3249197006 ) ( 11.6246852875 -35.7770881653 -51.7770881653 6.1114563942 -0.6498393416 ) ( 16.8234024048 -51.7770843506 -39.5541725159 6.1114563942 -0.9747590423 ) ( 18.809135437 -57.8885421753 -19.7770862579 6.1114563942 -1.2996788025 ) ( 20.7948684692 -63.9999923706 0.0000029415 6.1114563942 -1.6245985031 ) ( 18.809135437 -57.8885383606 19.7770900726 6.1114563942 -1.9495180845 ) ( 16.8234024048 -51.7770843506 39.5541687012 6.1114563942 -2.2744376659 ) ( 11.6246843338 -35.7770843506 51.77709198 6.1114563942 -2.599357605 ) ( 6.425968647 -19.7770881653 63.9999961853 6.1114563942 -2.9242770672 ) ( -0.000001729 0.0000053212 64 6.1114563942 -3.2491967678 ) )
( ( 0 0 -64 6.8753881454 0 ) ( 20.7948589325 -15.1083526611 -63.9999961853 6.8753881454 -0.3249197006 ) ( 37.6182556152 -27.3312664032 -51.7770881653 6.8753881454 -0.6498393416 ) ( 54.4416465759 -39.5541801453 -39.5541725159 6.8753881454 -0.9747590423 ) ( 60.8676147461 -44.2229194641 -19.7770862579 6.8753881454 -1.2996788025 ) ( 67.2935791016 -48.8916549683 0.0000029415 6.8753881454 -1.6245985031 ) ( 60.8676147461 -44.2229194641 19.7770900726 6.8753881454 -1.9495180845 ) ( 54.4416503906 -39.5541801453 39.5541687012 6.8753881454 -2.2744376659 ) ( 37.6182518005 -27.3312644958 51.77709198 6.8753881454 -2.599357605 ) ( 20.7948608398 -15.1083536148 63.9999961853 6.8753881454 -2.9242770672 ) ( -0.0000055951 0.000004065 64 6.8753881454 -3.2491967678 ) )
( ( 0 0 -64 7.6393203735 0 ) ( 20.7948608398 0.0000036359 -63.9999961853 7.6393203735 -0.3249197006 ) ( 37.6182556152 0.0000065774 -51.7770881653 7.6393203735 -0.6498393416 ) ( 54.4416503906 0.0000095189 -39.5541725159 7.6393203735 -0.9747590423 ) ( 60.8676185608 0.0000106424 -19.7770862579 7.6393203735 -1.2996788025 ) ( 67.2935791016 0.000011766 0.0000029415 7.6393203735 -1.6245985031 ) ( 60.8676147461 0.0000106424 19.7770900726 7.6393203735 -1.9495180845 ) ( 54.4416503906 0.0000095189 39.5541687012 7.6393203735 -2.2744376659 ) ( 37.6182518005 0.0000065774 51.77709198 7.6393203735 -2.599357605 ) ( 20.7948627472 0.0000036359 63.9999961853 7.6393203735 -2.9242770672 ) ( -0.0000055951 -0 64 7.6393203735 -3.2491967678 ) )
)
}
}
}

 

That should be plenty of patches :)

 

Entities of course are different from Doom 3, but I suppose a dummy def file can be made containing entityDef's in a format of Quake 3. Light entities are different too, but I think it would be the same thing - making a dummy entityDef. All that would be done by the developers using DarkRadiant for their Quake 3 compatible projects.

Link to post
Share on other sites

There's a first stub for this in the latest git commit. Loading any of the maps with brushDef and/or patchDef2 above works, but I'm not so sure about saving. Can you check it out? (You'll have to select "Quake 3" from the game types in the Preference dialog before DarkRadiant will attempt a save operation in Q3 format.) I'm not sure about whether there is support for patchDef3 in Quake3 and whether quotes around shadernames are allowed or not.

Link to post
Share on other sites

Will try in a bit (compiling). I don't think patchDef3 and "" are supported. Quake 3 doesn't load .map files as you may know. q3map2 has to compile those into .bsp. I can try manually changing patchDef version and add "" into Quake 3 map and see if q3map2 will "eat" it, but I doubt it.

 

Ok, it loads my examples, but fails to load real map from stock Quake 3:

 

http://i.imgur.com/9SMPSJU.png

 

This is stock Quake 3 map: http://pastebin.com/nRq9zEGr

 

 

 

 

Edited by motorsep
Link to post
Share on other sites

The stock map you posted contains the pre-brushDef syntax - you said "The third one, and this one I think is really dated and no one cares about it, uses old style projections (it looks like some planes are flipped in the 3D view),", so I didn't add support for it.

Link to post
Share on other sites

Oh, ok. That's no problem. Let me try opening maps from Steel Storm, those are made with NetRadiant.

 

EDIT: It seems that maps with patch surfaces can not be opened. I didn't dig yet into the issue, but some Steel Storm maps have patches, some don't. The ones that didn't have any patches, loaded fine. The ones with patches - failed.

 

I wonder if it would be hard to make DR to save lights, with offset light center, as light targeting info_null entity ?

Edited by motorsep
Link to post
Share on other sites

I wouldn't know if that's a correct info. I don't think there is a need to support old maps, because I was thinking about making new maps from scratch in DR. Q3map2 compiler uses new format anyway, so I don't think it's much on an issue.

 

I guess if there is a demand, then perhaps maybe backward compatibility would be desired.

 

What about saving lights, with offset light center, as light targeting info_null entity ? (that's how spot/projected lights would be made in NetRadiant for Quake 3 compatible engines)

Link to post
Share on other sites

What about saving lights, with offset light center, as light targeting info_null entity ? (that's how spot/projected lights would be made in NetRadiant for Quake 3 compatible engines)

Not sure I get it. The light center can already be offset, but what do you mean by "light targeting info_null"? Does this mean the light entity is targetting another entity named info_null? I'm no Quake3 mapper, I don't know what info_null is about. What should the result look like?

Link to post
Share on other sites

yes, in Doom 3 you offset light center to give direction of light (from light center to the box center if I recall correctly). In Quake 3, you can't do that simply because lights behave totally differently. So to make a spotlight (give light a direction, whether for spot light or sun light), we need to add info_null entity (a dummy) and target light entity at the info_null entity.

 

The following is the example of how light from Doom 3 (with light center offset) should be represented in Quake map:

 

Doom 3:

 

Version 2
// entity 0
{
"classname" "light"
"name" "light_1"
"origin" "0 0 0"
"light_center" "128 128 128"
"light_radius" "64 64 64"
}

 

 

Quake 3:

 


// entity 0
{
"classname" "light"
"light" "300"
"radius" "64"
"origin" "128.000000 128.000000 128.000000"
"target" "info_null_1"
"targetname" "light_1"
}
// entity 1
{
"classname" "info_null"
"origin" "0.000000 0.000000 0.000000"
"targetname" "info_null_1"
}

Edited by motorsep
Link to post
Share on other sites

Hm. I don't think I can do that without dirty hacks. Implementing this would mean that I'd need to change the number of entities while writing the map, and on the reverse discard entities when loading a Q3 map into DR, which is just asking for a lot of trouble.

 

To make life a bit easier for Q3 maps it would be possible to add a little python script action to convert a D3-style-center-offset-light into a pair of Q3-compatible entities. Somebody with a bit of python skills could easily achieve that, I assume.

Link to post
Share on other sites
To make life a bit easier for Q3 maps it would be possible to add a little python script action to convert a D3-style-center-offset-light into a pair of Q3-compatible entities. Somebody with a bit of python skills could easily achieve that, I assume.

Obsttorte might be the man for this..?

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...