"Big Maps" FitzQuakeprotocol: [90/10 Non-Tutorial]

Post tutorials on how to do certain tasks within game or engine code here.
Baker
Posts: 3666
Joined: Tue Mar 14, 2006 5:15 am

"Big Maps" FitzQuakeprotocol: [90/10 Non-Tutorial]

Post by Baker »

Image

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.

Image Image

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? 8) Inquisitive minds want to know ! And if they don't -- well like that ever has stopped me before ..
Baker
Posts: 3666
Joined: Tue Mar 14, 2006 5:15 am

Post by Baker »

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? 8) Inquisitive minds want to know ! And if they don't -- well like that ever has stopped me before ..
mh
Posts: 2292
Joined: Sat Jan 12, 2008 1:38 am

Post by mh »

:D

I found the same when I did it myself; really easy as pie to implement, and it should definitely become a standard.
We had the power, we had the space, we had a sense of time and place
We knew the words, we knew the score, we knew what we were fighting for
Baker
Posts: 3666
Joined: Tue Mar 14, 2006 5:15 am

Post by Baker »

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.
The night is young. How else can I annoy the world before sunsrise? 8) Inquisitive minds want to know ! And if they don't -- well like that ever has stopped me before ..
metlslime
Posts: 316
Joined: Tue Feb 05, 2008 11:03 pm

Post by metlslime »

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 :)
Baker
Posts: 3666
Joined: Tue Mar 14, 2006 5:15 am

Post by Baker »

Image

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? 8) Inquisitive minds want to know ! And if they don't -- well like that ever has stopped me before ..
Baker
Posts: 3666
Joined: Tue Mar 14, 2006 5:15 am

Post by Baker »

The current build of Engine X features the FitzQuake protocol and has EVERY change #ifdef'd and builds both WITH and WITHOUT the protocol:

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
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. :D
The night is young. How else can I annoy the world before sunsrise? 8) Inquisitive minds want to know ! And if they don't -- well like that ever has stopped me before ..
goldenboy
Posts: 924
Joined: Fri Sep 05, 2008 11:04 pm
Location: Kiel
Contact:

Post by goldenboy »

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 :-P

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.
Baker
Posts: 3666
Joined: Tue Mar 14, 2006 5:15 am

Post by Baker »

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.
The night is young. How else can I annoy the world before sunsrise? 8) Inquisitive minds want to know ! And if they don't -- well like that ever has stopped me before ..
andrewj
Posts: 133
Joined: Mon Aug 30, 2010 3:29 pm
Location: Australia

Post by andrewj »

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]
Yeah I've been there.

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 :lol:
Baker
Posts: 3666
Joined: Tue Mar 14, 2006 5:15 am

Post by Baker »

Protocol 666 ...

And it's not just for hardware renderers any more!


Image

Image

But of course I added it to the ProQuake OpenGL/D3D/DX8 builds anyways ...

Image
The night is young. How else can I annoy the world before sunsrise? 8) Inquisitive minds want to know ! And if they don't -- well like that ever has stopped me before ..
qbism
Posts: 1236
Joined: Thu Nov 04, 2004 5:51 am
Contact:

Post by qbism »

:D
trans + big + sw = sweet!
Baker
Posts: 3666
Joined: Tue Mar 14, 2006 5:15 am

Post by Baker »

And not just for Windows any more :D

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.

Image
The night is young. How else can I annoy the world before sunsrise? 8) Inquisitive minds want to know ! And if they don't -- well like that ever has stopped me before ..
dreadlorde
Posts: 268
Joined: Tue Nov 24, 2009 2:20 am
Contact:

Post by dreadlorde »

Did I just see software-rendered transparent water?
Ken Thompson wrote:One of my most productive days was throwing away 1000 lines of code.
Get off my lawn!
Baker
Posts: 3666
Joined: Tue Mar 14, 2006 5:15 am

Post by Baker »

Yeah, courtesy of code from MK's Makaqu engine.
The night is young. How else can I annoy the world before sunsrise? 8) Inquisitive minds want to know ! And if they don't -- well like that ever has stopped me before ..
Post Reply