Problems I've found in 1.14.4

edited 2014 Jun 16 in Technical Support
Hi, I've been doing some map creating and playing of Doom, Heretic and Hexen with the latest stable binary and I've found some errors, you're probably already aware of some and one I've already discussed, but I thought it would be useful to have a list.
Here they are
-Gameplay

+Doom (probably others too): if the player has been running for some distance (gaining momentum, heh) and bumps against a side or front wall or decoration the character's pushed in the opposite direction (e.g: if running and bumping into a torch on the right side, player gets bumped to the left side, if running straight and colliding with the front wall, player gets bumped back) not very nice when making a run for the door when escaping a horde of monsters.
+Hexen: if loading an autosave after dying (at least on the seven portals and its levels) the character's stuck in the entrance portal...effectively making the saved game useless unless a cheat is used (I think, I didn't use noclip).

-XG:

+build_stairs: while it mostly works, the first sector I try to get raised or lowered always rises and goes way high (probably to the 0 height coordinate, didn't investigate it that much); the remaining stairs follow whatever the script calls for...but only if spread build is enabled, otherwise it just moves the sectors and leaves them as a single block (as if I called plane_move)...can be worked around by building the stairs manually with plane_move...but a pain in the ass because...
+Chain_sequence: is broken for plane_move, can be worked around by making the chain call "activate"s as delegates and have those, in turn, call plane_move...particularly bothersome if you want to..say...build stairs ;)
+Teleport: this one is just broken, I think, I could never manage to get it to work for either the player or monsters (a regular teleport worked fine for the same target and such).
+Using names for the class' parameters seems to be hit and miss (more misses than hits) for me, maybe I'm doing something wrong, but if I want to, for example do this
Line Type { #Lower something
    ID = 5024   
    Flags = player_cross
    Flags2 = when_act | any
    Class = plane_move
    Type = flip
    Count = 1
    Target Ref = "lpref_back_floor"
    Destination Ref = "spref_my_floor"
    Move Sound = "stnmov"
    Fp0 = 1
    Fp2 = 0
}
It probably won't work, I have to, instead, do this
Line Type { #Lower something
    ID = 5024   
    Flags = player_cross
    Flags2 = when_act | any
    Class = plane_move
    Type = flip
    Count = 1
    Ip0 = "lpref_back_floor"
    Ip2 = "spref_my_floor"
    Ip6 = "stnmov"
    Fp0 = 1
    Fp2 = 0
}
Not quite breaking, but it's easier (and nicer) to use names.

I think that's all.
Thanks for all your help.

Comments

  • Bloodbat wrote:
    Doom (probably others too): if the player has been running for some distance (gaining momentum, heh) and bumps against a side or front wall or decoration the character's pushed in the opposite direction
    I believe this is standard Doom collision behavior. (Related: Elastic collisions with walls)
    Hexen: if loading an autosave after dying (at least on the seven portals and its levels) the character's stuck in the entrance portal.
    Sounds like you are trying to load a savegame made using an earlier version of 1.14 which did indeed have such a problem. It shouldn't be happening in a savegame made from a session started in 1.14.4 though.

    With regard to the XG issues it would be useful to see an example/demo wad of the problem(s) (the chain_sequence issue is known, though, so don't bother with that).
  • I've noticed that in Hexen, while sprinting using the shift key, I can't jump. My steam version which is running without Doomsday allows me to jump while sprinting so it isn't something funky with my keyboard. Also, when starting Hexen or going through a portal, I am stuck in place until I release and then press the forward key a second time, my steam version does not act like that.
  • DaniJ wrote:
    Bloodbat wrote:
    Doom (probably others too): if the player has been running for some distance (gaining momentum, heh) and bumps against a side or front wall or decoration the character's pushed in the opposite direction
    I believe this is standard Doom collision behavior. (Related: Elastic collisions with walls)

    Ahh I see...I guess I wasn't used to running all that much way back when :P
    Hexen: if loading an autosave after dying (at least on the seven portals and its levels) the character's stuck in the entrance portal.
    Sounds like you are trying to load a savegame made using an earlier version of 1.14 which did indeed have such a problem. It shouldn't be happening in a savegame made from a session started in 1.14.4 though.

    With regard to the XG issues it would be useful to see an example/demo wad of the problem(s) (the chain_sequence issue is known, though, so don't bother with that).
    It happened with a session started in 1.14.4, using the fighter.
    As for the XG stuff, I'll make a quick wad and post it soon, thanks :)
  • Indeed I've just been able to replicate the Hexen savegame issue. I'll see what the problem is. It should be a straight forward fix because according to log, the autosave is simply not being updated when returning to a previously visited map.
  • I made a quick test map, only has 2 rooms but describes the problems I posted above:
    The first room contains two teleporters that lead to the same room, the red one (left) is done with Doom's standard teleport lines, the right one (white) is built with XG and doesn't work, the second room has 2 sets of buildable stairs and a door, behind the door is a former human that should teleport to the starting room, it never does, both lines were constructed using XG both with and without names.
    The stairs are controlled by switches, the first, long stair (has switch beside it), is constructed almost correctly (the first plane rises, all planes should lower 16 units) and the code didn't work using names; the second one (has switch in front) just rises the first plane (again it should lower) and ignores the rest (it only has spread texture activated).
    Stair weirdness: the stair builders work correctly if restarting the map (but not leaving doomsday) OR if another stair builder is working at the same time (one has the bug, the other doesn't).

    The forum doesn't seem to let me add attachments, so here's a link to download the map
    https://onedrive.live.com/redir?resid=96AD29F19839D999!412&authkey=!AC9oJJtTZI9Hbbk&ithint=file%2c.zip

    The code
    Line Type { #Teleport won't work
        ID = 5001
        Flags = player_cross
        Flags2 = when_act | any
        Class = teleport    
        Target Ref = "lsref_line_tagged"
        No Flash = 0
        No Sound = 0
        Always Stomp = 1
    }
    
    #This doesn't work because it uses names
    #Line Type {
    #  ID = 5002
    #  Flags = player_use
    #  Flags2 = when_act | any
    #  Class = build_stairs
    #  Type = flip
    #  Count = 1
    #  Target Ref = "lpref_line_tagged_floors"
    #  Spread Texture = 1
    #  Spread Build = 1
    #  Start Sound = "swtchn"
    #  Step Start Sound = "pstart"
    #  Step End Sound = "pstop"
    #  Step Move Sound = "stnmov"
    #  Fp0 = 2
    #  Fp1 = -16
    #  Fp2 = 1
    #  Fp3 = 0.5
    #  Fp4 = 0.25
    #  Fp5 = 0.25
    #  Fp6 = 0.5
    #}
    
    #This works because it uses "Ipn"
    Line Type {
      ID = 5002
      Flags = player_use
      Flags2 = when_act | any
      Class = build_stairs
      Type = flip
      Count = 1
      Ip0 = "lpref_line_tagged_floors"
      Ip2 = 1
      Ip3 = 1
      Ip4 = "swtchn"
      Ip5 = "pstart"
      Ip6 = "pstop"
      Ip7 = "stnmov"
      Fp0 = 2
      Fp1 = -16
      Fp2 = 1
      Fp3 = 0.5
      Fp4 = 0.25
      Fp5 = 0.25
      Fp6 = 0.5
    }
    
    #Spread texture doesn't work (and has same error as above)
    Line Type {
      ID = 5003
      Flags = player_use
      Flags2 = when_act | any
      Class = build_stairs
      Type = flip
      Count = 1
      Ip0 = "lpref_line_tagged_floors"
      Ip2 = 1
      Ip3 = 0
      Ip4 = "swtchn"
      Ip5 = "pstart"
      Ip6 = "pstop"
      Ip7 = "stnmov"
      Fp0 = 2
      Fp1 = -8
      Fp2 = 1
      Fp3 = 0.5
      Fp4 = 0.25
      Fp5 = 0.25
      Fp6 = 0.5
    }
    
    Line Type { #Teleport won't work either
        ID = 5004
        Flags = monster_cross
        Flags2 = when_act | any
        Class = teleport    
        Target Ref = "lsref_line_tagged"
        No Flash = 1
        No Sound = 1
        Always Stomp = 1
    }
    
    Line Type { #Teleport won't work even if not using names
        ID = 5005
        Flags = monster_cross
        Flags2 = when_act | any
        Class = teleport    
        Ip0 = "lsref_line_tagged"
        Ip2 = 1
        Ip3 = 1
        Ip4 = 1
    }
    
  • I've taken a quick look at your example and I think the problems are mostly due to misunderstanding how things work. For debugging, I enabled xg-dev 1 in the console to enable logging of XG related info. When crossing the teleport line for the white teleporter I see the following:
    XL_LineEvent: CROSS line 9, side 0 (chained type 0)
    Line 9: ABORTING EVENT due to Count = 0
    Clearly the reason your teleporter is not activating is because the line's integral activation counter is zero and because of the activation method chosen; its not triggering. See the teleport example at the wiki.

    Edit:
    DaniJ wrote:
    [Hexen savegame issue] I'll see what the problem is. It should be a straight forward fix because according to log, the autosave is simply not being updated when returning to a previously visited map.
    Indeed it was a simple mix up - internal.save was not being updated at the right time. Fixed for the next unstable build. We'll likely put out another patch for 1.14 soon also.
  • The teleporters still won't work, I changed the code to reflect most of the wiki:
    Line Type { #Teleport won't work
        ID = 5001
        Flags = player_cross
        Flags2 = when_act | any
        Class = teleport
        Count = -1
        Target Ref = "lsref_index"
        Target Num = 4
        No Flash = 0
        No Sound = 0
        Always Stomp = 1
    }
    
    Sector 4 contains the teleport exit.
    The relevant part from the log:
    XL_LineEvent: CROSS line 9, side 0 (chained type 0)
    
    XL_ActivateLine: Activating line 9, side 0, type 5001
    
    XL_DoFunction: Line 9, side 0, activator id 5, event CROSS
    
      Executing class: Teleport (0x16)...
    
    XL_TraverseSectors: Line 9, ref (INDEXED SECTOR: 4)
    
    XSTrav_Teleport: No teleport exit in referenced sector (ID 4). Continuing search...
    
    XL_Think: Line 9, timed to go INACTIVE
    
    XL_ActivateLine: Deactivating line 9, side 0, type 5001
    
      Line 9 has no deactivation function
    
    XL_LineEvent: CROSS line 9, side 1 (chained type 0)
    
      Line 9: ABORTING EVENT due to line side test
    

    The stairs don't display anything that resembles an error.
  • The reason the teleporter doesn't work is because the teleport destinations are not linked into the sector's list of mobjs. The original games' teleport line type locates the destination by iterating through the complete list of every thinker in the map, picking out the first one it finds that is linked to the sector. XG on the other hand locates mobjs by iterating through the list of thinkers linked to the sector itself.

    While the method used by XG is clearly more efficient in theory, it assumes that the targeted mobj type will be linked into the sectors. However, this is not always the case in DOOM (and other id Tech 1 based games) because this list serves a very specific purpose in the original games; it contains only those mobjs which can be collided with and not all of them. Naturally one shouldn't collide with teleport destinations thus its not in that list.

    Clearly this was never tested. I submitted a bug report for this issue.
Sign In or Register to comment.