Pragma - A work-in-progress multiplayer sandbox engine
155 replies, posted
This is a game engine I have been working on for a few years in my spare time. It has full multiplayer and modding support (including dedicated servers), supports maps created in hammer, etc.
It's similar to GMod, but I'm going in a slightly different direction. Also, since I've built this engine mostly from scratch, I'm not restricted by the engine limitations of source.
Anyway, this is mostly a hobby-project, I don't have a specific end-goal in mind at the moment. The main point for this thread is to get some feedback, suggestions, ideas, etc. I'll be using this thread to post new media whenever there's something interesting going on.
The engine is completely free and I'm usually working on it on a daily basis, however it's [b]not[/b] open-source.
There was already a thread about the engine in the [URL=https://facepunch.com/showthread.php?t=1490195]programming sub-forum[/URL], but that was during very early development and I feel like the engine is slowly reaching a point where you can actually do something with it. I will keep using the old thread for programming-related stuff which might not be that interesting to most people.
[b]Features[/b]
• Full Multiplayer-Support (Including windows and linux dedicated servers)
• Extensive modding capabilities (Using Lua)
• Live-Coding support and support for the [URL=https://studio.zerobrane.com/]ZeroBrane IDE Debugger[/URL]
• Dynamic lighting, shadows and particle systems
• Weapon, AI and Vehicle Systems
• Support for maps created in the Hammer Map-Editor
• The engine is capable of automatically porting game resources from source engine games, fallout games and elder scroll games (Latter ones still limited)
• Virtual Reality Support
• Controller Support
• etc.
[b]YouTube[/b]: [url]https://www.youtube.com/channel/UCGJJGA9ATcLr4wc5OEHXIyA[/url]
[b]Forums[/b]: [url]https://forums.pragma-engine.com/[/url]
[b]Wiki[/b]: [url]https://wiki.pragma-engine.com/[/url]
[b]Mods[/b]: [url]https://mods.pragma-engine.com/[/url]
[b]Steam[/b]: [url]https://steamcommunity.com/groups/pragmaengine[/url]
[b]Discord[/b]: [url]https://discord.gg/Ck5BcCz[/url]
[b]Download[/b]
You can get the autoupdater/launcher from [URL=http://pragma-engine.com/download.php]here[/URL]. (More information on the [URL=https://wiki.pragma-engine.com/index.php?title=Installation]wiki[/URL].)
It will download all of the engine files into the same directory as the launcher when you check for updates for the first time.
[highlight]Note:[/highlight] If you're crashing when loading a map or similar, make sure your drivers are up to date!
Also, Intel GPUs are currently unsupported. If you're lucky, it might still work, but for the time being I can't do anything about that.
The engine is running on the Vulkan rendering API, which means you need a GPU with Vulkan support! You'll also need to make sure your drivers are up to date.
You can find a list of supported Nvidia GPUs [URL=https://developer.nvidia.com/vulkan-driver]here[/URL], and for AMD [URL=http://www.amd.com/en-us/innovations/software-technologies/technologies-gaming/vulkan]here[/URL]. Intel is currently [b]not[/b] supported, however I had one person report it working on their intel card, albeit with a few crashes here and there.
While the engine technically is Linux-compatible, I haven't actually compiled it for Linux in quite a while, since it takes up a lot of time and there wasn't any demand for it so far. If there's more demand for a Linux-version in the future, I'll update it accordingly.
[b]Media[/b]
[video]https://youtu.be/G1JvibPFnyE[/video]
[video]https://youtu.be/5tohPQfRsyA[/video]
[video]https://youtu.be/UbVCBS-poyM[/video]
[video]https://youtu.be/rN84vp6NDxs[/video]
[video]https://youtu.be/EkYCrhLrB18[/video]
[video]https://youtu.be/i8Kw70dpa60[/video]
[video]https://youtu.be/vJphoc62EH8[/video]
[video]https://youtu.be/4-nRVDXyWcE[/video]
[video]https://youtu.be/Zw9yrdXpazY[/video]
[video]https://youtu.be/I8GUlUoDST4[/video]
[video]https://youtu.be/qpzdTggxtNQ[/video]
[video]https://youtu.be/wn9Ro0jF7Lo[/video]
[video]https://youtu.be/KoXhFfZUspQ[/video]
[video]https://youtu.be/-pTDM63YADA[/video]
[T]http://sciolyte.com/sharex/pragma_2017-08-24_19-43-20.jpg[/T][T]http://sciolyte.com/sharex/pragma_2017-08-24_19-43-57.jpg[/T][T]http://sciolyte.com/sharex/pragma_2017-08-25_14-17-19.jpg[/T][T]http://sciolyte.com/media/images/fork0016.jpg[/T][T]http://sciolyte.com/media/images/fork0017.jpg[/T][T]http://sciolyte.com/sharex/sciolyte_2016-09-18_22-17-48.jpg[/T][T]http://sciolyte.com/sharex/Untitled.png[/T][T]http://sciolyte.com/sharex/2016-10-21_18-21-17.gif[/T][T]http://sciolyte.com/sharex/sciolyte_2017-05-12_22-54-40.jpg[/T] [T]http://sciolyte.com/sharex/dust_ssao2.gif[/T] [T]http://sciolyte.com/sharex/pragma_2017-06-18_11-46-39.png[/T][T]http://sciolyte.com/sharex/pragma_2017-07-08_23-08-48.png[/T][T]http://sciolyte.com/sharex/devenv_2016-06-05_11-53-57.jpg[/T][T]http://sciolyte.com/sharex/sciolyte_2017-02-24_19-25-18.png[/T]
If you want to see more, you can skim through the [URL=https://facepunch.com/showthread.php?t=1490195]old thread[/URL]. Some of the stuff shown there is fairly old however.
You can also find a full changelog [URL=https://pastebin.com/hrwxeVBd]here[/URL].
[b]Special thanks to:[/b]
• [URL=http://steamcommunity.com/id/EthanTheGreatest101/][highlight]EthanTheGreat[/URL][/highlight] and [URL=http://steamcommunity.com/id/orenji/][highlight]orenii~[/highlight][/URL] for letting me test and debug on their systems
• [URL=http://steamcommunity.com/id/Blueberry_pie/][highlight]Blueberry_pie[/highlight][/URL] for permitting me to use his map, gm_fork, and [URL=http://steamcommunity.com/id/nyxanadu][highlight]Xanadu[/highlight][/URL] for his map, [URL=https://facepunch.com/showthread.php?t=1378406]gm_upstatespeedway[/URL]!
• [URL=http://steamcommunity.com/id/noteris/][highlight]Eris[/highlight][/URL] for feedback and frequently helping me with tests!
Lovely to see somebody is still actually writing their own engine for fun. I would be glad to test on Linux if you ever got to building it fresh again.
As someone who went balls deep with building in GMOD, I really really hope this goes far, I've wanted to take back the good ol' days of building cars with suspensions and shitty psuedo-combustion engines to propel them (prop engines) and just spend hours writing Expression2 scripts. If you can make an game that can give that kind of experience I know more than me would gladly throw money at such a game.
This is pretty amazing. I'm looking at it like GMod 2.0. I'd definitely buy it if it gets to release status.
Are you considering adding native tools to the engine such as Garrysmod's Precision Alignment?
[QUOTE=Qbe-tex;52490263]Amazing! Good job! Say, what's language are you using for the engine? And while it's not open-source, if you ever quit it (professional reason or otherwise) do you intend to make it open-source? Good luck with the rest of your work![/QUOTE]
It's all C++. If I ever do get to the point were I'm sure I want to quit permanently, I probably will make it open source, no promises though. :)
[QUOTE=YOMIURA;52490823]Are you considering adding native tools to the engine such as Garrysmod's Precision Alignment?[/QUOTE]
I'll add it to my todo-list. I might remake some of my old [URL=https://youtu.be/D82JgS8i7ps]wrench[/URL] [URL=https://youtu.be/YemPt32Bsp8]tools[/URL] as well, if that's something people would be interested in.
Working on some wall-moving for players and NPCs right now, just need to fix the janky camera:
[video]https://youtu.be/mFdHZOmP4-U[/video]
Silverlan, you should consider making an official thread about this, perhaps in General Games Discussion?
Could you possibly elaborate on these for me?
Do you intend for Pragma to be able to let people build a vehicle, whether boat, rail, car or plane, and have it work as good* as it does now?
What is planned to be included?
What is currently your biggest problem? Biggest fear?
Can potential gamemodes be created for Pragma? Current examples such as TTT, Sandbox, RP?
You should consider making a subreddit as well.
This looks great. How many people can play at a time? Also, I'm gonna reask a question from above: Can you make gamemodes for Pragma?
I don't know how much you are going for the building aspect of a new GMOD, but I know you've made me extremely hyped so much so that I'd want to see some sort of implementations of these gmod tools/addons in your own way:
1. Precision Alignment (as said earlier)
2. Precision Tool
3. Advanced Duplicator 2 functionality but not exact implementation
4. Stacker?
5. Fin/Propeller functions, like creating wings and propulsion physics
6. A native proper implementation of Visual Clip?
7. The physics of objects/props having different weight, and the functionality to measure weight, change weight etc
8. Smartsnap, or at least on "supported models"
9. No collide, advanced ball-socket or something similar etc.
10. A scripting system that allows people to do their own addons, so we can get something similar to Wiremod etc.
Obviously you shouldn't do too similar implementations but these kind of functions I would love to see in a game that actually has an engine made for building. Thanks for even giving me hope on something that could create new awesome moments in building but also bring back the glory days of gmod building.
Mostly asking for RP-related gamemodes. Always wanted to do HL2RP on something that isn't gmod.
[QUOTE=Solomon;52492190]Mostly asking for RP-related gamemodes. Always wanted to do HL2RP on something that isn't gmod.[/QUOTE]
a thousand agrees
[QUOTE=IAmAnooB;52492189]I don't know how much you are going for the building aspect of a new GMOD, but I know you've made me extremely hyped so much so that I'd want to see some sort of implementations of these gmod tools/addons in your own way:
1. Precision Alignment (as said earlier)
2. Precision Tool
3. Advanced Duplicator 2 functionality but not exact implementation
4. Stacker?
5. Fin/Propeller functions, like creating wings and propulsion physics
6. A native proper implementation of Visual Clip?
7. The physics of objects/props having different weight, and the functionality to measure weight, change weight etc
8. Smartsnap, or at least on "supported models"
9. No collide, advanced ball-socket or something similar etc.
10. A scripting system that allows people to do their own addons, so we can get something similar to Wiremod etc.
Obviously you shouldn't do too similar implementations but these kind of functions I would love to see in a game that actually has an engine made for building. Thanks for even giving me hope on something that could create new awesome moments in building but also bring back the glory days of gmod building.[/QUOTE]
smartsnap is made obsolete by PA. A pragma implementation would just confuse people. If users really want it, a port would not be too difficult to write.
Silverlan, should I subit crash diagnostics to the forum, here, or some other system you have to handle them?
If you could turn GMod into this, I think Garry would be glad to hire you because you'd pretty much save his game. Amazing work!
is this as viable for screenshots as GMod? GMod can have some really frustrating limitations but it's a lot easier to pick up than SFM, so a good intermediary like this would be grand
[QUOTE=Solomon;52492190]Mostly asking for RP-related gamemodes. Always wanted to do HL2RP on something that isn't gmod.[/QUOTE]
RP is pretty overrated on gmod, there used to be a tonne more lively gamemodes before DarkRP & TTT toke 95% of the limelight.
Back on topic, excellent work dude! That is by far no easy task to code an engine from scratch.
[QUOTE=Giginigi;52492105]Silverlan, you should consider making an official thread about this, perhaps in General Games Discussion?[/QUOTE]
I feel like this is already the best sub-forum for this. Threads in the general games discussion sub-forum tend to go under relatively quickly, and I think most people go there for specific threads that they already know about, ignoring everything else.
[QUOTE=Giginigi;52492105]Do you intend for Pragma to be able to let people build a vehicle, whether boat, rail, car or plane, and have it work as good* as it does now?[/QUOTE]
There's no specific system for boats or planes at the moment (the Lua-implementation has everything you'd need to build one yourself though), but there is one for vehicles. The vehicle physics are pretty bad at the moment, haven't quite figured out what to do about that yet. I might look into that again soon.
[QUOTE=Giginigi;52492105]What is currently your biggest problem?[/QUOTE]
Vehicle physics, I suppose. I'm using [URL=http://bulletphysics.org/wordpress/]bullet's vehicle implementation[/URL] right now, which has a ton of flaws.
[QUOTE=Giginigi;52492105]Can potential gamemodes be created for Pragma? Current examples such as TTT, Sandbox, RP?[/QUOTE]
[QUOTE=Solomon;52492187]Also, I'm gonna reask a question from above: Can you make gamemodes for Pragma?[/QUOTE]
Sure, there is a gamemode system included. I can write a tutorial for that if you'd like.
[QUOTE=Solomon;52492187]This looks great. How many people can play at a time?[/QUOTE]
Honestly, I have no clue. I haven't done much multiplayer testing so far. I'll try to optimize as much as possible if any problems come up.
[QUOTE=IAmAnooB;52492189]I don't know how much you are going for the building aspect of a new GMOD, but I know you've made me extremely hyped so much so that I'd want to see some sort of implementations of these gmod tools/addons in your own way:
[...]
6. A native proper implementation of Visual Clip?[/QUOTE]
You mean like this?
[video]https://youtu.be/0Mvb5U09F74[/video]
[QUOTE=IAmAnooB;52492189]10. A scripting system that allows people to do their own addons, so we can get something similar to Wiremod etc.[/QUOTE]
Not sure what you mean? There's a huge Lua-integration and people can create their own addons easily. I've already created a bunch of example addons on the [URL=https://mods.pragma-engine.com/]modding hub[/URL].
[QUOTE=IAmAnooB;52492189]1. Precision Alignment (as said earlier)
2. Precision Tool
3. Advanced Duplicator 2 functionality but not exact implementation
4. Stacker?
5. Fin/Propeller functions, like creating wings and propulsion physics
6. A native proper implementation of Visual Clip?
7. The physics of objects/props having different weight, and the functionality to measure weight, change weight etc
8. Smartsnap, or at least on "supported models"
9. No collide, advanced ball-socket or something similar etc.[/QUOTE]
All of that is possible through Lua already, I'll see if I can create some ingame tools soon.
I've also been wanting to create a sims-like system for creating walls, floors, etc.
[QUOTE=YOMIURA;52492214]smartsnap is made obsolete by PA. A pragma implementation would just confuse people. If users really want it, a port would not be too difficult to write.
Silverlan, should I subit crash diagnostics to the forum, here, or some other system you have to handle them?[/QUOTE]
What's PA?
You can post the crash information on the [URL=https://facepunch.com/showthread.php?t=1490195]old thread[/URL], I'll check it out as soon as I can. Or just [URL=http://steamcommunity.com/id/silverlan/]add me on steam[/URL].
[QUOTE=Cone;52492262]is this as viable for screenshots as GMod? GMod can have some really frustrating limitations but it's a lot easier to pick up than SFM, so a good intermediary like this would be grand[/QUOTE]
Nah, there's no face-posing, I have no idea how well you can pose ragdolls (haven't tested), there are no filters, etc. Maybe at some point in the future, but that's not a priority at the moment.
[QUOTE=LoneWolf_Recon;52492340]RP is pretty overrated on gmod, there used to be a tonne more lively gamemodes before DarkRP & TTT toke 95% of the limelight.[/QUOTE]
I agree, sandbox, DarkRP and TTT seem to make up for 90% of all servers in gmod nowadays.
I don't have anything against a roleplay gamemode inherently, but I'd like to see some variation. I have some ideas to prevent the engine from being 'dominated' by a handful of gamemodes if it comes down to it. (e.g. prioritizing lesser-played gamemodes in the server browser, highlighting certain gamemodes, etc.)
[QUOTE=LoneWolf_Recon;52492340]Back on topic, excellent work dude! That is by far no easy task to code an engine from scratch.[/QUOTE]
Thanks. :)
If anyone wants to see some tutorials for something specific, let me know and I'll try to get to it asap.
PA is Precision Alignment, as for the clipping yeah but a rendering only mode would be nice. So the physic model/hitbox is still the same.
All those things can be scripted, my bad. It's more that I wanted to see proper engine support for them all. Thanks for taking the time answering me though!
S-So, how much do I news to pay you to turn this into a base framework for people to do RP
Can the maps be larger than in source?
[QUOTE=Solomon;52492448]S-So, how much do I news to pay you to turn this into a base framework for people to do RP[/QUOTE]
I mean it seems like what you need is already there/going to coincidentally be there if you really must. You just need a map ported and some lua developers.
[QUOTE=Solomon;52492448]S-So, how much do I news to pay you to turn this into a base framework for people to do RP[/QUOTE]
Well, I'm not gonna create a RP gamemode myself, but I'll gladly help anyone trying to create their own gamemode.
[QUOTE=unrezt;52492460]Can the maps be larger than in source?[/QUOTE]
Yes and no. The engine has no arbitrary map-limit, you should be able to go a LOT larger than in source. Eventually you'd run into precision errors, but I don't think you'd ever realistically reach that size anyway.
Problem is, there's still the map-size limit in hammer, and as far as I know there's no way around that. You could generate larger map geometry in Lua, or just use a model I suppose.
[thumb]https://cloud.zarth.xyz/s/4dMZiVaMZVU8O3H/download[/thumb]
I'm sure reports about the forums were what you were expecting.
I admire your dedication from toes to top of my dick and beyond.
Great work, question about light sources.
Is it possible to have day/night cycles?
Space Engineers fan asking for:
- Localized physics (aka being able to stand on a ship that's moving fast as fuck)
- Maximum map size: gigantic. GMOD/Source had limitations on map size unfortunately.
[QUOTE=Silverlan;52492488]
Yes and no. The engine has no arbitrary map-limit, you should be able to go a LOT larger than in source. Eventually you'd run into precision errors, but I don't think you'd ever realistically reach that size anyway.
Problem is, there's still the map-size limit in hammer, and as far as I know there's no way around that. You could generate larger map geometry in Lua, or just use a model I suppose.[/QUOTE]
You can map for source without hammer, for example there is Anvil (may be named differently now, it's from the guy who made wallworm) for 3ds max. You would still likely need a custom vmf compiler though.
[QUOTE=unrezt;52492598]You can map for source without hammer, for example there is Anvil (may be named differently now, it's from the guy who made wallworm) for 3ds max. You would still likely need a custom vmf compiler though.[/QUOTE]
If you wanted to get crazy, you could use a text editor to make maps. Source stores the map data in a pretty easy to read way. This makes it easier to make compatible programs if you understand the structure as well.
[CODE]world
{
"id" "1"
"mapversion" "7"
"classname" "worldspawn"
"detailmaterial" "detail/detailsprites"
"detailvbsp" "detail.vbsp"
"maxpropscreenwidth" "-1"
"skyname" "ramadisky"
"timeofday" "5"
solid
{
"id" "5810"
side
{
"id" "360"
"plane" "(-16376 16376 16376) (16376 16376 16376) (16376 -16376 16376)"
"material" "TOOLS/TOOLSSKYBOX"
"uaxis" "[1 0 0 0] 0.25"
"vaxis" "[0 -1 0 0] 0.25"
"rotation" "0"
"lightmapscale" "16"
"smoothing_groups" "0"
}
side
{
"id" "359"
"plane" "(-16376 16376 16376) (-16376 -16376 16376) (-16376 -16376 -16376)"
"material" "TOOLS/TOOLSSKYBOX"
"uaxis" "[0 1 0 0] 0.25"
"vaxis" "[0 0 -1 0] 0.25"
"rotation" "0"
"lightmapscale" "16"
"smoothing_groups" "0"
}
side
{
"id" "358"
"plane" "(16376 16376 -16376) (16376 -16376 -16376) (16376 -16376 16376)"
"material" "TOOLS/TOOLSSKYBOX"
"uaxis" "[0 1 0 0] 0.25"
"vaxis" "[0 0 -1 0] 0.25"
"rotation" "0"
"lightmapscale" "16"
"smoothing_groups" "0"
}
side
{
"id" "357"
"plane" "(16376 16376 16376) (-16376 16376 16376) (-16376 16376 -16376)"
"material" "TOOLS/TOOLSSKYBOX"
"uaxis" "[1 0 0 0] 0.25"
"vaxis" "[0 0 -1 0] 0.25"
"rotation" "0"
"lightmapscale" "16"
"smoothing_groups" "0"
}
side
{
"id" "356"
"plane" "(16376 -16376 -16376) (-16376 -16376 -16376) (-16376 -16376 16376)"
"material" "TOOLS/TOOLSSKYBOX"
"uaxis" "[1 0 0 0] 0.25"
"vaxis" "[0 0 -1 0] 0.25"
"rotation" "0"
"lightmapscale" "16"
"smoothing_groups" "0"
}
side
{
"id" "355"
"plane" "(1130 -595 1506) (1130 2793 1506) (-2690 2793 1506)"
"material" "TOOLS/TOOLSSKYBOX"
"uaxis" "[1 0 0 0] 0.25"
"vaxis" "[0 -1 0 0] 0.25"
"rotation" "0"
"lightmapscale" "16"
"smoothing_groups" "0"
}
editor
{
"color" "0 234 171"
"visgroupshown" "1"
"visgroupautoshown" "1"
"cordonsolid" "1"
}
}[/CODE]
[QUOTE=Thomas, TTC;52492822]If you wanted to get crazy, you could use a text editor to make maps. Source stores the map data in a pretty easy to read way. This makes it easier to make compatible programs if you understand the structure as well.
[CODE]world
{
"id" "1"
"mapversion" "7"
"classname" "worldspawn"
"detailmaterial" "detail/detailsprites"
"detailvbsp" "detail.vbsp"
"maxpropscreenwidth" "-1"
"skyname" "ramadisky"
"timeofday" "5"
solid
{
"id" "5810"
side
{
"id" "360"
"plane" "(-16376 16376 16376) (16376 16376 16376) (16376 -16376 16376)"
"material" "TOOLS/TOOLSSKYBOX"
"uaxis" "[1 0 0 0] 0.25"
"vaxis" "[0 -1 0 0] 0.25"
"rotation" "0"
"lightmapscale" "16"
"smoothing_groups" "0"
}
side
{
"id" "359"
"plane" "(-16376 16376 16376) (-16376 -16376 16376) (-16376 -16376 -16376)"
"material" "TOOLS/TOOLSSKYBOX"
"uaxis" "[0 1 0 0] 0.25"
"vaxis" "[0 0 -1 0] 0.25"
"rotation" "0"
"lightmapscale" "16"
"smoothing_groups" "0"
}
side
{
"id" "358"
"plane" "(16376 16376 -16376) (16376 -16376 -16376) (16376 -16376 16376)"
"material" "TOOLS/TOOLSSKYBOX"
"uaxis" "[0 1 0 0] 0.25"
"vaxis" "[0 0 -1 0] 0.25"
"rotation" "0"
"lightmapscale" "16"
"smoothing_groups" "0"
}
side
{
"id" "357"
"plane" "(16376 16376 16376) (-16376 16376 16376) (-16376 16376 -16376)"
"material" "TOOLS/TOOLSSKYBOX"
"uaxis" "[1 0 0 0] 0.25"
"vaxis" "[0 0 -1 0] 0.25"
"rotation" "0"
"lightmapscale" "16"
"smoothing_groups" "0"
}
side
{
"id" "356"
"plane" "(16376 -16376 -16376) (-16376 -16376 -16376) (-16376 -16376 16376)"
"material" "TOOLS/TOOLSSKYBOX"
"uaxis" "[1 0 0 0] 0.25"
"vaxis" "[0 0 -1 0] 0.25"
"rotation" "0"
"lightmapscale" "16"
"smoothing_groups" "0"
}
side
{
"id" "355"
"plane" "(1130 -595 1506) (1130 2793 1506) (-2690 2793 1506)"
"material" "TOOLS/TOOLSSKYBOX"
"uaxis" "[1 0 0 0] 0.25"
"vaxis" "[0 -1 0 0] 0.25"
"rotation" "0"
"lightmapscale" "16"
"smoothing_groups" "0"
}
editor
{
"color" "0 234 171"
"visgroupshown" "1"
"visgroupautoshown" "1"
"cordonsolid" "1"
}
}[/CODE][/QUOTE]
ctf_2fort (a small map) alone is about 500000 lines so uhh, good luck with that lmao.
The best thing though, is that there likely is some crazy sod who has actually made a proper map with a text editor alone.
Why not simultaneous map loading so you can load two maps at once
[editline]21st July 2017[/editline]
obviously theres a problem with linking up maps but im sure enterprising young mappers can get around it
So you mentioned this is similar to Gmod, but what separates the two? From what I'm looking at your engine is more of a early version of Garry's Mod with a more modding friendly environment?
To others in this thread: what makes this a more appealing alternative?
a more versatile and less archaic engine
Sorry, you need to Log In to post a reply to this thread.