@ericw
#2065 posted by mh on 2016/06/16 20:55:31
MH - yeah, trying your Inside3d tutorial on decoupling the server / client FPS is on my wishlist.
I've better code since, unreleased but if you're ever looking at this I can give you a code dump.
@ericw
#2066 posted by Baker on 2016/06/16 20:59:37
In DirectQ, which had client/server decoupling if you turned left or right using the keyboard while moving forward you had jerky movement, like a mild stutter.
DarkPlaces and the QW clients don't, was something I wanted to get to the bottom of.
In 2014, I spent some time trying to implement client/server independence before ultimately moving it to the back of the list because that would have just been a piece of a more ambitious goal like implementing DPP7 or some sort of predictive protocol for better coop.
(Which itself is quite a laundry list -- delta compression, server timestamps, baseline, acks, etc. etc. and of course implementing IPv6 and connectionless connections.)
Merely implementing client/server independence DirectQ style is no small task :( Timing nuances are everywhere, even in a few places they have no reasonable place existing.
Spike takes timing to even more of an extreme by creating a separate thread for the server.
/Pandora's box
#2067 posted by Baker on 2016/06/16 21:01:58
But yeah, when I made a run at it, I had all of mh's notes from insideqc I could find on-screen for reference.
I'd say multiple controller support and splitscreen in a decent engine is more important ;)
@baker
#2069 posted by Spike on 2016/06/16 21:45:40
its DP that can run the server on a different thread. the real issue with running the server on a different thread is that of cvars and commands. cvar_set would require a full-blown sync to ensure the other thread isn't reading cvars that are about to go away, while commands also need some sort of sync - which is not what you want with +forward etc.
on the other hand, running the server in an entirely different process skips over ALL of that, with more understandable behaviour for the user. much fewer mutexes, much less likely to break other stuff, but more annoying to configure.
either way your client needs to be able to properly cope with dropped/delayed packets.
#2070 posted by mh on 2016/06/16 23:59:18
In DirectQ, which had client/server decoupling if you turned left or right using the keyboard while moving forward you had jerky movement, like a mild stutter.
Part of the problem there was that I'd made a huge mess of the timer code well before then. In earlier versions you can timescale down and see how atrociously jerky it really is, and it took me a long time and many revisions to get things back to something that even approached correct. I don't think I was ever 100% successful either, and I didn't really understand the subtleties of the timer code at the time.
Latest Version Bug?
prev weapon bind does not seem to work for some reason. Anyone else getting this?
#2072 posted by Baker on 2016/06/25 23:20:24
Prev weapon is controlled by QuakeC and QuakeC only. Some mods don't support the prev weapon impulse, one example is Duke of Ontranto and I think another example is Castle of Koohoo.
(Mark V uses the Requiem engine cheat to make prev weapon available in about any mod, but it isn't 100% fullproof and at least one mod --- Neruins --- it doesn't work "right" at all)
N64 Style Rumble Support?
I really, really appreciate the Xinput controller support added to recent builds of QS but I was wondering if it would at all be possible to add rumble support?
My first foray into Quake was on the good old N64. Two things I really miss from that version is centred message text (though I don't think you're interested in adding that option) and the other is the Rumble Pak.
It adds some real heft to the weapon fire.
Splitscreen Support
please... please please please......
(obvs you'd need to have support for more than 1 pad)
Splitscreen
#2075 posted by mh on 2016/06/27 17:36:44
This has come up quite a few times, and I think Spike has given some good discussions on what's involved, but one thing to realise is that this:
(obvs you'd need to have support for more than 1 pad)
Isn't true.
You need a hell of a lot more.
You need to recode the engine to be able to support 2 or more clients, running concurrently, in the same process.
#2076 posted by Izhido on 2016/06/27 19:27:42
And considering how there are more global variables in the Quake engine than atoms in our solar system, that is going to be a huuuge, collosal task.
I wonder, if that's the case, if we should consider instead recoding the engine completely, from scratch. And while we're at it, doing away with the hardcoded engine limits.
@Izhido Re:Limits
#2077 posted by Baker on 2016/06/27 20:17:43
Raised limits have long been standardized -- and mostly don't present a problem in modern times.
What Quakespasm uses as limits is essentially the standard. Those limits are ...
1) BSP2 for map limits
2) For non-map limits, the limits are nearly unchanged from FitzQuake 0.85 (with 2 small modifications, if I recall, max packet size and visedicts)
Protocol 666 --- written by metlslime in FitzQuake 0.85 in 2009. Supercedes protocol 15. If there were awards in Quake, metlslime would have won something like "Best Modification of The Decade" or something.
http://celephais.net/fitzquake --- comparing the FitzQuake 0.85 vs. FitzQuake 0.80 source codes.
http://forums.insideqc.com/viewtopic.php?f=12&t=2450 (summary of protocol 666 changes)
BSP2 --- written by MH in 2011 or 2012. Similarly outstanding like protocol 666.
Spike made a BSP2 patch of Mark V, which was used to easily port BSP2 to Quakespasm ...
http://triptohell.info/moodles/junk/markv_bsp2.zip <--- changes for BSP2
... and later probably the basis of BSP2 support in other engines like Super8 and Qrack, if I recall correctly. DarkPlaces and FTE support BSP2 as well. BSP2 was written by mh for the RemakeQuake engine.
Requiem Impulse 12 Hack
#2078 posted by qbism on 2016/06/28 05:32:29
I was able to get prev weap to work with ne_ruins a while ago based on reQuiem. It may require omission of quaketest compatibility or similar to obtain this result.
@qb
#2079 posted by Baker on 2016/06/28 05:56:31
The Requiem impulse 12 hack will crash neruins. Give yourself all weapons and ammo, then use impulse 12 a whole bunch. *boom*
#2080 posted by Baker on 2016/06/28 05:58:00
neruins doesn't need a impulse 12 hack. It has impulse 12 support for prev weapon in the progs. Nevertheless, the Requiem impulse 12 hack explodes on neruins.
#2081 posted by dwere on 2016/06/28 09:41:01
ne_ruins is a strange release. It's the only mod that screws with my movement speed settings, maybe except total conversions like Malice.
No, wait, I think I caught OpenQuartz doing something similar.
Impulse 12...
#2082 posted by JPL on 2016/06/28 19:58:12
try "give all" instead.. maybe this works.. though..
Baker
#2083 posted by necros on 2016/06/29 01:44:14
What's wrong with cycle reverse in ne_ruins? I always use 1.6 progs which has the reverse cycle function.
#2084 posted by Baker on 2016/06/29 02:41:16
Nothing is wrong with ne_ruins. The Requiem impulse 12 hack has a certain method of trying to determine whether or not a mod supports impulse 12 previous weapon and some it depends on QuakeC function names.
In the case of ne_ruins, it (falsely) concludes that ne_ruins doesn't have impulse 12 support and then does forced progs hacky kung-fu that explodes.
The only thing remarkable about ne_ruins is that it is first known mainstream mod that the impulse 12 hack doesn't play nice with.
Mark V has a cvar named "sv_fix_no_impulse12_exceptions" and the value is "ne_ruins" (supports comma delimited list i.e. "ne_ruins,kinns_new_sp" would work) --- so as you can imagine ne_ruins doesn't crash Mark V any more.
Kinns_new_sp...
#2085 posted by generic on 2016/06/29 03:06:16
Noted!
#2086 posted by necros on 2016/06/29 05:07:50
interesting. maybe because i refactored a lot of the impulse handling and renamed the W_WeaponFrame method to player_processInput?
what do you check for to determine that there isn't support?
#2087 posted by Baker on 2016/06/29 05:43:08
a) It looks for an ImpulseCommands function. If it cannot find one, assumes there is impulse 12 support.
b) Found an ImpulseCommands function. Check for a statement that checks to see if self.impulse == 12. If found one, assumes there is impulse 12 support, otherwise assumes there is not impulse 12 support.
ne_ruins apparently has an ImpulseCommands function but doesn't check for impulse 12 there.
Whitelist?
#2088 posted by qbism on 2016/06/29 06:06:23
"sv_fix_no_impulse12_exceptions" drips off the tounge like "r_nolerp_list", but could the approach be a whitelist instead of a blacklist? That is, a list of the old classic maps that need it.
The reQuiem impulse 12 hack is missing a 'default' fall-through during switch. The prev weap crash seems to be solved by coding the default to axe. But now next weap will fail... because it's not really an axe, it's a book or something...
#2089 posted by Baker on 2016/06/29 06:35:23
Well, there have to be a finite number of single player mods without impulse 12 support.
And in theory, if someone had the entire Quaddicted archive, could code an engine to switch gamedir to each gamedir and if impulse 12 support was not detected, write it to a log along with maybe ...
a) the CRC16 (what Quake uses), the filesize in bytes and maybe throw in a MD5 (because GitHub uses MD5 for file comparison and Linus Torvalds seems to how versioning down to a science)
b) and the file date and time from the archive.
1) Koohoo
2) Stuff using CustEnts like about all of Fat Controller's stuff
3) Probably a few random ones where the author could write QuakeC but used a bad progs base
Then you have to determine what dumb progs exist like Quake Progs 1.01 --- or is it 1.02? --- but catch the ones that aren't 1.06.
So yeah, whitelisting would work very well --- eventually. And would be the best solution long term.
|