Duke4.net Forums: Bugs & Problems - Duke4.net Forums

Jump to content

  • 38 Pages +
  • « First
  • 2
  • 3
  • 4
  • 5
  • 6
  • Last »
  • You cannot start a new topic
  • You cannot reply to this topic

Bugs & Problems

User is offline   Dzierzan 

#91

Quote

Is there a problem with the choking hands in Bloodgdx? I can't seem to shake them off, its like the space bar has no effect


It's just there's very little time of reaction to press USE button. If it's too late, you won't be able to shake it off (that makes Hands very unfair enemies...). And I just tested it, it's the same in Dosbox and GDX, so no issue here.

This post has been edited by Dzierzan: 21 July 2017 - 03:13 AM

0

User is offline   fgsfds 

#92

View PostDzierzan, on 21 July 2017 - 03:12 AM, said:

If it's too late, you won't be able to shake it off

That's not how it works. You can always shake it off by hitting use key very fast, but the longer the hand is attached, the longer you have to hit the button.

This post has been edited by fgsfds: 21 July 2017 - 03:23 AM

0

User is offline   Dzierzan 

#93

Funny, I learn something new about Blood everyday. I've also learnt lately that you can pickup again Life Leech if you use alt fire mode. I used to think once it's used, you cannot take it back. Nervertheless, I tested your advice and seems like the hand can be shaken off, even in GDX after longer time.
0

User is offline   TheCultist 

#94

There's a bug in BloodGDX v0.771, if you play Death Wish E3M8 after you step through the portal, everything is supposed to become white, but it's all black and I can't see anything.
0

#95

I thought that's how it was supposed to be. Explains why that section was soooo hard for me....
0

User is offline   Spiker 

#96

Quote

Is there a problem with the choking hands in Bloodgdx? I can't seem to shake them off, its like the space bar has no effect

This could happen in the original game as well if you used godmode

This post has been edited by Spiker: 21 July 2017 - 10:00 AM

0

User is offline   axl 

#97

Okay, I played through the entire campaign on" well done". Besides the minor issues I mentioned in my previous post (15 july), I only found one more issue. I believe there's something wrong with the Priest/Beast Boss in E6M8... when I did a comparison, I found the Beast version to be much easier on BGDX... Its health bar appears to be much lower than in the original game on the same difficulty.

That's it. Those are the only issues I found. Thus: this is one incredible piece of work you did !
0

#98

Maybe I found another rare bug: It can happen that when an enemy is on fire (which should mean that it is already dead, even if the bodycount statistic advance only after the animation is ended) and enters into the water while desperately running, this return at his original state when is underwater including the health.

Also sometimes Bone Eel swim into the air under certain conditions.

This post has been edited by Fantinaikos: 21 July 2017 - 12:36 PM

0

User is offline   Tiddalick 

#99

View PostFantinaikos, on 21 July 2017 - 12:35 PM, said:

Maybe I found another rare bug: It can happen that when an enemy is on fire (which should mean that it is already dead, even if the bodycount statistic advance only after the animation is ended) and enters into the water while desperately running, this return at his original state when is underwater including the health.

Also sometimes Bone Eel swim into the air under certain conditions.



I like that bug (Burning man -> Back to enemy when they enter the water), it's in the original as well. You can show it easily if you go to E2M6 (The Cold Rush) as there are plenty of cultists and water near the start of the level.

Not sure of the Bone Eel bug though, they are supposed to die when they enter the air, and I have not seen that one before.
0

User is offline   m210® 

#100

View PostTiddalick, on 21 July 2017 - 03:19 PM, said:

I like that bug (Burning man -> Back to enemy when they enter the water),

It was specially programmed, not a bug
0

User is offline   J432 

#101

There are two opposite fireplaces in Cryptic Passage 06 - Graveyard. If I go into either of them, it is impossible to get out.

Posted Image

This post has been edited by J432: 22 July 2017 - 01:12 PM

0

User is offline   J432 

#102

I think that in Cryptic Passage - Boggy Creek should the Grim Reaper stay always in the boat but he sometimes moves out.

Posted Image



The mast is also off.

Posted Image

This post has been edited by J432: 22 July 2017 - 11:59 PM

0

User is offline   Tekedon 

#103

Beast enemy is still much too weak. Takes about four or five doublebarrel shots from the shotgun, should be more.
0

User is offline   J432 

#104

When I go through vent shaft in E6M3: Public Storage without crouching, upper half of the screen is black.

Posted Image


The same shaft in DOSBox.

Posted Image

This post has been edited by J432: 23 July 2017 - 01:23 PM

0

User is offline   kimec 

#105

Hi Alex,

I was profiling BloodGDX over the past weekend and have noticed one problem.

Could you please rewrite TextureCache.get(int, int, boolean) and TextureCache.add(int, pthtyp) methods as per my suggestion below?

I will explain why this matters in a followup post. Have to go out now.

Original implementation:

public class TextureCache {

    private final Map<TextureKey, pthtyp> cache = new HashMap<TextureKey, pthtyp>();

    ...

    private pthtyp get(int picnum, int palnum, boolean clamped) {
        return this.cache.get(new TextureKey(picnum, palnum, clamped)); // <----- this is a problem
    }

    ...

}


My suggested implementation:

public class TextureCache {

    private final Map<TextureKey, pthtyp> cache = new HashMap<TextureKey, pthtyp>();

    private final MutableTextureKey mutableTextureKey = new MutableTextureKey(); // <----- reusable mutable key

    ...

    private pthtyp get(int picnum, int palnum, boolean clamped) {
         return this.cache.get(this.mutableTextureKey
                .picnum(picnum).palnum(palnum).clamped(clamped));// <----- not creating new instances
    }

    private void add(int picnum, pthtyp tex) {
        this.cache.put(this.mutableTextureKey
                .picnum(picnum)
                .palnum(tex.palnum)
                .clamped(tex.isClamped())
                .toImmutable(), // <----- creates immutable key only when necessary, i.e. when adding a texture to the cache
                tex
        );
    }

}


Where TextureKey is an abstract class:

abstract class TextureKey {

    abstract int picnum();

    abstract int palnum();

    abstract boolean clamped();

    @Override
    public int hashCode() {
        return (this.clamped() ? 31 : 0) ^ this.picnum() ^ this.palnum();
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        // Not doing reflection to avoid additional cost
        // if (!TextureKey.class.isAssignableFrom(obj.getClass())) {
        //     return false;
        // }
        final TextureKey other = (TextureKey) obj;
        if (this.picnum() != other.picnum()) {
            return false;
        }
        if (this.palnum() != other.palnum()) {
            return false;
        }
        if (this.clamped() != other.clamped()) {
            return false;
        }
        return true;
    }

}


TextureKey has two concrete implementations MutableTextureKey and ImmutableTextureKey .

MutableTextureKey implementation is:

class MutableTextureKey extends TextureKey {

    private int picnum;
    private int palnum;
    private boolean clamped;

    MutableTextureKey() {
    }

    @Override
    boolean clamped() {
        return this.clamped;
    }

    @Override
    int palnum() {
        return this.palnum;
    }

    @Override
    int picnum() {
        return this.picnum;
    }

    /**
     * Factory method for immutable keys.
     */
    public TextureKey toImmutable() {
        return new ImmutableTextureKey(picnum, palnum, clamped);
    }

    public MutableTextureKey picnum(int i) {
        this.picnum = i;
        return this;
    }

    public MutableTextureKey palnum(int i) {
        this.palnum = i;
        return this;
    }

    public MutableTextureKey clamped(boolean :thumbsup: {
        this.clamped = b;
        return this;
    }
}


And ImmutableTextureKey implementation is:

class ImmutableTextureKey extends TextureKey {

    final int picnum;
    final int palnum;
    final boolean clamped;

    ImmutableTextureKey(int picnum, int palnum, boolean clamped) {
        this.picnum = picnum;
        this.palnum = palnum;
        this.clamped = clamped;
    }

    @Override
    boolean clamped() {
        return this.clamped;
    }

    @Override
    int palnum() {
        return this.palnum;
    }

    @Override
    int picnum() {
        return this.picnum;
    }

}

0

User is offline   Devon 

#106

View PostTekedon, on 23 July 2017 - 10:41 AM, said:

Beast enemy is still much too weak. Takes about four or five doublebarrel shots from the shotgun, should be more.




Yeah your head almost goes through the celling in alot of places.
0

User is offline   m210® 

#107

View Postkimec, on 24 July 2017 - 01:57 AM, said:

Hi Alex,

I was profiling BloodGDX over the past weekend and have noticed one problem.

I will explain why this matters in a followup post. Have to go out now.



Ok, lets try it :thumbsup: I added your code. What problem are you noticed?
Btw, for HRP support textureCache was updated,
public int hashCode() {
	return (clamped ? 31 : 0) ^ picnum ^ palnum ^ surfnum;
}

surfnum I called skybox's surfaces.

Quote

Yeah your head almost goes through the celling in alot of places.

Yes, I don't explored this problem yet.
0

User is offline   kimec 

#108

Hi Alex,

TextureCache.cache(int, int, boolean) and by extension TextureCache.get(int, int, boolean) is invoked on the hottest rendition path Polymost.drawpoly(double[], double[], int, int) for every single polygon drawing call in every single frame. Here is a heap allocation graph from 48 minutes of BloodGDX gameplay. The huge amount of small spikes implies burst allocation of short lived objects on the heap.

Attached File  blood1.jpg (78.09K)
Number of downloads: 24

This is a look at the same issue from 4 minutes of BloodGDX gameplay. You can clearly see that garbage collector has to kick in every 20 seconds (i.e. quite often).

Attached File  blood2.jpg (72.26K)
Number of downloads: 29

And here is the offending object's class from TextureCache.get(int, int, boolean)

Attached File  blood3.jpg (95.64K)
Number of downloads: 29

The problem is that even though TextureKey is a very simple object, it cannot be allocated on the stack, because JIT compiler can prove that it is escaping out from TextureCache.get(int, int, boolean) stack frame to Map.get(KEY).

And here is heap allocation graph after my "patch" from 28 minutes of gameplay. There is still some allocation happening but GC kicks in every 2 minutes. Those are mostly Strings. I will try to find out where that happens.

Attached File  blood4_after_fix.jpg (69.49K)
Number of downloads: 22

Probably the most performant solution would be to inline hash table implementation into TextureCache by hand, so that it mimics EDuke texture cache implementation.
1

User is offline   m210® 

#109

Heh, yep, I noticed memory leak too...TextureCache was written by KlimKa, whos working on tweak Polymost and will writing the new renderer. This class has a alpha status, but thanks for you fix :thumbsup: I try to say KlimKa about this.
0

User is offline   Zaxx 

  • Banned

#110

Yesterday I played around with the additional voxels and on my machine they really tank the fps. Made a little gameplay video where you can see it:
https://www.youtube....h?v=LotR9JiAlqU
I locked the framerate to 540 because that was a nice stable value the game never went under but since I've installed the voxel pack I'm seeing even sub-120 fps in rare occasions which would not be a problem in itself but there is some agressive fluctuation there which results in stuttering / frame pacing issues.

Does anyone else have this?
0

User is offline   Devon 

#111

View PostZaxx, on 24 July 2017 - 09:39 AM, said:

Yesterday I played around with the additional voxels and on my machine they really tank the fps. Made a little gameplay video where you can see it:
https://www.youtube....h?v=LotR9JiAlqU
I locked the framerate to 540 because that was a nice stable value the game never went under but since I've installed the voxel pack I'm seeing even sub-120 fps in rare occasions which would not be a problem in itself but there is some agressive fluctuation there which results in stuttering / frame pacing issues.

Does anyone else have this?



Yeah there are some serious fluctuations wich results in stutter/ fps pacing.

I hope they get sorted out.. and i think they will in time.
0

User is offline   m210® 

#112

View PostZaxx, on 24 July 2017 - 09:39 AM, said:

Does anyone else have this?

This is not surprising.
Look at this picture...model in the right has twice less polygons than a voxel model, It has 5000 polygons. Toxic barrel has 10000 polygons and this model is optimized...non-optimized model has 50k polygons :thumbsup:
So, low-poly md2/md3 models will have better view or faster rendering

Attached File(s)

  • Attached File  222.jpg (605.06K)
    Number of downloads: 57


This post has been edited by M210: 24 July 2017 - 11:22 AM

0

User is offline   Kyanos 

#113

We need a stand alone voxel to md3 convertor. Maybe then a simple blender script could clean up the finished poly models and get them more game friendly.
0

User is offline   m210® 

#114

View PostDrek, on 24 July 2017 - 11:36 AM, said:

We need a stand alone voxel to md3 convertor. Maybe then a simple blender script could clean up the finished poly models and get them more game friendly.

I think convertor will give you those 10k - 50k polygons....it's better to make it from empty list.
0

User is offline   Kyanos 

#115

View PostM210, on 24 July 2017 - 12:12 PM, said:

I think convertor will give you those 10k - 50k polygons....

Yes it should. Ideal is vox2poly ripped out of polymost.

View PostM210, on 24 July 2017 - 12:12 PM, said:

it's better to make it from empty list.

I think you mean it's better to make a new model, yes much better, much more work.
0

User is offline   Devon 

#116

View PostM210, on 24 July 2017 - 11:21 AM, said:

This is not surprising.
Look at this picture...model in the right has twice less polygons than a voxel model, It has 5000 polygons. Toxic barrel has 10000 polygons and this model is optimized...non-optimized model has 50k polygons :thumbsup:
So, low-poly md2/md3 models will have better view or faster rendering


That is insane!

Still we need voxels.. i really dont want the game filled with md2/md3 models..

It will look unatural.. i guess the only way is for someone who has some serious talent in preserving the original look if there is to be md2/md3 models instead of voxels.

Still i dont like the idea alot.

Monolith made some voxels, maybe port/reverse enginer some of the tools ?

This post has been edited by Devon: 25 July 2017 - 02:07 AM

0

User is offline   fgsfds 

#117

View PostDevon, on 25 July 2017 - 02:04 AM, said:

Monolith made some voxels, maybe port/reverse enginer some of the tools ?

I don't know what Monolith used to make their voxels, but I'm sure that the tool doesn't matter. Resulting KVX will be the same anyway.
0

User is offline   Hendricks266 

  • Weaponized Autism

  #118

Unless there was a tool included with the various releases of Blood tools, they probably used Ken's SLABSPRI, which is now open source.
0

User is offline   Mark 

#119

Whoever chose to use a 10K barrel was foolish. Just to verify I spent a few minutes making a very low poly ( 366 faces ) test barrel. I would imagine a very nice detailed version could be made with 1-2K. So when picking a model for conversion to voxel, or just making models to use, be realistic in the poly count.

Attached File(s)



This post has been edited by Mark.: 25 July 2017 - 11:07 AM

0

#120

View PostMark., on 25 July 2017 - 11:05 AM, said:

Whoever chose to use a 10K barrel was foolish. Just to verify I spent a few minutes making a very low poly ( 366 faces ) test barrel. I would imagine a very nice detailed version could be made with 1-2K. So when picking a model for conversion to voxel, or just making models to use, be realistic in the poly count.

This.
0

Share this topic:


  • 38 Pages +
  • « First
  • 2
  • 3
  • 4
  • 5
  • 6
  • Last »
  • You cannot start a new topic
  • You cannot reply to this topic


All copyrights and trademarks not owned by Voidpoint, LLC are the sole property of their respective owners. Play Ion Fury! ;) © Voidpoint, LLC

Enter your sign in name and password


Sign in options