I'm seeing some bad stuff here.
if (Chest.containList_next > 0)
containList_next is a pointer, and > and < mean nothing when used on pointers. Yes, in Daedalus they're treated the same as an integer (and thus comparing them is possible), but it can lead to nasty bugs. Why? Well, there's nothing stopping a pointer from having the MSB set - this will generally make it a negative number when treated as an integer and thus the check will fail. Compare directly to 0 if you want to check for existence.
You should probably remove commented lines of code (e.g. //Snd_Play ("Door_unlock"); and //Snd_Play ("_STR_SOUND_PICKLOCK_UNLOCK"); ), because it's stupidly hard to figure out what the code is doing if it's cluttered everywhere.