The commercial games factor is quite settled on. I could never allow anyone to make commercial games with an engine that isn't my own. So, freeware only, not even shareware.
The IDB, as bg has probably told you, is a no-no. Only reason being that I really don't have the time to copy it all to 20 discs + backups and take it uphere (the university) to email it.
However, switch-cases/subops, if you haven't noticed, there's a list of all the opcodes for CMI at the SCUMMRev site. The decompiler was GOING to have a full disassembler with byte offsets etc. etc. (and it probably will have when I get further with the compiler). I'll let you know if I make a new version for study with ScummIDE. Otherwise, I'll try to dig up the complete list of opcodes, arguments etc. that I did when doing the decompiler.
For now, look at
http://scummrev.mixnmojo.com/specs/CMIOpcodes.shtml)
The ones with an opcode number of 1xx (i.e. greater than 255) are just subopcodes, strip the 1 and check for the rest of the number. So to do WaitForActor, the compiled code is:
0xAC O_ACTOR_STUFF
0x1E O_WAIT_FOR_ACTOR
With some pushes before this (as far as I recall, O_WAIT_FOR_ACTOR takes an actor argument). Remember that most arguments are passed with pushes. Only strings (and a few other cases - the pushes themselves, of course, being one example) are stored after the opcode. The rest is done like:
0x01 0x00000001
O_PUSH_NUMBER 1
0x02 0x80000001
O_PUSH_VARIABLE Var1 (as far as I recall)
0x08
O_EQ
0x65 0x00000010
O_IF_NOT 16
in short:
if !(Var1 == 1) jump 16 bytes forward.
You probably already know all that, but just to be sure.
Otherwise, I'll try and find the complete opcodes and arguments list.
- Serge