Here's the "roadmap":
- Collision
- Line triggers(doors,switches,etc.)
- Weapons
- Deathmatch
Well I don't need monster AI for deathmatch, so it's a somewhat more realistic goal. I hope to have some basic network code in by the new year.
Music
Up until now I've been using Ben's midi player, which while functional didn't exactly provide a ton of functionality. Here's how music works in id.Net:
1) When the program starts it searches the music directory for an external files(mp3s and whatnot).
2) When a level is loaded the music loader checks if a file matches the levels name or the lump name that goes with it. So if you wanted something for E1M1 it could be called "e1m1.mp3" or "d_e1m1.mp3", this saves on disk space since some of the levels share the same music lump. The search is also case-insensitive.
3) If there's no file, save the music MUS lump and run it through MMUS2MID to convert it to midi, then play that file.
This is done using FMOD, since MDX is severly lacking when it comes to audio.
Cheat codes(aka THE CODES!!!)
Well only one cheat code, idclev, which allows me to warp between levels. Not much use for the others right now, but at least the cheat code reader is functional.
Teleportation
This was basically meant to test line collision, but I thought I'd let everyone know I have working line triggers. I've been toying around with trying to get the Icon Of Sin to activate based on the teleportation sound. It's probably the easiest monster to implement.
That's it for now, here's a nice aerial screenshot I got while flying around:
There's a bug in the original DOOM relating to music, which I (unintentially) also made in my code. The bug is "fixed" in MMUS2MID, which means that the MIDI music it exports sounds wrong.
I noticed the bug in the Chocolate Doom port, so wrote my own converter and submitted this. The quirk is in lines 316-327.
I never really worked out why MMUS2MID was so horribly complicated.
Another quirk is that the original DOOM cares not for the four byte MUS header, and will happily play MUS lumps even if they have PWAD as a header instead (as one PWAD does).