News | Forum | People | FAQ | Links | Search | Register | Log in
Quakespasm Engine
This engine needs its own thread.

Feedback: I like the OS X version, but I have to start it from the terminal for it to work and can't just double-click it like a traditional OS X app. I'm sure you guys already know this, either way great engine.

http://quakespasm.sourceforge.net/
First | Previous | Next | Last
Bug Encountered. 
Please note I was using my irc-modified version of quakespasm (latest version) and a modified progs.dat. I can supply both of these if necessary.

In e1m6 my game crashed with the following error:
"SV_TouchLinks: encountered NULL link!"

It wasn't a friendly crash either, it actually froze the game and wouldn't relinquish control back to the window manager (I'm running linux).

Can you guys think of any reason (aside from my modifications) why this might occur, I wasn't able to replicate the crash. 
#2950 
One of remove(eg: killtarget), setorigin, setsize, setmodel, walkmove, movetogoal, droptofloor called inside a trigger's touch event can cause such crashes.
This is why the vanilla QC code used SUB_Remove all over the place (except for killtargets, unfortunately).

The exact ordering requires two triggers near each other. If the first trigger removes the second trigger in its touch function then the engine will end up walking that removed second trigger's links. QuakeSpasm has some code to try to heal this, but it can't cope with recursion. Replicating it requires quite a few things to become ordered in an exact way (which may even have framerate dependencies).
I've no idea what could cause such recursion in vanilla quake, but to be fair you're using a modified progs.dat, so maybe its something in there.

QSS/FTE/DP have code that can handle recursion etc, so they'll never give the crash you got no matter how exotic you make it.
QS should be okay for most of those functions, but can have issues if you're using movetogoal or walkmove inside touch functions.
Vanilla can and does explode if ANY of those functions are called inside a trigger's touch function. Like I say, order matters. You may feel you've gotten away with it, at least until they're things are triggered in some other order, or a dropped backpack might be enough to prevent the bug or be the difference between an infinite loop and a segfault. 
#2950 
Where is that modified progs.dat? 
 
https://www.dropbox.com/s/j6fuwscy5ja7vq8/pacifist_practice_progs.zip?dl=0

I think the only changes I made were in combat.qc 
#2953 
exactly what do I do to trigger the issue? 
 
Be on the start platform on e1m6
I think I had a quicksave beforehand.

I wasn't able to replicate it.

It just died with that error. 
#2955 
Well, I can't reproduce it either. We'll need to reproduce it reliably in order to find a solution. 
OK, Got A Test Case 
http://quaketastic.com/files/misc/touchlinks-test.zip

The player spawns over 4 nailguns. The nailgun touch function calls setorigin() to move all 4 nailguns to the other side of the map (into another areanode).

The map freezes immediately in fitz085, MarkV, QS, and works in QSS and DarkPlaces 
Test Case 
Indeed it freezes immediately. (Linux note: test this with -nomouse on the cmdline.) It doesn't even hit the NULL link error. 
Re: Behaviour Difference 
the only way I can see that QC would observe Spike's version being different is if a touch function teleports something into areanode that is currently being visited by SV_TouchLinks.

e.g. player touches a lightning gun. the touch function teleports (with setorigin) a nailgun (from a different areanode) onto the same position as the lightning gun.

With the vanilla code, the nailgun touch function could run during the same SV_TouchLinks call.
With the fixed code, the newly teleported nailgun wouldn't have its touch function run until later (next frame in this case, when the player entity is relinked.)

This wouldn't be observable with id1 since trigger_teleport is delayed 200ms. 
 
the way I see it, the differences in what the QC might observe only appear when the QC does evil things that could crash vanilla anyway.
While that's no real guarantee that it won't break stuff, it does at least mean that you can fully blame whoever potentially crashed vanilla. :) 
 
I committed your patch with minor tweaks (hunk allocated array, made the touch->v.solid test in SV_AreaTriggerEdicts the same as the one in SV_TouchLinks.. shouldn't make much difference?).
https://sourceforge.net/p/quakespasm/code/1485/

Did some more experimenting, and it turns out you can make a teleporter setup that behaves differently depending on the engine's SV_TouchLinks, with vanilla id1 progs:
http://www.quaketastic.com/files/misc/touchlinks-test2.zip
(DarkPlaces = you pick up RL and SSG, winquake = you pick up SSG only). Kind of annoying since I was hoping this change wouldn't be visible to a map running on id1 progs, but I did set up the map specifically to show a difference..

My attempt to summarize the behaviour of vanilla's SV_TouchLinks:

Say the player touches a trigger_teleport, whose touch function setorigin()'s the player on top of a weapon pickup:
- if the weapon's areanode was visited by SV_TouchLinks before the player's starting areanode, the weapon's touch function won't run this frame
- if the weapon is in the same areanode as the player's starting areanode, the weapon's touch function will run this frame if the weapon appears later in the areanode's trigger list than the trigger_teleport
- if the weapon is in an areanode that hasn't been visited yet by SV_TouchLinks, the touch function will run this frame.

So to sum up, whether the weapon touch function runs the same frame as the teleporter touch is pretty much random. What happens in my test map is the player misses picking up the RL because the RL is earlier in the linked list than the teleporer they just arrived through.. but there's another teleporter later in the list that can still be touched on the same frame, so they go through that before they have a chance to pick up the weapon.

With the new patched SV_TouchLinks, the weapon touch function will never run until the next frame. Hopefully QC code / maps are not relying on touch functions making changes and then other touches happening as a result that same frame, since whether that is possible in vanilla is unreliable. 
DarkPlaces... 
At this point, darkplaces does so many other things that you can't pin such a difference on any single feature.
We're talking ordering here, so things like a different world size can change the places of the collision nodes. DP uses a 2d grid instead of a kdtree which ensures a different order. DP also puts triggers and non-triggers (even non-solids) into the same lists.
Whereas FTE has all the same stuff, but gets only the shotgun (matching your winquake claim)...
The fun thing is that if I load up the .map directly in FTE then I get neither weapon!

Its worth noting that DarPlaces has only the bounds checks inside 'SV_AreaTriggerEdicts' and they're missing from its SV_TouchLinks-equivelent.
This guarantees that the RL will be touched.
Which is probably the safest behaviour, if it were not for triggers potentially getting touched from the other side of the map after a teleport. The only types of triggers that I can think of that might actually care are q3-style jumppads (ones that actually aim properly), and I don't really see one occupying the same space as a teleporter (q1 pushers might overlap, but they at least don't care about starting points). 
 
I should have mentioned, QSS gets RL+SSG on the test map (with the SV_TouchLinks_New) or just SSG with pr_checkextension 0 (reverting to the old quakespasm SV_TouchLinks). Quakespasm gets RL+SSG since r1485, before that it got just SSG.

I'm surprised FTE doesn't get the RL. 
Quakespasm-0.93.0-rc1 
http://quakespasm.sourceforge.net/tmp/93_RC1/

Release candidate for the next QS release, thanks to szo for building the binaries. Note the above link is temporary and will only be around until we do the official release.

Biggest change for players is that the QS changes to "always run" are disabled by default; if you want:
- Shift to act as the "walk" key, when always run is on
- always run to be affect all directions (forward/back, side, up/down)
as they did in 0.92.1 and earlier you need to select Options -> Always Run -> Quakespasm

Aside from that there is a long change log (see the readme.txt); this has all of the limit increases from the ad_sepulcher "quakespasm-admod.exe" and can run Orl's episode. 
 
Orl's episode
So KenChennar = Orl? 
Ericw 
what's again the diff between the QuakeSpasm, and QuakeSpasm-SDL2 ?

And what about the spike version ? 
 
(see the readme.txt)

Quakespasm utilizes either the SDL or SDL2 frameworks, so choose which one works best for you. SDL is probably less buggy, but SDL2 has nicer features and smoother mouse input - though no CD support. 
 
Mugwump: yeah, see Orl's post in the episode thread.

Barnak: Generally you should use the "QuakeSpasm-SDL2" one, it has more features (game controller support, specify refresh rate, desktop fullscreen, etc). "QuakeSpasm" is using SDL version 1.2 which is officially at the end of its life, but supports old OS'es (windows 95, mac 10.4). 
What About The Spike Version Published For AD1.6 ? 
 
No More Rain In Forgotten Sepulcher ! 
... and no Spike effects. What gives ? 
Barnak 
QSS and QS have not merged into one, this is an update for Quakespasm only. Although, I slowly added some fixes/improvements from QSS to QS this past year (not the new protocol and particle system though). So - I don't know what the plan is for QSS. 
 
Eventual merge and option to toggle extension advertisement to the mod so particles could be either pixelly or DP??? Maybe hopefully someday. 
Arcane Dimension Issue? 
Seems when I updated to "Quakespasm-0.93.0-rc1" that when I walk up to a pedestal(sorry hate the word: PLINTH) the screen no longer goes dark making the text easier to read.

Is it just my setup? 
 
Hi! Seeing that people complain about this issue in unrelated places, I've made the patch, which automatically switches to protocol 999 when map bounds exceed -16384..16384 range (not sure this is a correct range, but that's easily fixable :) ). 
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.