Open ghost opened 6 years ago
Wow, this is not even sub-millisecond anymore. @qndel you literally posted a reply in the future.
So we have a test using dlvl 6 and Death Spit thanks to Xavier. You can see Death Spit reacting to changing the light radius both lower and higher in this clip. https://www.twitch.tv/videos/680811199
iirc light radius is capped at +50% anyway so he overstacked :)
weird pixels in menu - easiest to notice it by holding esc - menu will flash and you will notice spots outside of it, best seen at light terrain like the central square in tristram ;) @mewmew I guess I joined the pixel hunting club :D
@mewmew I guess I joined the pixel hunting club :D
haha, the hunt is on!
So we have a test using dlvl 6 and Death Spit thanks to Xavier. You can see Death Spit reacting to changing the light radius both lower and higher in this clip. https://www.twitch.tv/videos/680811199
Boy do I feel like an idiot. I did not even bother to read the comments on the lurker lounge bug list. See Belix's comments on light radius..
the actual behavior is that, if any item equipped or unequipped alters your light radius after entering a floor, the minimum effective light radius becomes 100%.
So if you had one Radiance (+40% Light) item on and unequipped it, this would drop your light radius from 140% to 100% correctly for both light shown on screen AND effective monster activation. However, if you also had one Night item (-40% Light) and then unequipped your radiance, it would only reduce your effective light radius from 120% to 100%, instead of the expected 80%.
Just to clarify, if you so much as equip or unequip ANY +/- light radius item (even if swapped instantly with another of equal magnitude) the minimum light radius becomes 100% for the remainder of your stay on that dungeon level.
This unfortunately was not tested in the video.
You can drop items across the barrier(yellow) in either direction, but your character cannot cross it. Nor can you pick the item back up from across the barrier.
images | images |
---|---|
You can drop items across the barrier(yellow), but your character cannot cross it. Nor can you pick the item back up from across the barrier.
Feature, not a bug. We call this the bounty sacrifice. By hearsay, this has been known to enhance the random item spawn of Wirt.
Unusually shaded areas in Tristram buildings:
Ogden | Ogden 2 |
---|---|
Gris | Pepin |
---|---|
I have an image of tristram here. https://mgpat-gm.github.io/tristram.html (You can zoom/scroll in browser)
Michael, you have a good eye for detail.
Michael, you have a good eye for detail.
That would be true if I had noticed it 20 years ago rather than 2 months ago!
Some vanilla bugs from devilutionX issues:
Bad pallet at end of loading poisoned water https://github.com/diasurgical/devilutionX/issues/593 Caves Door Multiplayer Tearing https://github.com/diasurgical/devilutionX/issues/762 Scrolls and charges not consumed correctly if swapped before hit-frame https://github.com/diasurgical/devilutionX/issues/792 Remove animation skipping on player attacks https://github.com/diasurgical/devilutionX/issues/779 Scroll removal behavior is different when using as items vs using as spell https://github.com/diasurgical/devilutionX/issues/793 Inconsistent behavior when attacking monsters: holding SHIFT vs standard attack https://github.com/diasurgical/devilutionX/issues/801 Consistent use of spacing for information on bottom panel https://github.com/diasurgical/devilutionX/issues/803 Inconsistent wording for health / mana potion information https://github.com/diasurgical/devilutionX/issues/807 Reword potion effect descriptions for consistency https://github.com/diasurgical/devilutionX/pull/808 Incorrect spelling of "right-click" verbs on item descriptions and help screen https://github.com/diasurgical/devilutionX/issues/809 Incorrect referece to "left mouse buttons" as "left click" on game help https://github.com/diasurgical/devilutionX/issues/810 Character screen base/now attributes and life/mana values are misaligned in the UI https://github.com/diasurgical/devilutionX/issues/814 Inconsistent references to health values in the game: "LIFE" vs "HIT POINTS" https://github.com/diasurgical/devilutionX/issues/815 Inconsistent spelling of "hotkey"/"hot key" https://github.com/diasurgical/devilutionX/issues/817 Slain hero quest can freze the game https://github.com/diasurgical/devilutionX/issues/826 Missing 1st animation frame on all player/monster/item animations https://github.com/diasurgical/devilutionX/issues/838 'quick' and 'haste' speed modifiers do not work as intended https://github.com/diasurgical/devilutionX/issues/839 Attempting to buy item that cannot be used while inventory is full results in lost item https://github.com/diasurgical/devilutionX/issues/848
Boy do I feel like an idiot. I did not even bother to read the comments on the lurker lounge bug list. See Belix's comments on light radius..
the actual behavior is that, if any item equipped or unequipped alters your light radius after entering a floor, the minimum effective light radius becomes 100%.
So if you had one Radiance (+40% Light) item on and unequipped it, this would drop your light radius from 140% to 100% correctly for both light shown on screen AND effective monster activation. However, if you also had one Night item (-40% Light) and then unequipped your radiance, it would only reduce your effective light radius from 120% to 100%, instead of the expected 80%.
Just to clarify, if you so much as equip or unequip ANY +/- light radius item (even if swapped instantly with another of equal magnitude) the minimum light radius becomes 100% for the remainder of your stay on that dungeon level.
2 new vids of the light radius bug: https://www.twitch.tv/videos/715546903 https://www.twitch.tv/videos/715546976
From my observation, Belix's comment seems to be mostly correct. The only incorrect part is "(even if swapped instantly with another of equal magnitude)." I tested this in the second vid and my light radius did not change in terms of monster activation. Something interesting I did notice in the first vid tho is that if you wear enough gear to achieve -100% LR, then adding +20% doesn't change anything at all, not even monster activation, and it doesn't set it back to 100%.
Additional barriers in town exist around trees. I don't know the inner workings of the game, but I assume the mechanism is related to my previous observations.
You can drop items across the barrier(yellow) in either direction, but your character cannot cross it. Nor can you pick the item back up from across the barrier.
Bends in the river have a slightly lighter image | Straight line river areas have a checkered pattern |
---|---|
images | images |
---|---|
Normal | Cut |
---|---|
The world is devised in to a diamond grid, a pice can be either solid or walkable. You can always walk to a neighboring tile, but players can only walk to diagonal tiles if they are not cornored off by solid tiles from both sides.
Only monsters can move between diagonally blocked tiles:
┌───┬───┐
│ X │ │
├───┼───┘
│ │ X │
└───┘───┘
Every one can move betwen any of the free tiles here:
┌───┬───┐
│ │ │
├───┼───┘
│ │ X │
└───┘───┘
Every one can move betwen any of the free tiles here:
This does not reflect what I see with the tree:
1 2 3
┌───┬───┐───┐
│ │ │ | A
├───┼───┼───┼
│ │ X │ P | B
├───┼───┼───┼
│ │ I │ | C
└───┘───┘───┘
P = Character X = Tree I = Item
P cannot move to diagonal squares. Furthermore, in order to pick up I, P has to move to C3. Is my grid correct?
Here's a batch of character graphical errors:
The south-west direction is not used on Warrior when a medium armor, mace, and shield are equipped while standing idle. It forces him to stand facing west. Although the sprite does seem to exist. https://www.twitch.tv/videos/753340000
On Warrior while wearing medium armor, and a sword, if you cast a magic spell, his sheath disappears from about 7 of the 8 directions. This does not happen when casting a fire spell or lightning spell. Check the circles. https://www.twitch.tv/videos/753340093
On Rogue while wearing either light armor or medium armor and using a mace, a sheath appears when attacking, then promptly vanishes when standing idle. Check the circles. https://www.twitch.tv/videos/753340376
On Rogue while wearing heavy armor and using a staff, if you swing the staff, 1 of the directions is missing entirely. It seems the devs duplicated this one and ordered the directions wrong, causing Rogue to not swing properly in 5 of the 8 directions. https://www.twitch.tv/videos/753340484
On Rogue while wearing medium armor and using a bow, casting any magic type will show Rogue holding an arrow in both hands. This does not occur while wearing light armor or heavy armor; she holds the arrow only in the same hand as the bow. Check the circles. https://www.twitch.tv/videos/753340587
On Rogue while wearing medium armor, sword, and shield, if you walk south-west, west, or north-west, a goldish pixel appears at the top of the right wing on her shield. This does not appear as part of the character sprite. https://www.twitch.tv/videos/753340690
Edit: Forgot about the way Rogue's sword and sheath curve while walking when wearing medium armor and heavy armor. Also, it appears that while Rogue is wearing medium armor, mace, AND a shield, the sheath will appear as well.
I found another one with warrior - light armor's shield slightly changes color depending on if you are wearing a weapon or not, this change does not persist while moving
https://github.com/diasurgical/devilutionX/pull/899/files This explains the bug which causes unique monsters' light radius to appear on the level away from them. From what I've seen, it works properly the first time you enter the level, but on next entries, the monsters might actually be generated in completely different places, where the light radius stays at the original spot
This is caused by two things in LoadGameLevel
function
First one:
GetRndSeed()
which actually change the seed itself
glMid1Seed[currlevel] = GetRndSeed();
- glMid1Seed and friends are only used for debugging, yet affect the whole gameSecond one is HoldThemeRooms();
This function changes the BFLAG_POPULATED flag for theme rooms, which prevents placing monsters and is only called when the level is entered for the first time.
And that's where things diverge - means MonstPlace
will encounter different flags and return different values on subsequent entries = different number of random calls = different random values = different monster positions
fixed by https://github.com/diasurgical/devilutionX/pull/899
Written by Bolty in 2010-08-08 at The DSF Buglist for Diablo v1.09. Copied here as a mirror:
Already part of https://github.com/diasurgical/scalpel/blob/master/BUGS.md
@mewmew You are two years late: https://github.com/diasurgical/scalpel/blob/master/BUGS.md
;p
This "thread" has become so long and convoluted, consider putting images and longer posts in spoiler tags.
@mewmew You are two years late: https://github.com/diasurgical/scalpel/blob/master/BUGS.md
perpetually late to the party.
You could consider creating a new milestone "Diablo without bugs" and add issues for all known vanilla bugs. When a fix is found and added via comment to the code the issue could be closed. this way there would be a better overview of the known bugs.
Perhaps you could also implement the fixes not as comments but in an IF DEFINED statement instead so that a bugfree version could be compiled with a special flag.
I love the first idea, but IF DEFINED statement
is an issue. For one, some bugs are graphical and require patching game assets. Two, those that are code related, many are certainly not just a clean one-liner and some are tied to multiple functions. Some may be relevant to another bugfix or require rewriting a function here, fixing this there etc. In the end you'd end up with something that looks almost as ugly as what IDA spat out.
Which brings me to point no. 2. This probably wasn't mentioned before so here it is: my long term goal was to get the code cleaned up and produce 100% exact results (which we did). Afterwards, using the code as a reference from which everything can be rewritten from the ground up. This would allow fixing bugs, modern coding practices, more efficient and easier to mod etc. while guaranteed accurate unlike the many re-implementation projects floating around that were based off guesswork. (It's not open source, but I've done this with Diablo's UI using the original as a guide)
So imo Devilution should die where it is. Some asswipe released the official code (hey buddy that's great but ya' could have done so sooner ok??). Which effectively achieves the above goal several times over in that now we have the purest reference from which to work, but also rendered many manual-hours by me (and a few others) nigh-useless. So there is our starting point, don't use it, don't copy it, but reference it. The even tastier fruit is for all hands taking.
What the new owner(s) of Devilution do is up to them: Buy it break it fix it smash it melt it love it hate it burn it. If coming up with a multiple if-def nested monster is what they choose or not. Just my 2 cents, the last 2 cents I had saved up for college.
The idea is definitely nice, but I agree that a lot of ifdef is going to turn ugly real quick. Instead, we are fixing them in DevilutionX 1.x.y. We have also unified the shareware and retail version and made it detected what version to run depending on the provided MPQ and intend to do the same with hellfire exactly to minimize the amount of ifdef found in the code.
Here is a quick example of what issues you quickly encounter with a lot of ifdef
in the code:
#ifdef FIX
if (bug && fix) {
#else
if (bug) {
#endif
// Am I indented once or twice?
}
// is this file broken?
Forgot to mention that as well but yeah we have a lot of those from debug related ifdef code. At least on Windows I use Notepad++ which has the ability to fold nested code, and it causes lots of issues since it doesn't know where to stop.
You've convinced me. IFDEFs are not the way to go 😄 I guess it's ok to only fix them in devilutionX but I don't see how we can prove that devilutionX still is exactly like vanilla + bugfixes. there are so many changes over there (like the QOL stuff which I love BTW).
Even with ifdef's you woudn't know that you didn't fundamentally break the game with a online fix to a oob error.
The solution is writing tests and automation, I'm working on implementing time demos atm.
When you reenter the level, the light is wrong. In church it's actually 1 tile off, it's because when you leave the level, the current light gets saved to dLight, which includes character being at the level entrance then gets restored when you come back. In catacombs the old light seems to be on the same tile but slightly affects the strength of light around the player.
ChangeLightXY(plr[myplr]._plid, plr[myplr]._px, plr[myplr]._py);
adding this line after
plr[pnum]._plid = AddLight(plr[pnum]._px, plr[pnum]._py, plr[pnum]._pLightRad);
seems to fix the problem - technically it doesn't move player's light because it's at px/py already, but gets rid of the leftover light anyway
fixed by https://github.com/diasurgical/devilutionX/pull/899
Quest items are spawned with seed 0 and iCreateInfo 0 which makes 2 quest items of the same type considered dupes, have fun with 3 bloodstones in valor quest 👍 Valor quest sometimes gets bugged up - bloodstones don't open anything or open all 3 rooms at once - this is related to pedestal's oVar6 which acts as a counter showing how many bloodstones you've inserted so far, if it gets a value above 2, valor is basically bugged. No idea what's ruining oVar6 though.
if you walk south or east while having 20% light radius, your character disappears while you are moving [fixed by diasurgical/devilutionX#899]
you can only see monsters that are diagonally from you if you have 20% light radius, if the monster is north/east/south/west, it's invisible monsters that are invisible on the tiles mentioned above attack player, but lose aggro over time [fixed by diasurgical/devilutionX#899]
leaving the level through town portal and reentering through entrance grants you vision of things at town portal till you get close enough to overwrite it [fixed by diasurgical/devilutionX#899]
light radius and vision aren't updated consistently, they are supposed to be equal but the function that recalculates item stats limits light radius to 2-15 and vision to 10-15 = after you reequip an item you can pull more monsters than you see [fixed by diasurgical/devilutionX#899]
knockback can knock you out of your light radius/vision = character disappears [fixed by diasurgical/devilutionX#899]
vision updating is pretty poo, even more so on low light radius - 30% on the gif [fixed by diasurgical/devilutionX#899]
This has to be the most complete light radius bugs list xDD
A few of warrior's animations while wearing a shield but no weapon have wrong colors.
Heavy armor, shield, no weapon, casting spell:
I don't think I saw this one listed, but sometimes on floors 13 through 16, you will be spawned on a tile you normally cannot stand on. You can easily walk off the tile, so it's not a major deal for normal play, but still is a thing that shouldn't happen.
I don't think I saw this one listed, but sometimes on floors 13 through 16, you will be spawned on a tile you normally cannot stand on. You can easily walk off the tile, so it's not a major deal for normal play, but still is a thing that shouldn't happen.
Do you have a save file or game seed to reproduce this @NiteKat?
We finally have a reproducible level reroll bug: https://github.com/diasurgical/devilutionX/issues/1506
Golem HP overflows when cast with negative mana https://github.com/diasurgical/devilutionX/issues/1522
https://github.com/diasurgical/devilutionX/pull/1541 Sometimes random automap parts would get explored, this is because X/X got passed into SetAutomapView in DoVision instead of X/Y 🤦
You can get Zhar to display his angry message twice https://github.com/diasurgical/devilutionX/pull/1540 Found by @NiteKat
If a player tries to swap sword+shield with a two-handed weapon without sufficient inventory space it leads to a network desync (what's in the right hand gets de-equipped on other clients, but not for local client).
Video example: https://www.youtube.com/watch?v=2GtUv-m8FoI (Uh, never mind the shield position looking weird. That's a minor bug which happened to be in the branch I used for recording this.)
The cause was the game always sending a network packet for de-equipping the right-hand item before even checking if the local player has space to finish the weapon swap.
PR fixing the bug: https://github.com/diasurgical/devilutionX/pull/1546
Hellfire's shimmering shrine says "Spirtual energy is restored"
Phasing or holy shrine (because it uses phasing) in hellfire will warp the player to 0/0 coords in case of failure (unable to find a spot for teleporting in 500 tries)
Player takes damage to HP through Mana Shield when Infravision wears off. This can also occur during transitions of the Rage skill. https://github.com/diasurgical/devilutionX/issues/1353#issuecomment-821758883
Additional notes: I didn't exhaustively analyze all usages of CalcPlrItemVals()
so this could potentially happen in other ways as well. However, most of the time, order of events in the game logic would protect the player from receiving damage to HP even if CalcPlrItemVals()
is called so moving items around in your inventory, for example, should not trigger this bug. Infravision and Rage were just the most obvious offenders.
https://github.com/diasurgical/devilutionX/issues/1582 No idea why they check the distance in some cases and don't in other, I don't see a pattern: Distance from trigger check:
Crypt stairs up (first level) Catacombs stairs up Catacombs quick entrance Caves stairs down Caves quick entrance Nest stairs up(first level) Hell quick entrance
Missing distance check: Church stairs up (Including ones to town) Church stairs down Crypt stairs up Crypt stairs down Catacombs stairs down Caves stairs up (was the one causing problems) Nest stairs up Nest stairs down Hell stairs up Hell stairs down Hell's entrance to dlvl 16
https://github.com/diasurgical/devilutionX/issues/1589 Golems fight each other
Hellfire: Berserked monsters get light but it disappears if you reenter the level Light from dead monsters stays on the ground when you reenter the level till you come close enough to overwrite it with player's light https://github.com/diasurgical/devilutionX/issues/1586 https://github.com/diasurgical/devilutionX/issues/1588
https://github.com/diasurgical/devilutionX/issues/1672 Hellfire bug: Fire arrows from traps instakilling sometimes. This required a pretty specific scenario to happen: You had to successfully block the projectile You had to be standing against a wall or some other obstacle.
Seems this bug also exists in vanilla, hellfire just added another way to die from it 😆
https://github.com/diasurgical/devilutionX/pull/1678
Diablo has some weird action queuing that lets attacks/casts be faster if you are spamming them (they don't play the full animation),
code is in CheckNewPath
( 🤮 ), while it made sense to include barrels there to be able to smash them with maximum possible speed, having regular object interaction there is a mistake.
It's just a coincidence diablo doesn't have many objects that can react to multiple clicks and fast enough for it to make a difference - mana/health fountains and doors being an exception. Behold the chaos on the gif below.
Multihit by a trap bug Happens if:
diasurgical/devilutionX#1515
There is a bug that very rarely causes the braziers around the story book on crypt level 1 to be missing, and then randomly causes the game to crash. If the game doesn't crash, it will simply fail to load the graphics, and the story book location will look like this:
This bug also exists in vanilla Hellfire:
Explanation of the bug:
The braziers rely on OFILE_CANDLE2 assets being loaded Those assets get only loaded if:
As for the crypts level 1:
If the assets are not loaded, then a second bug happens, where while searching for the assets the game will simply run off past the end of an array into no-man's-land until it randomly finds a byte that matches what it is looking for. Depending on where that is, the game will randomly either just not have any graphics to show, or will crash.
This bug should be fixed by diasurgical/devilutionX#1748
Currently documented bugs: The DSF Buglist for Diablo v1.09 (Lurker Lounge)
The goal of this issue is to document any new bugs we come across while examining the code that are native to the original game. This will help us fix them later on when we make mods/ports.
New bugs discovered (last update 06/24/18)
Chamber of Bone
is quest level 2, so the portal would appear on dungeon level 2 at the same X/Y coordinate.monster.cpp -> ProcessMonsters