News | Forum | People | FAQ | Links | Search | Register | Log in
Mark V - Release 1.00
http://quakeone.com/markv/

* Nehahra support -- better and deeper link
* Mirror support, "mirror_" textures. video
* Quaddicted install via console (i.e. "install travail")
* Full external texture support DP naming convention
* Enhanced dev tools texturepointer video inspector video
* IPv6 support, enhanced server capabilities
* Enhance co-operative play (excels at this!)
* Software renderer version (WinQuake)
* "Find" information command (ex. type "find sky")

Thanks to the beta testers! NightFright, fifth, spy, gunter, pulsar, johnny law, dwere, qmaster, mfx, icaro, kinn, adib, onetruepurple, railmccoy

And thanks to the other developers who actively provided advice or assistance: Spike (!), mh, ericw, metlslime and the sw guys: mankrip and qbism.

/Mac version is not current yet ...; Linux will happen sometime in 2017
First | Previous | Next | Last
@r00k - Gunter Quote 
Your quote of gunter -- that's actually probably the strongest argument I've seen.

Not the "other games" part -- I'm indifferent about that -- but the +speed "doesn't do anything if you already running".

I somehow missed seeing that in the thread until now. Probably because where lots of comments in a short period of time. 
Sidespeed 
The core issue is that all of the cl_*speed cvars relating to movement have defaults of 200, with the exception of cl_sidespeed which is 350.

Most people are used to "always run" just doubling forward and back speed, so it becomes forward 400, back 400, side 350 and up 200 (up is rarely used).

Doubling the speed on all axes, either via +speed or a Quake II-ish method, will increase cl_sidespeed further and cause it to dominate.

Quake II changes cl_sidespeed to 200 and removes cl_backspeed. I'm not sure when cl_sidespeed was changed but I do know that cl_backspeed was removed in the last month before Quake II went gold, so that was a change made after Quake II was it's own engine rather than just an experimental branch of Quake.

Quake II also changes cl_forwardspeed to not be saved to your config. I believe saving it was just a hack in Quake 1 so that the always run setting would be saved, but have no evidence either way.

All of this is discussion points. I know which behaviour I personally prefer but I'm not trying to convince anyone else. 
Capturevideo 
So, does capturevideo only work when watching a demo? Or can it record "live" gameplay? I set my codec and FPS but it complains about them not being set when i enter the command. If it only works on demos, adding that explanation to the error text would be useful. 
 
You can capture in real time, but capturevideo is intense and not necessarily a good fit for real-time capture --- it's going to be an fps/cpu hit and at higher resolutions the penalty gets stiff.

bind x "capturevideo toggle"

Make sure you have the other capturevideo settings the way you want:

capturevideo_codec xvid // I'd recommend this at least at first
capturevideo_fps 15 // You can always increase it.

Smaller resolutions like 640 x 480 are going to work better than larger ones because pixel count increases drastically.

You may also wish to consider something like Bandicam which works great with DirectX which Mark V DX9 obviously is. Someone earlier in the thread said how great Bandicam is. 
 
"Quake II changes cl_sidespeed to 200 and"

no wonder i always though sidespeed was weird in quake 1.
I played Quake1 freeware version all the way through, then later played Quake II extensively. Then came back to Quake 1.

//R00k: i didnt want +/-speed with 'always run on' to eventually STOP the player, but instead toggle the speed from walk to run, or run to walk.

if (cl_basespeedkey.value && cl_movespeedkey.value)
{
if ((cl_forwardspeed.value > 200) && (in_speed.state & 1))
{
if (!(in_klook.state & 1))
{
cmd->forwardmove += 200 * CL_KeyState (&in_forward);
cmd->forwardmove -= 200 * CL_KeyState (&in_back);
}
}
else
{
if (!(in_klook.state & 1))
{
cmd->forwardmove += cl_forwardspeed.value * CL_KeyState (&in_forward);
cmd->forwardmove -= cl_backspeed.value * CL_KeyState (&in_back);
}

if (in_speed.state & 1)
{
cmd->forwardmove *= cl_movespeedkey.value;
cmd->sidemove *= cl_movespeedkey.value;
cmd->upmove *= cl_movespeedkey.value;
}
}
}
else
{
if (!(in_klook.state & 1))
{
cmd->forwardmove += cl_forwardspeed.value * CL_KeyState (&in_forward);
cmd->forwardmove -= cl_backspeed.value * CL_KeyState (&in_back);
}

if (in_speed.state & 1)
{
cmd->forwardmove *= cl_movespeedkey.value;
cmd->sidemove *= cl_movespeedkey.value;
cmd->upmove *= cl_movespeedkey.value;
}
}//Phew!


only issue i have with above code is when you set your speed cvars to something like 180 then you will go in the opposite direction with +speed :P 
 
no wonder i always though sidespeed was weird in quake 1.

Probably to make dodging easier for keyboard-only players. Once again, only somewhat relevant in 1996.

Useless trivia: Chasm made itself look like even more of a Quake clone by copying this behavior.

only issue i have with above code is when you set your speed cvars to something like 180 then you will go in the opposite direction with +speed :P

Uhhhh, I have them at 160... 
 
So is that "reloading the level dead" bug specific to Mark V? I've been getting it a lot lately. Don't remember ever seeing it with QS. 
Centerprint Positioning 
<p>if (scr_center_lines <= 4)
y = vid.height*0.35;
else
y = 48;</p>

This code always puzzled me. At modes larger than 320x200 the result is that centerprints more than 4 lines (including the e2 entrance message in start.bsp) will be rammed up near the top of the screen, whereas centerprints of 4 lines or less will be more accurately centered. This looks awful.

There was some kerfuffle over the whole thing in the old thread.

I believe I know the reason why.

It's for the slow finale printing at the end of an episode.

The give away is the positioning of the gfx/finale.lmp banner in Sbar_FinaleOverlay - it's at a y of 16, and when we add the banner height of 24 we get 40; 8 more pixels for a blank line between the banner and the centerprint and there's the 48.

Why did Carmack do it this way rather than checking for cl.intermission == 2? Probably the same reason he did a lot of other crazy-seeming things in the Quake code - a rush to get things done and get the game shipped. 
 
Some further evidence: Carmack's .plan for 17th June 1996 gives us the exact date that the centerprint change was made.

https://github.com/ESWAT/john-carmack-plan-archive/blob/master/by_year/johnc_plan_1996.txt#L3436

Interestingly he was also working on items relating to level transitions and boss/finale stuff on that day. "end of e4 text crash" was an item. So the evidence definitely correlates this change with work on finale messages. 
 
Well, like you said, he could have easily made it only apply to the "Congratulations" messages and not other Centerprints if he wanted, but he just notes in the changelog:

"changed center print position for very long text messages"

And I'm sure he would have noticed the E2 entrance message being affected by this, since it's right on the Start map, so it's no accident.

It just makes sense to me that any "very long" message would be moved up, out of the direct center of your view.

I actually didn't know that the Congratulations messages were considered Centerprints -- they use different functions in QuakeC, but I guess the engine funnels them through the same printing method. I tested it and, indeed, an end level message of only 4 lines will be centered lower on the screen. Weird.

If he were just trying to position those end-level messages only, counting the number of lines would be a very hacky way to do it. that sounds like something *I* would do! 
Mirrors 
Picked up a couple of new Mark V users last night -- some old returning FvF players (I'm talking old players from the 90s).

They said Mark V works much better for them than GLquake (obv!), but they were still having some connection problems -- and I've seen another player who has this issue on the server too (I think it's Mr. Burns who has this issue, maybe):

When the level changes, they get stuck in the console and never reconnect to the server. We still see their names as connected players, but their frags are shown as "0." I believe we told Mr. Burns to try typing "ping" in the console when this happens, and that sometimes allows him to connect and get back in without having to totally reconnect and lose all his frags.

I don't have any control over the server (Polarite does that), but it appears to be running "Magic ProQuake Server Version 3.90" in linux.

I really can't provide much more information about this issue.... I assume it's one of those things where it gets stuck doing the "keepalive" messages in the console. I'll ask more specifically the next time someone encounters this -- it's only a few players, but it affects them consistently.



Also, one of the returning players asked about mirrors -- he wanted to be able to see his reflection (mentioning that it was a pretty big deal/cool feature back in the day), and I told him mirrors only worked when running plain ID1... but I realized that it really SHOULDN'T be this way, as it violates what I think should be a pretty important aspect of Quake engine design: you shouldn't take away user control and force your own preference on the end user (even with good intentions).

I mean, there are already various mirror variables that the user can set if he wants mirrors to be on or off (and actually, they should probably be off by default). If the user wants to turn them on, even in a mod or map where it might not work well, he should be able to do so.

Also, for those users that want to play with mirrors, how about an easy way to set a mirror texture. Specifically, something like (probably used in conjunction with tool_texturepointer, but not necessarily): if you input "set_mirror" in the console, it will assign the mirror effect to whatever texture you are pointing at (manually typing in those texture names for the mirror texture prefix is a chore and prone to typos, heh).

Of course, there's the issue of having to restart a map before it takes affect, but it would still be handy for people that want to play around with mirrors.

I suppose it would be handy to be able to feed the pointed-at texture into any of the tex prefix variables, actually.... Not sure how that could be implemented, other than copying the selected texture name into the console and allowing tab to autocomplete the various things you might want to apply it to.

Ah, yeah, it would work if you just had it stick "r_tex [copied texture name]" in the console and positioned the cursor right after r_tex, then tab will autocomplete all the various r_texprefix things with the selected texture already filled in. 
Mirror ??? 
I want to see a Quake ingame video of this effect 
 
If he were just trying to position those end-level messages only, counting the number of lines would be a very hacky way to do it. that sounds like something *I* would do!

This is actually exactly the way Carmack coded a lot of things in Quake.

How did he test to see if you were connected to a server and therefore the status bar should be drawn? By checking the number of console lines drawn. How did he test to see if a map was running? By checking if the console was fullscreen. Quake is full of crap like this. 
#1382 
Holy shit. I would love to read a compilation of "quake code nightmares" like this. 
 
Lightmapped Water 
Well that was unexpected. :/

The "semi-official" 32-player deathmatch map death32c, still available on ID's FTP server (ftp://ftp.idsoftware.com/idstuff/quakeworld/maps/) has lightmapped water.

And the lightmaps are messed-up: http://www.quaketastic.com/files/screen_shots/LITWater/messed-up.jpg

I guess this means that other maps with messed-up lightmaps on water surfaces may very well be out there in the wild, but in the absence of engine support for lightmapped water nobody was ever aware of them.

You could control this with a cvar but that's pushing responsibility back to the player, which I don't like.

Since lightmapped water is a new feature I suggest a worldspawn key indicating it's presence. That way engines that don't support it can ignore it. Engines that do support it can pick it up. Maps like death32c aren't subject to false positives. 
 
I wonder which compilers were writing that junk data? Worldspawn key has my +1. I've already forgotten all the discussion we had a while back, so I'm a clean slate on that (except for the point that it'd be really cool, that still stands). 
#1385 
check the styles. if there's multiple 0s then its clearly uninitialised.
while its possible for a light util to write multiple of the same style, 4 of them is basically pointless as it would oversaturate everything. 
 
check the styles. if there's multiple 0s then its clearly uninitialised.

Bingo, buy the man a large beer.

I believe that these maps may have been lit with ID's then-unfinished qrad tool. 
 
DarkPlaces shows the same problem on death32c: http://i.imgur.com/vZjyDXC.jpg

I would lean towards a worldspawn key now as well, since there are no released maps using lit water yet. 
"Quake Code Nightmares" 
From the video code:

vid_modenum.
vid_realmode.
vid_default.
windowed_default.
vid_mode.
DIBWidth.
DIBHeight.
WindowRect.
mainwindow.
dibwindow.
_vid_default_mode.
_vid_default_mode_win.
vid_config_x.
vid_config_y.
window_center_x.
window_center_y.
window_x.
window_y.
window_width.
window_height.
window_rect.
vid.width.
vid.height.
vid.conwidth.
vid.conheight.
r_refdef.vrect.x.
r_refdef.vrect.y.
r_refdef.vrect.width.
r_refdef.vrect.height.
glx.
gly.
glwidth.
glheight.

These are all global variables that are used to store what is essentially the same information. I don't even think I have all of them here. But all that you really need to store is the window handle and you can derive everything else from it. Sure you can potentially optimize by caching some stuff, but this crap reads like any time something was added to the video code, a new set of globals was added just for it. Of course they all have to be kept in sync and consistent, so any work on the video code is a tangled mess from the outset. 
 
I'm trying to host a dedicated server with this and anyone outside my network can't connect..

I love how faithful this client feels to the original Quake and I know netquake is tricky and not as ideal as QW but honestly QW feels OFF to me..

Any ideas on why folks can't connect? Tried dedicated.. noipx.. My ports are open, no firewalls.. I hosted a QW server last night without a hitch. 
@mafgar 
Mark V should launch a single port server just like Quakeworld. Only port 26000 needs to be open. (Feature is essentially courtesy of Spike).

It could be the clients other people are using.

By default, Mark V uses FitzQuake protocol 666 --- this means DarkPlaces and ProQuake cannot connect, for instance, since they don't support protocol 666. sv_protocol 15 is regular Quake.

What you should do is try to connect to yourself from another client through your public IP. Also you may wish to do sv_public 1. 
@ericw/mh 
ericw: I lean towards worldspawn key

If that's the best way to do ... then whatever solves the problem ;-) And any engine should be able to read a worldspawn key pretty easy ;-) 
@JPL - Mirrors ... 
Mirrors ... here you go ...

https://www.youtube.com/watch?v=BSSnY9DfZ9Y

If you want to play on that quickly assembled test map: http://quakeone.com/markv/media/hall_of_mirrors_test_map.zip

Pulsar threw a mirror into Arcane Dimensions ad_magna map, but it is very difficult to find it because the map is huge.

http://quakeone.com/markv/media/ad_magna_arcane_dimensions_1_50_setpos_2496_56_-292.png

In Mark V, type "setpos 2496 56 -292" in the console with ad_magna loaded and teleport directly to the mirror ;-) 
First | Previous | Next | Last
You must be logged in to post in this thread.
Website copyright © 2002-2024 John Fitzgibbons. All posts are copyright their respective authors.