Closed vi closed 4 years ago
2 is known. As for 1, that's not actually possible on the current engine
https://vi-server.org/pub/yapdbug30.mp4
Seed: 3945743078123 Depth: 7
that's not actually possible on the current engine
Then maybe a fuzzing test can be written?
Level generator is run in a loop. For each generated level:
This requires rapidly loading and unloading levels (yes, only one can ever be loaded at a given time) which will freeze up.
The text for describing skill levels say "One point of strength per 3 points invested", but it seems that scheme is now simplified and it is now one to one. The same for Focus.
which will freeze up
What do you mean? That level loader is buggy and if you keep on generating levels more and more it will eventually freeze up?
Or that loading and unloading levels would dominate CPU time, compared to checking diving bijection?
Or that this process would not stop and run endlessly, locking up the game?
Loading a level takes 400ms on my device. Repeatedly loading and unloading will take forever and probably freeze up the render thread.
Just turn off rendering at all for this mode. It is not intended to be a part of normal playing mode, just a development tool.
As soon as discrepancy found, it should output seed&depth, then exit. If everything is OK, just run forever. For 400ms I expect about 50k dives to happen if the app is running overnight. Not that much for a fuzz test, but better than nothing.
Also freezing things because of just too much things happening it also a [latent] bug.
Such things can also affect old, weak and overloaded devices where everything is very slow and lag is everywhere.
Difficulty selection is misaligned. May be caused by Power Saver mode
After falling down in Distant Well room, no bone remains.
Fortunately, deep water is present.
After a while I found out that I have the key for that door (I don't remember where exactly I picked it).
Unless it's deliberate gameplay change, I don't see any "locked on target" mark for Sniper. Or is this part of Shattered is not yet or not intended to be ported?
Nope, it's not intended. I'll have to fix.
Also are Scrolls of Upgrade supposed to be fireproof like in Shattered?
No, idk why they are
No, idk why they are
Items that have constant quantity per run (SoU and PoS) are protected from accidental destruction in Shattered.
Hero steps into a recently discovered trap.
In Shattered hero routes around it automatically.
So many subissues at this point you should probably create a new one. This is known and it's a bug with the map flags cache; disable it in development settings and you'll see this doesn't happen, but performance may be reduced.
Reproduced your bones bug.
So yep, I've added a way to enter seeds on debug mode so I can play other people's games.
And the diving issue is not really fixable without some really ugly code. The game halves your x and y when diving, and places you in that location, and doubles for diving.
If your x or y is an odd number on the surface you will not be placed on the right tile when undiving. (sorry issue closing was accidental)
Eg: x is 13. Halved that's 6 (Java rounds down in integer division but the result is the same), so your x underwater is 6. When undiving on this same location, your x is 12
There is no way to avoid this whatsoever without refactoring the level system to allow multiple levels to be loaded at once
Why not have a list of x,y coords that each tile sends to? Because I'm simplifying here, and PD uses a 1d array to represent a 2d map, so to convert xy coords to a single int, the index of the tile in the list (how mob positions are handled as well), you need the level loaded.
Maybe make each deep water location to be minimum 2x2 size? This way you'll at least appear within the same 2x2 square.
Or make deepwater a subarea of each depth, without stretching. Outside of that subarea there's just no deepwater possible and speed of moving underwater does not convert to double speed moving overwater.
Ugly hack idea: if after diving explicitly check if hero is inside a wall then jump to nearest water body.
But anyway internal ugliness of diving mechanic may present a problem when more features gets deviced, e.g. enemies/familiars that dive, underwater bombs, etc.
Outside of that subarea there's just no deepwater possible
Again, this is two-way interactions between two levels. Not really possible.
Maybe make each deep water location to be minimum 2x2 size?
A nightmare to code into the current levelgen.
Again, this is two-way interactions between two levels. Not really possible.
I don't understand. If underwater level is guranteed to be smaller than overwater level, diving out is trivial - just copy the coordinate. For diving in - if reusing coordinate for underwater level results in out of range thing then just don't dive in (and don't paint deep water there).
/ Note: I haven't researched into Pixel Dungeon code much, so maybe I don't know some issues /
It's quite simple: The values have to be calculated on the fly as coordinates don't hold up between multiple visits to a level.
What about this hack?
Ugly hack idea: if after diving explicitly check if hero is inside a wall then jump to nearest water body.
I already made it check for walls and then place you on the nearest non-solid tile (older diving issues were more serious than this and had a different issue entirely). It shouldn't be possible to land in a wall anymore but it's still possible to land on regular water rather than deep water.
Is it possible to land on a trap? Would it activate if so?
No, as traps can't be in water. Deep water is always surrounded on all sides by shallow water and the calculation is only ever off by 1 space.
Can it intersect with an enemy?
Nope as a tile with an enemy is considered "solid"
The remaining issue here, "hero doesn't route around traps" is now fixed indev. For now, disabling the map flags cache should prevent this ever happening.
10a8fbb208da790db92000f9dd12bae2f2a2cf2d