fabiangreffrath / test-wads

WAD files to test proper function of Doom source ports
6 stars 0 forks source link

Spechits overrun demo testing map #5

Closed JNechaevsky closed 1 year ago

JNechaevsky commented 1 year ago

@fabiangreffrath 👋 I think I have something to add into our thrift-box - a spechits overrun testing map. Implementation is extremly simple: player is trapped into a bunch of sectors with teleport lines. Once player moves, it trigges overflow. You can add an extra printf line somewhere here:

https://github.com/fabiangreffrath/crispy-doom/blob/master/src/doom/p_map.c#L1615

static void SpechitOverrun(line_t *ld)
{
    static unsigned int baseaddr = 0;
    unsigned int addr;
+++ printf ("\n Spechit overrun!"); <-- 
    if (baseaddr == 0)

But it just indicates that overrun is happened. No idea, how any real action scenario can be modelled and which serious consequences may come. A demo desync for sure?

D2 MAP01: spec_over.zip

fabiangreffrath commented 1 year ago

Thank you for this one! I'll add it later today or tomorrow.

The consequences of a spechits overrunr typically last for only one tic and are not as global as e.g. intercepts overrun destroying the blockmap. Demo deyncs are likely to happen, but difficult to model, becuase you'll have to make sure that one of the memory addressed that get overridden by the overflow are in use, i.e. actually read during the same tic.

Anyway, I think it's fine as it is. As you said, it's trivial to add a debug line to indicate that a spechits overflow has happened [1] and all we need is a map that triggers it reliably. 👍

https://github.com/fabiangreffrath/crispy-doom/blob/3a62c5364f8dfd73e958833f155e583a374ba472/src/doom/p_map.c#L276-L278

JNechaevsky commented 1 year ago

Cool, thanks! While reading your reply an idea comes how it can be additionally tested.

For example... 25 barrels are placed outside of map. Player is passing special line to activate a crusher to explode those barrels. Explosions should move 25 monsters through a bunch of teleporter lines. If no overflow happens, all 25 monsters will be able to teleport. If happens, then only .. 8+1 (MAXSPECIALCROSS_ORIGINAL) will be teleported. How teleporter lines should be placed is another question. 🤯

Something like that. Sounds very abstract, but should be doable after some patience in Doom Builder, and if I'm getting things right of course.

JNechaevsky commented 1 year ago

Phew, nope, sorry. By trying to implement what I was thinking my mind is about to explode, it simply way too abstract in terms of correct, not brain-dead mapping. ☠️

Next stop: 30 active plats maximum!

JNechaevsky commented 1 year ago

This one was easy: 31plats.zip

Please feel free to correct this description if needed:

There are 31 platforms on the map and once player crosses red floor line, all of them will be activated. Vanilla Doom limit for maximum active platforms is 30, and if more platforms will be activated, the game will abort with "P_AddActivePlat: no more plats!" message.

Here, I've made a counter: https://github.com/JNechaevsky/ChocoRenderLimits/commit/905378ba332c6b0863e35ab816f7be6428f2ab03. In Crispy or Woof something like this can be done via simple printf if checking is needed, but it doesn't seems to be necessary at all since no one has complained about P_AddActivePlat: no more plats! message AFAIR.