The Wayback Machine - https://web.archive.org/web/20220322114300/https://github.com/diasurgical/devilution/issues/64
Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Document Diablo's bugs #64

Open
ghost opened this issue Jun 24, 2018 · 138 comments
Open

Document Diablo's bugs #64

ghost opened this issue Jun 24, 2018 · 138 comments

Comments

@ghost
Copy link

@ghost ghost commented Jun 24, 2018

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)

  • When casting a town portal in a quest level, leaving, and then going down into the dungon, the town portal will be placed in the dungeon. For example, Chamber of Bone is quest level 2, so the portal would appear on dungeon level 2 at the same X/Y coordinate.
  • Diablo is supposed to be immune to the squelch radius, however, the game checks the AI for Diablo's monster type, thus always failing. monster.cpp -> ProcessMonsters
@ghost ghost added the good first issue label Jun 24, 2018
@fearedbliss
Copy link
Contributor

@fearedbliss fearedbliss commented Jun 24, 2018

Are these bugs going to be fixed in devilution after devilution development becomes stable or is the devilution source code gonna be a pure documentation update including leaving in the vanilla bugs?

@ghost
Copy link
Author

@ghost ghost commented Jun 24, 2018

The Purpose section of the readme has the answer.

@fearedbliss
Copy link
Contributor

@fearedbliss fearedbliss commented Jun 24, 2018

Ah ok, I did read this like a week ago but I guess I forgot ;D.

@ttdonovan
Copy link
Contributor

@ttdonovan ttdonovan commented Jun 26, 2018

The pull request above is basically a copy of the text from the original posting with some Markup for formatting. Is something like this is what is being requested?

@ghost
Copy link
Author

@ghost ghost commented Jun 26, 2018

We can definitely make use of your copy in case the original one goes down. However, this issue is to track new bugs that haven't been documented anywhere else, so that we can fix them in the future.

(Not Devilution of course, but mods based on)

@ghost
Copy link
Author

@ghost ghost commented Jun 27, 2018

As a rule for any bug published can we have the save file for this? I would like to have something to make this more easy to replicate...

because I am thinking on looking at the TP sequence and the Chamber of bone locations... because Technically TP is working but it's not marking the chamber of bone as a different map , if I am not mistaken...

EDIT:

I am probably completely wrong on that one. The dungeon map array looks ok for the most part...

Perhaps the Portal setting and getting is wrong? Perhaps it's not specifying the correct map for special maps?

Ok . Which memory map (showing address locations) is the most accurate for the origional diablo? Do you have it ? All the addresses I am seeing appear to be inaccurate.

@ghost
Copy link
Author

@ghost ghost commented Jul 8, 2018

@ApertureSecurity check Support/surgery.xls for a spreadsheet containing addresses.

Found another one while testing the world.cpp refactor. This bug is also part of vanilla.

EDIT: This bug was Devilution only
https://s33.postimg.cc/w9y0yf6ov/doorflip.png

@ghost
Copy link
Author

@ghost ghost commented Jul 23, 2018

Brevik himself talked about this bug in an interview once. The Caves were entirely hardcoded and many fixes added per-tile:
cave bug

@ghost
Copy link
Author

@ghost ghost commented Jul 23, 2018

@galaxyhaxz is this in the origional game or are we going to add this to our bug list?

@ghost
Copy link
Author

@ghost ghost commented Sep 10, 2018

Well, it looks like the door issue mentioned above was devilution specific. However, these pieces are saved with the character so it becomes bugged when loading the character in a vanilla game. ee56751

@mewmew
Copy link
Contributor

@mewmew mewmew commented Sep 10, 2018

Well, it looks like the door issue mentioned above was devilution specific. However, these pieces are saved with the character so it becomes bugged when loading the character in a vanilla game. ee56751

Interesting find. This is good to know when validating bugs in the future against vanilla Diablo. Basically, we can use the same seed for dungeon generation when validation, but we can't use save files.

@ghost
Copy link
Author

@ghost ghost commented Sep 12, 2018

There is an overflow bug in the dungeon algorithm of Cathedral that sometimes causes out-of-map pieces. Documented here.

I can confirm that Devilution works correctly (i.e. is bugged like vanilla). Current known seeds:

Cathedral:
2588
4743
7281
9345
15236
@ghost
Copy link
Author

@ghost ghost commented Nov 1, 2018

Eldritch Shrine Bug

The Eldritch shrine (turns healing/mana pots into rejuvs and full pots into full rejuvs) uses the player's holding item buffer to temporarily store the rejuvs. What could possibly go wrong here?........ xD xD

If you click on the shrine and then pickup an item from your inventory/belt, the item you're holding will get overwritten. When you place it back down, it turns into a rejuv. BEWARE!

As a side note, this can be exploited for an extra rejuv, grabbing say 1 piece of gold or some junk item.

Bugfix

The routine for this in OperateShrine should use a temporary buffer local to the function or the global temporary buffer curruitem to fix this. :)

@mewmew
Copy link
Contributor

@mewmew mewmew commented Nov 1, 2018

As a side note, this can be exploited for an extra rejuv, grabbing say 1 piece of gold or some junk item.

Haha, great hack!

@ghost
Copy link
Author

@ghost ghost commented Mar 17, 2019

Edit: actually the spaces in yellow are spots where there aren't any pixels in the .CEL, so the game never draws anything there. The function responsible for drawing the void fills them black. The only way to fix this is to edit the CEL map and create pixels in the empty spots.
DIABLO_2019031337_061641
DIABLO_20190317_221850

@ghost
Copy link
Author

@ghost ghost commented Apr 4, 2019

By chance I stumbled upon a broken tile on level 5. Here is the picture with seed and location:
_seed_bug_lv5

@mewmew
Copy link
Contributor

@mewmew mewmew commented Apr 5, 2019

It's great. We are gonna be able to create a version of Diablo that fixes all known bugs. Of course, Devilution will contain all original bugs to stay true to its origin.

@ghost
Copy link
Author

@ghost ghost commented Apr 7, 2019

Another bug where standing in certain spots overwrites the top left corner of the control panel:
_tile_bug_lv1

@mewmew
Copy link
Contributor

@mewmew mewmew commented Apr 7, 2019

Another bug where standing in certain spots overwrites the top left corner of the control panel:

Is this in vanilla too? Never seen the panel being incorrectly rendered before.

@AJenbo
Copy link
Member

@AJenbo AJenbo commented Apr 7, 2019

All your belt items also went invisible. Could be a miss calculated CelSkip/CelCap

@ghost
Copy link
Author

@ghost ghost commented Apr 7, 2019

@mewmew Yeah it's in vanilla. You won't notice the bug unless you hover your mouse over that spot in the control panel, it overwrites the panel graphic. I rewrote the whole render and discovered this bug while testing. It's likely caused by DrawMain not blitting all parts of the screen all the time.

@AJenbo The belt items is just a side effect of the new render, not in vanilla. If you notice there's transparency! <3

Edit: attached save file so you can test it. Load the game and place mouse over top left corner.
single_4.zip

Interesting is that this bug doesn't happen in the debug release or prior. So it was caused by something changed in the render in 1.00.

@ghost
Copy link
Author

@ghost ghost commented Apr 28, 2019

@AJenbo had pointed this bug out awhile back, as it was thought to be caused by my render re-implementation. Actually, it's caused by the whole eflag system where for some reason, when walking south east, arches aren't drawn above the player. So the fix was to add separate drawing code outside of the render. I had to catch it mid action, but the spots in yellow are where eflag tiles are drawn. They overwrite the book case. IIRC this bug was fixed in the PSX version, since they ditched eflag entirely.
DIABLO_20190428_063210

@AJenbo
Copy link
Member

@AJenbo AJenbo commented Apr 28, 2019

Nice catch, my print screen has a delay so getting shots like this is a pain :)

The other yellow box is causing issues when we upgrade the render to have per-pixel transparency because it renders the tile twice, resulting in 75% opaqueness instead of 50%

@AJenbo
Copy link
Member

@AJenbo AJenbo commented May 16, 2019

Here's another render issue:
Caves

diasurgical/devilutionX#111

@qndel
Copy link
Member

@qndel qndel commented May 16, 2019

In the very tristram itself :)
image

Zoomed:
image

I'ts more obvious in tchernobog, that's what made me notice it :P

@ghost
Copy link
Author

@ghost ghost commented May 16, 2019

@AJenbo I believe that issue is the same one I reported above. There's a broken tile that can occasionally spawn in the caves that does that.

Here is a list of seeds for Caves with that broken tile and the coordinate of it:

seed 24, x 28, y 10
seed 206, x 19, y 27
seed 265, x 27, y 6
seed 534, x 26, y 20
seed 1714, x 24, y 25
seed 1980, x 12, y 14

Here is code to fix the tile by brute force. It should be ran during DRLG_L3:

	for(j = 0; j < 40; j++)
	{
		for(i = 0; i < 40; i++)
		{
			if(dungeon[i][j] == 9 && dungeon[i - 1][j] == 13 && dungeon[i][j - 1] == 14)
			{
				dungeon[i][j] = 7; // set broken tiles to dirt instead of stalagmite
				dungeon[i][j - 1] = 7;
				dungeon[i-1][j] = 7;
			}
		}
	}

Additionally, here are seeds for Catacombs that contain the broken wall tile:

550
2346
2377
2992
5162
6365
6500
6711
7152
7155
7462

And the code to fix it:

			if(dungeon[i][j] == 15 && dungeon[i][j + 1] == 1) { /// add this check
				dungeon[i][j + 1] = 8; // change left wall to left corner
			}

Last but not least, some more seeds with the overflow bug in DRLG_L1 documented by @mewmew:

24627
29946
32559
@mewmew
Copy link
Contributor

@mewmew mewmew commented Sep 16, 2021

Monsters can get stuck in a weird state if you transition levels while they are in the middle of charging. They get stuck as sort of missiles, sort of monsters, where their graphics don't load, but they occupy a tile, and can be moused over to show their information. Click them will launch an attack (with a bow equipped, with melee your character will walk up if not close and then attack). You cannot harm the monster in any way with it in this state (i.e. all melee attacks fail, ranged attacks go by, and firewall does nothing). The only thing that fixes the monster is to use telekinesis on it, but this only works if the tile to which telekinesis will knock it back is open; if not, the monster is forever bugged.

@NiteKat do you have a save game to reproduce? Would be very useful for trying to fix the issue.

@qndel
Copy link
Member

@qndel qndel commented Sep 16, 2021

Monsters can get stuck in a weird state if you transition levels while they are in the middle of charging. They get stuck as sort of missiles, sort of monsters, where their graphics don't load, but they occupy a tile, and can be moused over to show their information. Click them will launch an attack (with a bow equipped, with melee your character will walk up if not close and then attack). You cannot harm the monster in any way with it in this state (i.e. all melee attacks fail, ranged attacks go by, and firewall does nothing). The only thing that fixes the monster is to use telekinesis on it, but this only works if the tile to which telekinesis will knock it back is open; if not, the monster is forever bugged.

@NiteKat do you have a save game to reproduce? Would be very useful for trying to fix the issue.

diasurgical/devilutionX#2879
it's trivial to reproduce and trivial to fix ;) nothing interesting

@NiteKat
Copy link

@NiteKat NiteKat commented Sep 16, 2021

Monsters can get stuck in a weird state if you transition levels while they are in the middle of charging. They get stuck as sort of missiles, sort of monsters, where their graphics don't load, but they occupy a tile, and can be moused over to show their information. Click them will launch an attack (with a bow equipped, with melee your character will walk up if not close and then attack). You cannot harm the monster in any way with it in this state (i.e. all melee attacks fail, ranged attacks go by, and firewall does nothing). The only thing that fixes the monster is to use telekinesis on it, but this only works if the tile to which telekinesis will knock it back is open; if not, the monster is forever bugged.

@NiteKat do you have a save game to reproduce? Would be very useful for trying to fix the issue.

diasurgical/devilutionX#2879
it's trivial to reproduce and trivial to fix ;) nothing interesting

Somehow this had just never been documented here.

@galaxyhaxz
Copy link
Member

@galaxyhaxz galaxyhaxz commented Sep 16, 2021

Never seen this mentioned as a bug, so here's my take. There are two unique items in the game which can spawn on two base items. "Gnarled Root" (Club/Spiked Club) and "Stormshield" (Tower/Gothic Shield). This is definitely a bug as items in the global item table are supposed to have a unique ID per item, so unique items can reference that ID. However, Club/Spiked Club use the same ID instead of the latter being none. Same applies to tower shield.

Additionally, Warrior's Club has the same entry for unique item lookup as Club. It should be empty however. Lightforge also uses the wrong lookup type in the unique item table, using a regular mace, allowing it to drop. It always morphs on a new game because of this. It is a quest item and special drop.

@AJenbo
Copy link
Member

@AJenbo AJenbo commented Sep 17, 2021

Empty mana orb doesn't match background:
image
(there are bits of gold in the wing from a previous UI element at that position)

@galaxyhaxz
Copy link
Member

@galaxyhaxz galaxyhaxz commented Sep 18, 2021

The way diablo chooses levels for magic affixes is buggy and leads to several problems. So I'll explain. First they are chosen in one of three ways depending on item type:

  • All items but staves: min level is 1/2 base level and capped to 25
  • Staves with charges: no minimum affix level
  • Staves without charges: min level is 1/2 base level and not capped

Bug # 1: Staves are like jewelry in that they are always supposed to be magic or contain charges. It is possible however to find a plain white staff. For example, a level 4 monster drops a magic staff with a suffix, however there are no suffixes between the level range (2-4) thus it drops without anything.

Bug # 2: Minimum magic level is capped to 25 max. Now only Wirt is capable of generating items this high. Why is this a problem? It means past a certain point some affixes stop spawning. At character level 50, Wirt can no longer sell Obsidian (thus the famous Ob Zods).

When fixing monsters to drop with their difficulty bonus, it opens up a plethora of affix bugs.

  • Level 50+ monsters can't drop staves with a suffix
  • Various other items have few/no affixes once monsters reach a high enough level

When removing the level cap, it additionally opens up these bugs:

  • Rings/amulets dropped by level 56+ monsters can only spawn with one affix, Zodiac. No prefixes spawn
  • Certain unique monsters such as Lazarus, on hell difficulty, will only drop white rings/amulets (no affixes at all)

This may just be an odd design quirk, but once you fix monsters, the minimum level set on affixes really starts breaking the game.

@qndel
Copy link
Member

@qndel qndel commented Sep 23, 2021

Diablo's magical unique loot system explained using staff of shadows as an example:
Staff of shadows uses long staff (lvl 4) as a base and is lvl 2 itself.
If multiple unique items meet the requirements, the one lowest on the list gets chosen.
Immolator is lvl 4 and uses a long staff base too.

Which means in theory staff of shadows can never drop, because if lvl 4+ loot drops (to roll the long staff), then immolator will always gets picked over staff of shadows. Ofc you can get it to drop in single player if immolator drops first, because then it will stop blocking staff of shadows - such a staff will morph back into immolator in vanilla's new game.

However, it's possible to get a stable one because of a bug described in diasurgical/devilutionX#2763
Item generation is messed up because monster level increased by difficulty bonus/unique monster bonus is only used for generating the base item - affix/unique item generation uses monster's starting level (ignoring boss/difficulty modifiers)
Which means there's one scenario where staff of shadows can drop - lvl 2 or 3 monster on nightmare/hell difficulty.
Let's take a lvl 2 monster as an example.
Difficulty bonus = 15 on nightmare and 30 on hell.
Base item would roll with (2 + difficulty bonus) level, which means a long staff can drop.
But affix/unique item would get rolled with the original level = 2 = congrats, it's a staff of shadows!

To make it even more confusing, unique monsters have a hardcoded +4 bonus to affix/unique generation level BUT NOT the base item level - which means that you can only get staff of shadows from a NON-UNIQUE lvl 2-3 monster on nightmare/hell difficulty, because if it was a unique monster, the long staff could always hit immolator.

This is certainly a bug because there's 0 reason why for example celestial bow (which looks like something a lvl 3 rogue would be happy about but later? ...) can only drop on nightmare or hell ;)

To make it even more funny, it means that in singleplayer you can get some uniques in 2 versions - stable or unstable that will morph in a new game.
An unstable staff of shadows would drop if it only dropped because you already got immolator before it and a stable one would drop from a scenario described above.
Hope that's not very confusing, only took 25 years to find out 🤪

@StephenCWills
Copy link
Member

@StephenCWills StephenCWills commented Oct 2, 2021

Adjacent attack damage from Monk, Bard, and Barbarian attacks with certain weapon types is handled by calling the damage function again but passing the negative pnum value for that player. The negative value signals to the function that the chancel to hit and damage penalties for adjacent damage should apply to the attack. However, player 1 has a pnum value of 0 so instead of a negative number, it just passes 0 and calculates damage as normal. This means the chance to hit and damage penalties do not apply to player 1, but they do apply to other players.

@NiteKat
Copy link

@NiteKat NiteKat commented Oct 6, 2021

Runes of Lightning never deal damage. When a monster steps on the rune, a Lightball missile is generated on the tile, but damage is never set for the missile, so min and max damage are both 0. You'll hear it hit plenty of times, but every hit deals 0 damage.

Editing to add a thanks to @StephenCWills for looking into this one with me. Wasn't sure of his github handle at first so I didn't add it in the initial post. :)

@qndel
Copy link
Member

@qndel qndel commented Oct 6, 2021

https://github.com/diasurgical/devilutionX/blob/ba10fa31821e509058e77188dde77faf6815c2a6/Source/missiles.cpp#L1197

Because of how unshifted damage is randomized, 0-0 dmg will end up randomizing 0-63 (64 = 1 hp), so the damage is less than 1 hp, can add up - lightning rune had 0 dmg but ended up actually damaging the player because of this

@AJenbo
Copy link
Member

@AJenbo AJenbo commented Oct 12, 2021

Save data can overflow the save buffer. The buffer size is 262147 bytes, but a save can take up to 322586 bytes. In Hellfire the issue is more likely to happen as the save game can reach 327218, mostly because of additional item data.

@NiteKat
Copy link

@NiteKat NiteKat commented Oct 13, 2021

diasurgical/devilutionX#3109

Monster tags (mWhoHit) for experience are not shared with players when they enter a level that has active players on it. This means that you can have a player receive less than full XP while another player receives full XP. This happens when a player has hit a monster, another player loads onto the level and kills the hit monster before anyone else hits the monster again. The player that loaded onto the floor only sees themselves hit the monster, so they get full XP, while the original player (or players) get split XP.

diasurgical/devilutionX#3110

I also noticed that monster tags get cleared (mWhoHit) if all players leave a floor. I'd say it's debatable if this is a bug or not, but feels like it is (and feels connected to the above issue).

Editing to add: diasurgical/devilutionX#3111

I did not test to confirm, but it is very likely this issue with mWhoHit is also Vanilla behavior. It's possible for mWhoHit to just desync altogether even if all players were on the floor during a fight with a monster. As described in the linked issue, the player that attempted the attack missed, but the other player saw the hit land, so mWhoHit desynced. If the player that saw a hit now kills the monster, they get half XP while the other player gets 0 XP. Monster health did not desync at all, so mWhoHit does not use the same mechanisms that damage to monsters use.

@qndel
Copy link
Member

@qndel qndel commented Oct 13, 2021

Monster hp is not synced when a player enters the level.
Player 1 damages a monster
Player 2 enters level and sees the monster with full hp.

@AJenbo
Copy link
Member

@AJenbo AJenbo commented Oct 13, 2021

Monsters will inform the group lader that they spotted the player, but the leader will not inform the rest of the pack. This can often lead to situations where groups are stuck because a single member of it is unaware that the fight has started and the rest of them do not want to leave him behind.

@AJenbo
Copy link
Member

@AJenbo AJenbo commented Oct 15, 2021

Scavengers may leave a group twice, once if separated, and a second time if they need to eat. This leads to the leaders pack size under flowing and the leader then thinking there are 255 minions who aren't following orders, preventing it from moving anymore during the game.

@qndel
Copy link
Member

@qndel qndel commented Oct 18, 2021

diasurgical/devilutionX#3158
Theme_Treasure - loop there reduces value of items and quantity of gold by half. It can hit the same item multiple times, so a gold pile can end up being 0.
Example log:

INFO: (36 84) GENERATING GOLD PILE: 54
INFO: (36 84) OVERWRITING GOLD PILE: 27
INFO: (36 84) OVERWRITING GOLD PILE: 13
INFO: (36 84) OVERWRITING GOLD PILE: 6
INFO: (36 84) OVERWRITING GOLD PILE: 3
INFO: (36 84) OVERWRITING GOLD PILE: 1
INFO: (36 84) OVERWRITING GOLD PILE: 0

The reason people don't really see this one is

  1. It can only happen in catacombs and below
  2. Treasure rooms are pretty rare
  3. I guess this bug is pretty rare too
  4. Nobody checked every single gold pile without alt highlighting.

This bug also has a second part, found by @galaxyhaxz
It reduces items' value by half, however that value gets restored to original on new game or identifying a magic item : D

@qndel
Copy link
Member

@qndel qndel commented Oct 24, 2021

image
Scavengers only search for corpses in south direction because of a bug - out of bounds check got applied to offset instead of final coords, so all negative offsets are considered invalid, only >= 0 pass = direction as on the pic :D

@qndel
Copy link
Member

@qndel qndel commented Oct 25, 2021

diasurgical/devilutionX#3260
#2260

If hit by a missile player can resist and had > 0 resistance against, the game would play the sound of attacker's class getting hit for both players.

@qndel
Copy link
Member

@qndel qndel commented Oct 30, 2021

Hellfire's hive ruined a tree in town :D you can still see a part of it and it got relocated
brokentree

@qndel
Copy link
Member

@qndel qndel commented Nov 10, 2021

If you get killed by a barrel, death animation is a bit broken
funnydeath

@qndel
Copy link
Member

@qndel qndel commented Nov 14, 2021

image
diasurgical/devilutionX#3514
Can drop items inside houses if standing on the corner

@qndel
Copy link
Member

@qndel qndel commented Nov 14, 2021

diasurgical/devilutionX#3485
Pathing can end up to be broken near solid objects
image
For example here the character could pick the north gold pile just fine but moves northwest before doing so because of the river on right side.

@mewmew
Copy link
Contributor

@mewmew mewmew commented Nov 14, 2021

Can drop items inside houses if standing on the corner

Good hiding place!

@qndel
Copy link
Member

@qndel qndel commented Dec 8, 2021

Algorithm for checking if you have the stats to use an equipped item is poopy.
diasurgical/devilutionX#3707

Items requiring no stats technically require 0 stats, so going negative makes you unable to use any items.
However the order matters - example situation with civerb's cudgel making barbarian reach negative magic.

You equip civerb's cudgel, your magic is -2.
The game checks first item which is helmet, sees it requires 0 stat (no stat requirement) or higher, sees that you have -2 magic, disables the helmet.
Then civerb's cudgel gets checked, it requires 0 magic, you have -2, civerb's gets disabled and penalty is cancelled so items after hand slots are usable!

Considering the slot order

INVLOC_HEAD,
INVLOC_RING_LEFT,
INVLOC_RING_RIGHT,
INVLOC_AMULET,
INVLOC_HAND_LEFT,
INVLOC_HAND_RIGHT,
INVLOC_CHEST,

it means that if you equipped a chest piece that brought your stats below 0, it'd make ALL items unusable : D

image
Like this, red rings and amulet, a rare sight : )

@qndel
Copy link
Member

@qndel qndel commented Mar 4, 2022

diasurgical/devilutionX#4113

void CheckInvSwap(int pnum, BYTE bLoc, int idx, WORD wCI, int seed, BOOL bId)
{
	PlayerStruct *p;

	RecreateItem(MAXITEMS, idx, wCI, seed, 0);

	p = &plr[pnum];
	p->HoldItem = item[MAXITEMS];

	if (bId) {
		p->HoldItem._iIdentified = TRUE;
	}

	if (bLoc < NUM_INVLOC) {
		p->InvBody[bLoc] = p->HoldItem;

		if (bLoc == INVLOC_HAND_LEFT && p->HoldItem._iLoc == ILOC_TWOHAND) {
			p->InvBody[INVLOC_HAND_RIGHT]._itype = ITYPE_NONE;
		} else if (bLoc == INVLOC_HAND_RIGHT && p->HoldItem._iLoc == ILOC_TWOHAND) {
			p->InvBody[INVLOC_HAND_LEFT]._itype = ITYPE_NONE;
		}
	}

	CalcPlrInv(pnum, TRUE);
}

This doesn't take barbarian's ability to wear 2h in 1h into account.
So that's how other players see you when you swap 1h + shield with a 2h. (shield disappears on smaller screen)
swapbarbweapon

@AJenbo
Copy link
Member

@AJenbo AJenbo commented Mar 5, 2022

image

The fire for the torches in Lazarus' chamber is missing when opening the last room.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment