DireKrow's Feedback (0.0.5.0 & 0.0.6.0)

Started by DireKrow, January 20, 2022, 09:38:24 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

DireKrow

Since the source is up, I've been playing around with a bit ahead of the official demo. I intend to do more tomorrow, but I couldn't help doing a little tonight. Time to nitpick!

Performance / Controls

1. Camera rotation seems to be tied to the framerate in some way? When the framerate is extremely high (over 1000 FPS), mouse rotation becomes extremely low sensitivity, where large mouse moves barely cause a rotation, but when I cap the framerate to 120 using the nvidia control panel, the sensitivity feels much more normal. Doesn't seem intended.

2. The game hitches for about an eighth of a second every 2-3 seconds, but inconsistently. I thought maybe it was doing it when it reads and prints the FPS reading to the console, but it doesn't always line up with that. If the camera is moving or rotating during the moment a hitch happens, it 'keeps its momentum' during that moment, causing the camera to suddenly jump. The effect is greatly exaggerated (multiplied?) at high FPSes, causing such hitches and jumps to be extremely noticeable. Hitches can be observed just by waiting on the level selection screen or level preview too, but seem to be much more infrequent compared to active gameplay.

3. Although the game physics are capped at 30 FPS, the rendering isn't, so currently the game maxes out the CPU core or GPU (whichever ends up being the bottleneck on the given system). This is fine currently, particularly since the FPS is useful for assessing performance at this stage, but consider adding an actual Frame cap or Vsync in future for people who don't want the game using unnecessary resources.


Blockers / Turners

4. In L3D, assigning a blocker or turner would cause that lemming to become a blocker/turner at the edge of that block no matter what. Currently in Loap, if you assign the skill in the last quarter or so of the block, they'll keep walking into the next grid square before becoming a blocker/turner. Visually, it looks like you moved the turners away from the block edge, so I suspect this is actually an intended change, but I wanted to make sure? If this change is kept, it might be worth considering if any puzzles are impacted by this (e.g. assigning blocker/turners directly out of a fall from a ledge / builder bridge for instance).

5. Following on from #4, if you assign a Turner to a lemming that is about to fall off a ledge, the lemming will not become a turner (either on the ledge, or after they land) but the Turner skill will still be consumed. This is probably true for Blockers too, but I didn't confirm for sure.

6. Related to #5, if a lemming is between two blockers on the same square (e.g. by assigning a blocker either side of the starting hatch), then Loap lets you attempt to assign the trapped lemming as a blocker and consumes the skill, but they'll never actually become one.

7. In L3D, if two lemmings were bunched up, assigning one of them as a turner while they were in the first half of a grid square (in the direction of travel) would cause the turner to turn the other lemming. This trick is used in LP3D Wafer Walkway, for instance. Currently in Loap this doesn't work - the trailing lemming always ignores the turner and goes through, even if you assign the turner as early as possible, as described in #4.

8. In L3D, two turners on the same grid square pointing the same direction could be used to simulate a blocker, and two pointing into each other would catch and compress the crowd. Neither trick currently works on Loap. Lemmings will turn at the first turner they encounter, and ignore all subsequent turners on the same block, walking through. Turners inside of splitter blocks or immediately adjacent to deflector blocks are ignored in the same way.

9. In L3D I don't think you could 'overlap' a blocker and turner by assigning both to the same edge. Currently you can in Loap, as seen in Attachment 1. I might be misremembering, though.
LOTY 2020 Winner
My NeoLemmix Levels: The Krow Files (File A v1.2 released 21-Feb-2020)

namida

Much of the above does need fixing, though one thing I will note is that I've made an intentional decision to move turners closer to the middle of the block. The reasoning for this is that the blocker - who really should remain on the edge - requires the blocks on both sides of where he's standing to be destroyed to free him, unlike in L3D where although he's visually on both blocks, only one (the one he was standing on when he was assigned blocker) ever needs to be destroyed to free him. The only way a blocker could really remain symmetrical without doing this, was to move him to the middle of the block, and I was concerned about how much breakage could result from that change. The turner on the other hand can easily be adjusted to a position where he clearly only needs the one block to be destroyed, and breakage should be fairly minimal (probably not zero, but still).
My projects
2D Lemmings: NeoLemmix (engine) | Lemmings Plus Series (level packs) | Doomsday Lemmings (level pack)
3D Lemmings: Loap (engine) | L3DEdit (level / graphics editor) | L3DUtils (replay / etc utility) | Lemmings Plus 3D (level pack)
Non-Lemmings: Commander Keen: Galaxy Reimagined (a Commander Keen fangame)

DireKrow

#2
Just so it's here, #2 turns out to be related to garbage collection.

Skill Assignment

10. When assigning skills and many lemmings are overlapping the cursor, it seems to assign the skill to the lemming that is FURTHEST away from the camera, instead of closest. It should assign to the closest.


Blockers & Turners

11. Turners on steep slopes are ignored by lemmings walking up the slope. Works correctly on shallow slopes, and with blockers.

12. You can attempt to assign a lemming that is already a turner the turner skill again. It won't consume the skill, but it'd probably be best if you couldn't 'lock on' to them like that.

13. If you assign a blocker to stand on the edge of mud, they'll reach the mud and drown instead of becoming a blocker. The skill is consumed. Works correctly for land/water edges.
LOTY 2020 Winner
My NeoLemmix Levels: The Krow Files (File A v1.2 released 21-Feb-2020)

DireKrow

14. The frame limiter aims for 60 FPS by default, but if you use fast forward during a level, it causes the frame limiter to limit to 30 FPS for the rest of the level after that moment.
LOTY 2020 Winner
My NeoLemmix Levels: The Krow Files (File A v1.2 released 21-Feb-2020)

DireKrow

Some video footage:

https://www.dropbox.com/s/oom4k2v3l1jcd8o/Loap%202022-01-21%2010-01-47.mp4?dl=2

- While the framerate is capped, the camera movement with the mouse becomes very choppy and unpredictable. I switch to using keyboard briefly in the middle of the footage to show that works fine, then switch back to mouse.

https://www.dropbox.com/s/05i6ayfvm56dwtu/Loap%202022-01-21%2010-09-02.mp4?dl=2

- Shows that some frame skips still occur during gameplay if you watch closely.
LOTY 2020 Winner
My NeoLemmix Levels: The Krow Files (File A v1.2 released 21-Feb-2020)

DireKrow

Loap 0.0.5.1 / LoapCore 0.0.6.0 / Commit e4b868d

Using two turners pointing into each other does correctly catch the crowd, as it did in L3D. However a turner pointing in toward a deflector block (see Attachment) causes a crash:

nhandled exception. System.ArgumentException: Invalid direction / rotations combination
   at LoapCore.Lemmings.LemmingBaseAction.CalculatePostDeflectorDirection(Int32 deflectorRotations) in C:\Documents\Dev\loap\LoapCore\Lemmings\LemmingBaseAction.cs:line 107
   at LoapCore.Lemmings.ActionWalker.CheckDirectionChange() in C:\Documents\Dev\loap\LoapCore\Lemmings\ActionWalker.cs:line 319
   at LoapCore.Lemmings.LemmingBaseAction.InternalExecute(ActionPhase phase) in C:\Documents\Dev\loap\LoapCore\Lemmings\LemmingBaseAction.cs:line 71
   at LoapCore.Lemmings.LemmingBaseAction.Execute(ActionPhase phase) in C:\Documents\Dev\loap\LoapCore\Lemmings\LemmingBaseAction.cs:line 58
   at LoapCore.Game.GameEngine.ExecuteLemmingPhase(ActionPhase phase, Boolean[] voidLemmings) in C:\Documents\Dev\loap\LoapCore\Game\GameEngine.cs:line 135
   at LoapCore.Game.GameEngine.UpdateLemmings() in C:\Documents\Dev\loap\LoapCore\Game\GameEngine.cs:line 122
   at LoapCore.Game.GameEngine.Update() in C:\Documents\Dev\loap\LoapCore\Game\GameEngine.cs:line 108
   at Loap.Views.Game.GameViewExecution.HandleUpdate(Boolean overridePause) in C:\Documents\Dev\loap\Loap\Views\Game\GameViewExecution.cs:line 67
   at Loap.Views.Game.GameView.DoUpdate(Single elapsedTime) in C:\Documents\Dev\loap\Loap\Views\Game\GameView.cs:line 37
   at Loap.Views.BaseView.Update(Single elapsedTime) in C:\Documents\Dev\loap\Loap\Views\BaseView.cs:line 57
   at Loap.LoapMain.Update(GameTime gameTime) in C:\Documents\Dev\loap\Loap\LoapMain.cs:line 82
   at Microsoft.Xna.Framework.Game.DoUpdate(GameTime gameTime)
   at Microsoft.Xna.Framework.Game.Tick()
   at Microsoft.Xna.Framework.SdlGamePlatform.RunLoop()
   at Microsoft.Xna.Framework.Game.Run(GameRunBehavior runBehavior)
   at Microsoft.Xna.Framework.Game.Run()
   at Loap.Program.Main() in C:\Documents\Dev\loap\Loap\Program.cs:line 9
LOTY 2020 Winner
My NeoLemmix Levels: The Krow Files (File A v1.2 released 21-Feb-2020)

DireKrow

#6
Same version as above...

Image 1

- Walkers ignore one-slice-steps-up, phasing through them instead of increasing their elevation.

Image 2

- Turners on down-slopes are ignored by other lemmings. Happens on both shallow and step down-slopes. Up-slopes work fine.
LOTY 2020 Winner
My NeoLemmix Levels: The Krow Files (File A v1.2 released 21-Feb-2020)

DireKrow

Images




When a hatch is close to a deflector block, the lemmings end up coming out of it going the wrong direction, as seen here in The Prisoner. Using a bomber to shave the tops of the deflector blocks off restored things to normal.
LOTY 2020 Winner
My NeoLemmix Levels: The Krow Files (File A v1.2 released 21-Feb-2020)

namida

#8
For my own records, here are the ones which remain unsolved (or potentially, were solved by the rewriting in general of a lot of the lemming physics code, but I haven't specifically confirmed as such yet):

Quote1. Camera rotation seems to be tied to the framerate in some way? When the framerate is extremely high (over 1000 FPS), mouse rotation becomes extremely low sensitivity, where large mouse moves barely cause a rotation, but when I cap the framerate to 120 using the nvidia control panel, the sensitivity feels much more normal. Doesn't seem intended.

2. The game hitches for about an eighth of a second every 2-3 seconds, but inconsistently. I thought maybe it was doing it when it reads and prints the FPS reading to the console, but it doesn't always line up with that. If the camera is moving or rotating during the moment a hitch happens, it 'keeps its momentum' during that moment, causing the camera to suddenly jump. The effect is greatly exaggerated (multiplied?) at high FPSes, causing such hitches and jumps to be extremely noticeable. Hitches can be observed just by waiting on the level selection screen or level preview too, but seem to be much more infrequent compared to active gameplay. Reduced, but not completely resolved.

6. Related to #5, if a lemming is between two blockers on the same square (e.g. by assigning a blocker either side of the starting hatch), then Loap lets you attempt to assign the trapped lemming as a blocker and consumes the skill, but they'll never actually become one.

7. In L3D, if two lemmings were bunched up, assigning one of them as a turner while they were in the first half of a grid square (in the direction of travel) would cause the turner to turn the other lemming. This trick is used in LP3D Wafer Walkway, for instance. Currently in Loap this doesn't work - the trailing lemming always ignores the turner and goes through, even if you assign the turner as early as possible, as described in #4.

12. You can attempt to assign a lemming that is already a turner the turner skill again. It won't consume the skill, but it'd probably be best if you couldn't 'lock on' to them like that.

13. If you assign a blocker to stand on the edge of mud, they'll reach the mud and drown instead of becoming a blocker. The skill is consumed. Works correctly for land/water edges.

XX. Loap 0.0.5.1 / LoapCore 0.0.6.0 / Commit e4b868d / Using two turners pointing into each other does correctly catch the crowd, as it did in L3D. However a turner pointing in toward a deflector block (see Attachment) causes a crash:

XX. When a hatch is close to a deflector block, the lemmings end up coming out of it going the wrong direction, as seen here in The Prisoner. Using a bomber to shave the tops of the deflector blocks off restored things to normal.

(EDIT: Also the rendering issues, but those are not a priority at this stage.)
My projects
2D Lemmings: NeoLemmix (engine) | Lemmings Plus Series (level packs) | Doomsday Lemmings (level pack)
3D Lemmings: Loap (engine) | L3DEdit (level / graphics editor) | L3DUtils (replay / etc utility) | Lemmings Plus 3D (level pack)
Non-Lemmings: Commander Keen: Galaxy Reimagined (a Commander Keen fangame)

DireKrow

#9
- When a lemming exits Security Walls (from LP3D), the game crashes with the error below. So far I haven't found any other levels where this happens.

Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at Loap.Rendering.Renderer.<>c__DisplayClass49_0.<AddBlocksToEntityQueue>b__0(BlockCacheEntry cacheEntry) in C:\Documents\Dev\loap\Loap\Rendering\Renderer.cs:line 792
   at System.Linq.Enumerable.SelectArrayIterator`2.MoveNext()
   at System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection)
   at Loap.Rendering.Renderer.AddBlocksToEntityQueue(List`1 queue, BlockCacheEntry[] blockCache, Int32 iteration, Func`3 getExitFrameFunc) in C:\Documents\Dev\loap\Loap\Rendering\Renderer.cs:line 778
   at Loap.Views.Game.GameViewRendering.RenderEntities() in C:\Documents\Dev\loap\Loap\Views\Game\GameViewRendering.cs:line 130
   at Loap.Views.Game.GameViewRendering.Render() in C:\Documents\Dev\loap\Loap\Views\Game\GameViewRendering.cs:line 107
   at Loap.Views.Game.GameView.DoRender() in C:\Documents\Dev\loap\Loap\Views\Game\GameView.cs:line 42
   at Loap.Views.BaseView.Render() in C:\Documents\Dev\loap\Loap\Views\BaseView.cs:line 65
   at Loap.LoapMain.Draw(GameTime gameTime) in C:\Documents\Dev\loap\Loap\LoapMain.cs:line 105
   at Microsoft.Xna.Framework.Game.DoDraw(GameTime gameTime)
   at Microsoft.Xna.Framework.Game.Tick()
   at Microsoft.Xna.Framework.SdlGamePlatform.RunLoop()
   at Microsoft.Xna.Framework.Game.Run(GameRunBehavior runBehavior)
   at Microsoft.Xna.Framework.Game.Run()
   at Loap.Program.Main() in C:\Documents\Dev\loap\Loap\Program.cs:line 9


- If you tell a climber to be a blocker or turner as they approach a wall, they'll climb the wall instead of becoming a blocker/turner. The skill is still consumed.

LOTY 2020 Winner
My NeoLemmix Levels: The Krow Files (File A v1.2 released 21-Feb-2020)

namida

My projects
2D Lemmings: NeoLemmix (engine) | Lemmings Plus Series (level packs) | Doomsday Lemmings (level pack)
3D Lemmings: Loap (engine) | L3DEdit (level / graphics editor) | L3DUtils (replay / etc utility) | Lemmings Plus 3D (level pack)
Non-Lemmings: Commander Keen: Galaxy Reimagined (a Commander Keen fangame)