SpiritQuaddicted / reQuiem

reQuiem is a custom OpenGL Quake engine for Windows and Linux. It's designed for maximum compatibility with all things Quake - past, present and future. It's fast, reliable, and easy to configure. In short: it fixes what was broken, improves what needed improving, and leaves the rest alone. It was developed by jdhack.
GNU General Public License v2.0
17 stars 2 forks source link

bastion crashes with QC error when plasma hits walls #33

Open SpiritQuaddicted opened 10 years ago

SpiritQuaddicted commented 10 years ago

https://www.quaddicted.com/reviews/kinn_bastion.html crashes when the plasma shots by the Q2 enforcer guys in the "lower chambers" hit a wall.

CALL1      870(te_plasmaburn)te_plasmaburn()
monsters/monster_supergrunt.qc : sgrunt_plasma_touch
<NO FUNCTION>
Bad builtin call number 433 for te_plasmaburn
Please contact the PROGS.DAT author
Use BUILTINLIST to see all assigned builtin functions
Try "builtin remapping" by setting PR_BUILTIN_REMAP to 1

=========================
Host_Error: Program error
=========================

When I set "pr_builtin_remap 1" it still crashes:

CALL1      870(te_plasmaburn)te_plasmaburn()
monsters/monster_supergrunt.qc : sgrunt_plasma_touch
monsters/monster_supergrunt.qc : sgrunt_plasma_touch
Bad builtin call number 433 for te_plasmaburn
Please contact the PROGS.DAT author
Use BUILTINLIST to see all assigned builtin functions
(null)

=========================
Host_Error: Program error
=========================
neogeographica commented 10 years ago

I don't know much about the engine/QuakeC interface, but this looks like a DarkPlaces QuakeC extension that isn't implemented in reQuiem. See pr_cmds.c.

It doesn't look like reQuiem advertises support for this extension. But maybe something is broken about that. Or, the QuakeC in the bastion progs.dat may not be checking for DP_TE_PLASMABURN extension and just assuming that it exists, maybe based on some other extension existing.

neogeographica commented 10 years ago

Launching the mod I see that it does actually check whether DP_TE_PLASMABURN is supported, and PF_checkextension in reQuiem properly returns 0 (not supported). So if the QuakeC were well behaved, it would not try to execute te_plasmaburn. But it does try.

As mentioned above, I would guess that the reason it has a problem on reQuiem and not some other engines is that another extension's presence greenlights it to use te_plasmaburn, intentionally or otherwise. Other engines probably tend to support either most/all of the DP extensions or none of them, while reQuiem has scattered support for things like DP_ENT_ALPHA, DP_QUAKE2_MODEL, and DP_TE_BLOOD (other extensions that the bastion mod checks for).

I guess the mod is closed-source?