"Big Maps" FitzQuakeprotocol: [90/10 Non-Tutorial]
"Big Maps" FitzQuakeprotocol: [90/10 Non-Tutorial]
This is a 90/10 non-tutorial: it doesn't tell you what to do, but tells you where to look. It operates on the idea you have some sort of diff application like WinMerge.
What This Does
Implements the FitzQuake protocol, which is the ability to run super huge maps like:
1. Warpspasm (2007)
2. A Roman Wilderness of Pain (December 2009)
3. New Soul of Evil Indian Summer (December 2008)
And other giant maps like Laboratory X, Masque of the Red Death and some others I just can't recall.
This isn't going to work on memory impaired systems (PSP), slow systems (Flash), etc. It can work in software renderers but you may need to consult the source for "aguirRe Enhanced WinQuake" at: http://user.tninet.se/~xir870k/ to work out the specifics for a software renderer. aguirRe's Enhanced WinQuake can run all those maps too.
Sources Needed
1. FitzQuake 0.80 (source) - didn't have phat map support
2. FitzQuake 0.85 (source) - added the FitzQuake protocol to play giant maps
There are a lot of changes, they are all platform neutral and involve a lot of changed limits and #defines plus support for alpha and a couple of other fields.
You can read a discussion about the protocol by Metlslime (author of FitzQuake) here:
http://forums.inside3d.com/viewtopic.php?t=1799
And his documentation here:
http://quakery.quakedev.com/qwiki/index ... e_Protocol
Changed Files Relating To Protocol
1. cl_input.c (client writing the angles as a short)
2. cl_main.c (lerp flags, CL_ReadFromServer)
3. cl_parse.c (the client reads the bits, yada, yada, yada)
4. cl_tent.c (less spammy overflow messages, technically not required)
5. client.h (limits)
6. gl_model.c (limits higher on map load, etc)
7. gl_model.h (flags, clipnodes, limits)
8. gl_efrags.c (technically not necessary, warnings and messages)
9. gl_rmain.c (alpha and other new protocol flags support)
10. gl_rmisc.c (lerping stuffs)
11. render.h (flags, etc.)
12. common.c (MSG_Write, MSG_Read)
13. common.h ^^ that
14. host.c (technically not necessarily, msgs and so forth)
15. net.h (NET_MAXMESSAGE)
16. pr_cmds.c (protocol support)
17. pr_edict.c (alpha support)
18. progs.h (alpha and lerping)
19. protocol.h
20. quakedef.h
21. r_alias.c (interpolation and lerping)
22. r_brush.c
23. r_world.c (dynamic lights #define moved elsewhere and surely raised)
24. server.h (protocol and sign on buffer)
25. sv_main.c (protocol)
26. sv_phys.c (lerping)
27. sv_user.c (protocol + MSG_ReadAngle
28. world.c (clipnodes)
The night is young. How else can I annoy the world before sunsrise? Inquisitive minds want to know ! And if they don't -- well like that ever has stopped me before ..
I'm in the process of implementing this in Engine X and I have to say that from top to bottom that the FitzQuake 0.85 protocol implementation is amongst the most well-written engine modifications as to the comments and clarity.
The night is young. How else can I annoy the world before sunsrise? Inquisitive minds want to know ! And if they don't -- well like that ever has stopped me before ..
As I am implementing this, I can't stop thinking about how impressed I am by Metlslime's code and comments.
And how "polished" and well-written it is. It was very carefully thought out and very cleanly implemented.
This is something that historically you would think would be majorly difficult to implement and understand, yet it is so clean as to both be easily understandable, to learn from and clean to implement.
And how "polished" and well-written it is. It was very carefully thought out and very cleanly implemented.
This is something that historically you would think would be majorly difficult to implement and understand, yet it is so clean as to both be easily understandable, to learn from and clean to implement.
The night is young. How else can I annoy the world before sunsrise? Inquisitive minds want to know ! And if they don't -- well like that ever has stopped me before ..
The hardest part for me was dealing with all the places in the code that an edict's memory might get cleared or initialized. I originally had a non-zero value to represent the default alpha, but it became too much of a hassle to track down all the places that an edict can get set up for re-use. I eventually did track them all down, but didn't like how many one-line changes i had to sprinkle everywhere.
By switching back to 0 for the default, the default case"just worked" in that getting memset to 0 in a dozen places didn't turn the entity invisible
By switching back to 0 for the default, the default case"just worked" in that getting memset to 0 in a dozen places didn't turn the entity invisible
10 hours +/-
Implementation imperfect. But close.
If I was working with a more vanilla base, it'd be 6 hours or maybe even 3.5 hours. Had plenty of decisions to carefully make and had to occasionally consider what the implications of some of the changes were meant to be.
The night is young. How else can I annoy the world before sunsrise? Inquisitive minds want to know ! And if they don't -- well like that ever has stopped me before ..
The current build of Engine X features the FitzQuake protocol and has EVERY change #ifdef'd and builds both WITH and WITHOUT the protocol:
Only 147 changes? Pfft.
But the #ifdefs in the engine source can be used as a tutorial (or rather a guide, since it isn't really a true tutorial and doesn't explain why) to implement the FitzQuake protocol.
On deck: a software renderer using the protocol! Only 5% chance of implementing alpha support in the software renderer, but it all depends on my mood. If I do it, give MK the credit for getting me to read all of his Makaqu modification code and MH credit for getting me off the sidelines and INSTEAD OF talking about engine coding, getting me into the actual practice of doing engine coding again.
I got kind of anti-motivated about about actually engine coding [felt like it was pointless to attack my infinite to-do list] but MH threw so many easy pitches right at me I got off the bench and stepped to the plate.
Likewise, to some extent this is aimed at R00k.
Code: Select all
E:\doit\enginex_461\WinQuake\cl_input.c(458):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_main.c(768):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_main.c(793):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(88):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(153):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(168):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(201):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(216):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(223):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(356):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(394):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(433):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(472):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(599):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(625)://#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(641):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(650):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(678):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(789):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(817):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(839):#if defined(FITZQUAKE_PROTOCOL) && defined(SUPPORTS_ENTITY_ALPHA) //HACK: if this bit is set, assume this is PROTOCOL_NEHAHRA
E:\doit\enginex_461\WinQuake\cl_parse.c(882):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(904):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(911):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(933):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(947):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(954):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(1045):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(1098):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(1168):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(1183):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(1191):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(1198):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(1212):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(1224):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(1542):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(1587):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(1604):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(1614):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(1741):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(1749):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(1779):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(1816):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(1889):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\cl_parse.c(1906):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\client.h(97):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\client.h(122):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\client.h(282):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\client.h(357):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\common.c(318):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\common.c(341):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\common.c(351):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\common.c(358):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\common.c(509):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\common.c(531):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\common.c(550):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\common.h(125):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\common.h(144):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\gl_model.c(38):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\gl_model.c(964):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\gl_model.c(1052):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\gl_model.c(1073):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\gl_model.c(1082):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\gl_model.c(1129):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\gl_model.c(1150):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\gl_model.c(1181):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\gl_model.c(1197):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\gl_model.c(1276):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\gl_model.c(1307):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\gl_model.c(1361):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\gl_model.c(1370):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\gl_model.h(185):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\gl_model.h(192):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\gl_model.h(205):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\gl_model.h(361):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\gl_model.h(384):#ifdef XFITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\gl_model.h(423):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\gl_refrag.c(162):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\gl_refrag.c(220):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\gl_rsurf.c(29):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\net.h(36):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\pr_cmds.c(509):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\pr_cmds.c(529):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\pr_cmds.c(541):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\pr_cmds.c(1610):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\pr_cmds.c(1616):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\pr_cmds.c(1652):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\pr_cmds.c(1659):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\pr_cmds.c(1675):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\pr_edict.c(24):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\pr_edict.c(184):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\pr_edict.c(554):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\pr_edict.c(895):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\pr_edict.c(1088):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\pr_edict.c(1098):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\progs.h(44):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\protocol.h(43):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\protocol.h(77):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\protocol.h(104):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\protocol.h(201):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\quakedef.h(118):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\quakedef.h(135):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\quakedef.h(260):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\render.h(36):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\render.h(97):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\render.h(157):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\server.h(68):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\server.h(75):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_main.c(39):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_main.c(48):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_main.c(122):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_main.c(210):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_main.c(223):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_main.c(246):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_main.c(257):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_main.c(287):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_main.c(303):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_main.c(318):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_main.c(329):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_main.c(559):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_main.c(596):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_main.c(858):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_main.c(940):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_main.c(1007):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_main.c(1044):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_main.c(1160):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_main.c(1183):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_main.c(1232):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_main.c(1270):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_main.c(1500):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_main.c(1522):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_main.c(1530):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_main.c(1535):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_main.c(1559):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_main.c(1569):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_main.c(1580):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_main.c(1595):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_main.c(1714):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_main.c(1826):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_phys.c(124):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_phys.c(138):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_phys.c(148):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_user.c(432):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_world.c(51):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_world.c(462):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\sv_world.c(535):#ifdef FITZQUAKE_PROTOCOL
E:\doit\enginex_461\WinQuake\version.h(79):#define FITZQUAKE_PROTOCOL
But the #ifdefs in the engine source can be used as a tutorial (or rather a guide, since it isn't really a true tutorial and doesn't explain why) to implement the FitzQuake protocol.
On deck: a software renderer using the protocol! Only 5% chance of implementing alpha support in the software renderer, but it all depends on my mood. If I do it, give MK the credit for getting me to read all of his Makaqu modification code and MH credit for getting me off the sidelines and INSTEAD OF talking about engine coding, getting me into the actual practice of doing engine coding again.
I got kind of anti-motivated about about actually engine coding [felt like it was pointless to attack my infinite to-do list] but MH threw so many easy pitches right at me I got off the bench and stepped to the plate.
Likewise, to some extent this is aimed at R00k.
The night is young. How else can I annoy the world before sunsrise? Inquisitive minds want to know ! And if they don't -- well like that ever has stopped me before ..
It's very cool that protocol 666 support is added to several engines.
May I add (for the nth time) that protocol 999 is basically an extension of 666, so it would be super easy to add support for that should it ever be desirable.
999 is still under development and may have things added to it at any time, so I'd suggest only supporting it inofficially.
RMQ has always been open about giving out code, so I'm pretty sure anyone who fancies a look at the engine should be able to get one. Once the current stream of checkins of awesomeness has subsided, maybe
The multiprotocol support in the RMQ engine is fashioned after darkplaces' way of doing it, ie you pass the protocol as an additional argument to functions that need it.
Good job again Baker.
Oh, while I'm at it, the next RMQ demo might not require prot. 999, but might require support for rotating bmodels. I guess that is largely implemented, isn't it.
May I add (for the nth time) that protocol 999 is basically an extension of 666, so it would be super easy to add support for that should it ever be desirable.
999 is still under development and may have things added to it at any time, so I'd suggest only supporting it inofficially.
RMQ has always been open about giving out code, so I'm pretty sure anyone who fancies a look at the engine should be able to get one. Once the current stream of checkins of awesomeness has subsided, maybe
The multiprotocol support in the RMQ engine is fashioned after darkplaces' way of doing it, ie you pass the protocol as an additional argument to functions that need it.
Good job again Baker.
Oh, while I'm at it, the next RMQ demo might not require prot. 999, but might require support for rotating bmodels. I guess that is largely implemented, isn't it.
Whatever you guys do will be supported in my engine[s].
Adding to the post above: Engine X 4.61 source code: download. All changes to support FitzQuake protocol encased in #ifdefs.
Adding to the post above: Engine X 4.61 source code: download. All changes to support FitzQuake protocol encased in #ifdefs.
The night is young. How else can I annoy the world before sunsrise? Inquisitive minds want to know ! And if they don't -- well like that ever has stopped me before ..
Yeah I've been there.Baker wrote:I got kind of anti-motivated about about actually engine coding [felt like it was pointless to attack my infinite to-do list]
I suggest reserving your to-do list for stuff which you really will do, and move everything else into a "wishlist". The great thing about a wishlist is that there's never any pressure to implement anything in it
Protocol 666 ...
And it's not just for hardware renderers any more!
But of course I added it to the ProQuake OpenGL/D3D/DX8 builds anyways ...
And it's not just for hardware renderers any more!
But of course I added it to the ProQuake OpenGL/D3D/DX8 builds anyways ...
The night is young. How else can I annoy the world before sunsrise? Inquisitive minds want to know ! And if they don't -- well like that ever has stopped me before ..
And not just for Windows any more
Well ... Quakespasm already runs on non-Windows platforms and uses 666 being a mod of FitzQuake.
Anywho ...
[Note: Nope not just OpenGL, ProQuake 4.66 is available in software renderer form for the Mac too.
Well ... Quakespasm already runs on non-Windows platforms and uses 666 being a mod of FitzQuake.
Anywho ...
[Note: Nope not just OpenGL, ProQuake 4.66 is available in software renderer form for the Mac too.
The night is young. How else can I annoy the world before sunsrise? Inquisitive minds want to know ! And if they don't -- well like that ever has stopped me before ..
-
- Posts: 268
- Joined: Tue Nov 24, 2009 2:20 am
- Contact: