Copyright 2004-2026
https://github.com/thecybermind/qvmops/
3-clause BSD license: https://opensource.org/license/bsd-3-clause
Created By: Kevin Masterson < k.m.masterson@gmail.com >
To use qvmops to disassemble a .qvm file, simply run:
qvmops <file.qvm> [file.map]
If you provide a map filename, it will use it to load symbol information. If you do not provide a map filename, it will attempt to load one with the same name as the .qvm file, but with a .map extension (i.e. disassembling qagame.qvm will look for a qagame.map file for symbols). If no map file could be loaded, the file will be disassembled with less information.
qvmops is a QVM file disassembler. QVM files are bytecode-compiled mod files for some Quake 3-based games. See the QMM wiki for more information.
It will output the QVM file header information, the code segment with all instructions and hardcoded operands, and a hex-editor-style view of the data segment.
qvmops now supports loading symbols from a .map file (generated by q3asm at the same time as the .qvm file). If symbols are present, it will leave function symbol comments on OP_ENTER, OP_LEAVE, OP_CALL, OP_JUMP, and all the conditional branch instructions (OP_EQ-OP_GEF), and data symbol comments on OP_LOADx and OP_CONST instructions.
If symbols are not present, it will leave basic function symbol comments (using a naming scheme like "func150" or "trap2") on OP_ENTER, OP_LEAVE, OP_CALL, OP_JUMP, and all the conditional branch instructions (OP_EQ-OP_GEF).
See qagame.qvm.txt or stvoy_qagame.qvm.txt for example output.