Hello, man, thanks for trying WolfGL! So, bugs: 1. Fov/Wall height: My graphics manager sucks & have to be rewritten! I'm now focusing on AI & setting up client-server connection. Graphics (3D) will be definetly other By the way, I love it the way it is now, It differs from the original, but it is more (how to say???) volumetric: more space & usual fov now is 90 degrees (Quake & clones), in fact it is the best I've done when I was learning OpenGL & the code left: it is to dirty to change ( easyer to rewrite ) [no time now]. 2. Knife sound problems. Confirmed: present on Windows 2000. As an issue of it's DirectSound Drivers. More concret Reset mode. if sound is on peak, when stopped, crack will be heard. On 98 ok. *FIXED* [I think so] (at least works ok on both 2000 & 98) The point was, that I allocated AdLib sound as a sound of length equal of the time original wolf writed values to AdLib! BUT, but AdLib continues to synth sound even when no data is written to it more. Left over effect. it produces fading envelope! Unless you manualy reset it. So the easyest way of getting rid of leftover was (not, not to reset adlib) let AdLib finish with producing envelope! i.e. to feed output from AdLib to sound buffer once more, after sound values were feed. I used 0.5 seconds I calculated: it should be enough, unless a very strong sygnal leftover. By the way: you have totaly messed with AdLib code in your project. Things are much easyer: My way of doing it: P.S. 'Real Programmers never use comments or write documentation: "If it was hard to write", says the Real Programmer, "it should be hard to understand."' In fact code if self explaining, so you will understand it [hope so] the majority is from Wolf sources & off course it is in C. [i do not like C++: too much limitations & C is more beautiful]: IMHO P.P.S.: one comment: as you see & use 22050 Hz format 16bit mono P.P.P.S.: why: [snd->length=alLengthLeft*157 * 2 + 11025*2;] Jason pushed data to AdLib 140 times a second, it means that with 22050 Hz we get 22050/140=157[.5] (who cares about .5?) 157 words of output per one push of data to blaster (word=2 bytes => [*2]) and 11025*2 = half second *2[bytes per word] for leftover // try to synth a sound with AdLib emulator int SD_SynthALSound(cache_snd *snd) { AdLibSound *sound; Instrument inst; byte alBlock; int alLengthLeft; byte *alSound, s; word *ptr; DWORD mut_ret; if(!adlib_on) return 0; if(!File_AUD_ReadChunk(snd->name+STARTADLIBSOUNDS, sndbuff)) return 0; sound=(AdLibSound*)sndbuff; inst=sound->inst; alBlock=((sound->block&7)<<2) | 0x20; alLengthLeft=*((unsigned long *)sound->common.length); alSound=sound->data; snd->length=alLengthLeft*157 * 2 + 11025*2; // 315=44100/140; 157[.5]=22050/140; (who cares?); (+0.5 second to eliminate lefover) snd->data=malloc(snd->length); ptr=(word *)snd->data; mut_ret=WaitForSingleObject(adlib_in_use, 1000); if(mut_ret!=WAIT_OBJECT_0) {free(snd->data); return 0;} // while(use_adlib); use_adlib=true; OPLWrite(hAdLib, alFreqL, 0); OPLWrite(hAdLib, alFreqH, 0); // Loading Instrument data. FIXME: move to separate sub! OPLWrite(hAdLib, 0+alChar, inst.mChar); OPLWrite(hAdLib, 0+alScale, inst.mScale); OPLWrite(hAdLib, 0+alAttack, inst.mAttack); OPLWrite(hAdLib, 0+alSus, inst.mSus); OPLWrite(hAdLib, 0+alWave, inst.mWave); OPLWrite(hAdLib, 3+alChar, inst.cChar); OPLWrite(hAdLib, 3+alScale, inst.cScale); OPLWrite(hAdLib, 3+alAttack, inst.cAttack); OPLWrite(hAdLib, 3+alSus, inst.cSus); OPLWrite(hAdLib, 3+alWave, inst.cWave); OPLWrite(hAdLib, alFeedCon, 0); while(1) { s=*alSound++; if(!s) OPLWrite(hAdLib, alFreqH+0, 0); else { OPLWrite(hAdLib, alFreqL+0, s); OPLWrite(hAdLib, alFreqH+0, alBlock); } if(!(--alLengthLeft)) { OPLWrite(hAdLib, alFreqH+0, 0); break; } YM3812UpdateOne(hAdLib, ptr, 157); ptr+=157; } YM3812UpdateOne(hAdLib, ptr, 11025); // 0.5 second for leftover //use_adlib=false; ReleaseMutex(adlib_in_use); return 1; } Hope it helped you! 3. Picture problems (borders) Do not understood about what you are talking. Screenshot please (F12) with text on it describing problem & possibly highlight problem somehow in photoshop for example. May be it is just driver problems. 4. Level restarts when opening doors No, it's not truth [but who knows?]. Level restarts, because you were DEAD while opening that door. I have not writen a code that disables movement when you are dead. And use key [space] is a respawn button! look at status bar for health indicator. if 0% pressing use [space] will result in respawning! 5. Music restarts. Yes, must add check & not to load music allready playing. Will be fixed, if not allredy [when you are reading this]. 6. Source code. Sorry, but source will be released when project will reach dream 1.0 version. I don't want to see how people modify unfinished code, because, I don't think someone will go futher then changing celing colors & max ammo capacity [as with original wolf source]. Exceptions only prove rules. And for other 32-bit conversions: It has extremly few original code. Almost all my. Because I want to make it scriptable! AI, levels, things, doors, etc. And network play: it require to change all code, which deals with palyer. for example enemy can shoot only at player, but in coop play it must decide how to act! If I forgot something, sorry. Also sorry for my english (very bad, I know [i'm russian]) -- DarkOne the Hacker ---------------------- 14:08 3/27/2001 --