|
Post by MaxED on Apr 10, 2017 5:02:18 GMT -5
Hi! Since I haven't found a dedicated KMQ2 bug reports thread or a public repository I can submit bug reports to, I guess I'll try my luck here. 1. Some accel/deccel/speed/plat height values (500/500/100/360 in the example map) can lock func_plat movement. How to reproduce: load the example map, step on the platfrom in front of you. It will never reach the top position. 2. In some cases target_command is not executed/executed incorrectly. How to reproduce: load the example map, the left button is supposted to display "say I'm not shown!" message, yet it never does. Instead in some cases it shows "say I'm shown!" message, which is assigned to the right button. 3. Using target_animation breaks game saving, because it uses a custom mmove_t, which is not taken into account when SAVEGAME_USE_FUNCTION_TABLE define is enabled. How to reproduce: load the example map, try to save the game. 4. Using text colouring sequences results in horizontally misaligned text. How to reproduce: load the example map, press the buttons to display example text on screen and in the help computer. 5. Lazarus docs mention trigger_key having "key_message" property. It's not implemented. Also, a question / posiible feature request if I may: is it possible to make skies unaffected by fog? If not, is it possible to implement this functionality from game.dll? If not, are there any chances to get this functionality implemented in KMQ2?
|
|
|
Post by knightmare on Apr 13, 2017 16:10:32 GMT -5
1. This is a vanilla Q2 bug. I tried the test map in the missionpack game DLL, and it doesn't happen there. It turned out to be an easy fix.
2. I'm still looking into this.
3. I never tested the target_animation entity (it's not even used in any of the Lazarus test maps). From looking at the code, it's very badly implemented. Even without the savegame changes, its use of a dynamically allocated mmove_t struct looks like it would crash from a bad pointer if you tried using it after loading a saved game. It may be that a proper fix is not feasible and I'll just have to disable/remove this entity the way I removed target_playback.
4. This was a minor oversight in the HUD string drawing, and it's now fixed.
5. Got it added. Turned out I already have this implemented in the missionpack game DLL.
6. Years ago I played around with the idea of not fogging the sky, and it just ended up looking silly. Changing this is not possible from the game DLL.
A mapper-specified sky far fog distance (like in Daikatana) could be added in the next major release, but it would take a change to the servercommand for this, and thus break the protocol.
In the meantime, how about a cvar that controls a far fog distance that's proportional to the regular fog distance or density? Maybe r_fog_skyratio with a default of 10?
|
|
|
Post by MaxED on Apr 13, 2017 17:48:09 GMT -5
Thanks for the fixes! Is there a way to view the stuff you've changed? I'm currently working on a small project, which uses a custom game.dll, so it would be nice if I could update it with those fixes. About the fog: for me, a cvar would suffice. I'd like to have a relatively dense fog without either turning the sky into a solid colour, or lowering the r_skydistance so much that it clips through faraway level geometry. Also, there are several things, which are not affected by fog: - Decals. - Particles. - Surfaces with "Warp" flag when "Texture shader warp" option is enabled. - Underwater caustics when "Underwater caustics" option is set to "Hardware warp".
|
|
|
Post by MaxED on May 26, 2017 16:10:21 GMT -5
Another func_plat bug: When using a relatively high lip value (like 20) paired with "PLAT_LOW_TRIGGER" flag, the plat trigger is spawned too low, making it impossible to trigger. Example map.
|
|
|
Post by knightmare on May 29, 2017 0:45:34 GMT -5
Got that second plat bug fixed as well. Just had to add a special case to add lip instead of subtracting it for the trigger bbox bottom height when that spawnflag is enabled (it probably wouldn't break anything to change it for all cases, but I'm being extra cautious).
I'm still trying to figure out the target_command issue. Target_animation has been disabled.
As far as certain things not being fogged, they look far worse with fog enabled, so I had to skip fogging them.
When I've got the last issue resolved, I can post a new build of KMQ2 for you, maybe as a 0.20 Update 8.
|
|
|
Post by MaxED on May 29, 2017 18:56:56 GMT -5
Thanks again! But wait, there's more Looks like in some cases door movement sound can loop indefinitely when door movement is blocked by a monster. How to reproduce: load the example map, press the button several times (on my side 2-5 times was always enough) to make at least one of the doors play the movement sound despite being in the initial position. Also a minor complaint: when launching a map with "developer" param enabled, I'm getting lots of "Bad jpg/pcx file [sometexture].jpg" warnings. All textures in my mod are in .tga format, so it would be nice if those messages were displayed only when the engine was unable to find a texture of any supported format with given name.
|
|
|
Post by knightmare on May 29, 2017 21:45:57 GMT -5
OK, got that one fixed for both doors and plats too. I just had to clear the looped sound in all cases when the door reaches either end point.
As for the target_command not working, I found out that it's network related. Target_command issues an svc_stuffcommand message, at the same time as the light updates from the lights you're switching are sent over the net. So it usually gets clobbered and doesn't show up. I found that putting it behind a trigger_relay with a delay of at least 0.2 remedies the problem.
I've already got a fix for the bad image messages- you'll now need to set developer to 2 to see them.
|
|
|
Post by MaxED on May 30, 2017 5:30:50 GMT -5
Thanks! Welp, I've got another one. It's more finicky to reproduce and seems to require some rather specific level geometry, so I've attached a video showing the bug. Looks like in some cases monsters can get stuck in place after avoiding a grenade. How to reproduce: load the example map, grab the Grenade launcher to agitate the gunner, then make the gunner avoid it's own grenade.
|
|
|
Post by knightmare on May 30, 2017 12:19:46 GMT -5
OK, that's definitely a bug in the Lazarus AI additions, not the base game code.
BTW, I've also been adding these fixes to my unofficial Q2 patch where applicable.
Also, what editor did you use to create these maps? The included .map files which are supposed to be universal have weird brush syntax and are unreadable by Radiant.
|
|
|
Post by MaxED on May 30, 2017 16:30:07 GMT -5
|
|
|
Post by cocerello on May 31, 2017 13:58:32 GMT -5
Then it must be because Jack uses Half Life's map format 220, which makes aligning textures way easier and makes some alignments possible, but gives problems with other editors. AS far as i know, for Quake 2 mapping, only Trenchbroom can open that format aside from Jack. For Quake, there is some more.
|
|
|
Post by MaxED on Jun 12, 2017 9:42:37 GMT -5
Two crane bugs: 1. Looks like in some cases crane_hook doesn't stay exactly below crane_hoist after moving. How to reproduce: load the example map. Use the crane control panel in front of you to move the crane left/right/forward/back. 2. Looks like in some cases the cable model is not spawned when using the crane entity. Can be seen in the same example map.
|
|
|
Post by knightmare on Jun 22, 2017 0:55:12 GMT -5
I'm still looking into the monster movement and crane cable issue, but the crane hook lagging is likely a result of entity order in the map file (Lazarus's movewith code is very sensitive to this). Try editing the .map file so that the child movers (crane_hoist, crane_hook) come after the parent movers (crane_beam, crane_hoist) in the .map file.
|
|
|
Post by MaxED on Jul 27, 2017 8:31:12 GMT -5
Here are some bugfixes ported from Yamagi Quake 2. Here are some bugfixes for bugs/potential issues found by PVS-Studio. Also, PVS found some bugs in KMQ2 as well, though I'm not sure how to deliver them to you (can we has KMQ2 git repository?..). For example, this expression in CL_Explosion_Particle doesn't work as expected (the value of "rocket" is ignored, because the '?:' operator has a lower priority than the '-' operator): (size != 0) ? size : (150 - (!rocket) ? 75 : 0) A correct version should look like this, I suppose: (size != 0) ? size : (150 - ((!rocket) ? 75 : 0)) Another example. There's this switch in UI_AddMainButton, which always assigns OpenMenu to M_Menu_Quit_f: switch (index) { case 0: thisObj->OpenMenu = M_Menu_Game_f; case 1: thisObj->OpenMenu = M_Menu_Multiplayer_f; case 2: thisObj->OpenMenu = M_Menu_Options_f; case 3: thisObj->OpenMenu = M_Menu_Video_f; case 4: thisObj->OpenMenu = M_Menu_Quit_f; } And other fun stuff like this: /* ================= FS_Tell
Returns -1 if an error occurs ================= */ int FS_Tell (fileHandle_t f) { fsHandle_t *handle;
handle = FS_GetFileByHandle(f);
if (handle->file) return ftell(handle->file); else if (handle->zip) return unztell(handle->zip); } tlen = (len<halflen)? fabs(len-halflen): fabs(len-halflen);
|
|
|
Post by MaxED on Jul 31, 2017 3:34:55 GMT -5
As far as I understand, gib_touch is never called, because gibs are non-solid, which makes them ignored by SV_Impact (which seems to be the only place gib_touch can be processed, because touch invoking is commented out in SV_Physics_Toss).
|
|