DeHackEd / BEX Reference/BEX Extension: CODEPTR Block

From Eternity Wiki
Jump to: navigation, search

The [CODEPTR] block provides a new, clean, and more powerful method of changing the codepointer (aka action) field of frames.

The [CODEPTR] block is a list of frames, each of which has assigned to it a codepointer mnemonic. Codepointer mnemonics are symbolic names for the action functions they represent, and any mnemonic can be assigned to any frame, even frames that have a zero pointer. This was not allowed in DeHackEd.

BEX also provides a new NULL mnemonic, which allows zeroing of frames which have a codepointer in them already. This also was not allowed under DeHackEd, for reasons unknown.

Back to DeHackEd / BEX Reference


Insert this block into your BEX file:

  Frame nn = <mnemonic>

Any number of frames may be listed, one per line.

The Frame number is the same as you would use in Dehacked, and the <mnemonic> is a symbolic codepointer name. These mnemonics, though not perfectly clear in some cases, are the actual names of the functions in DOOM that are called, so it makes the most sense to use them. A complete list of codepointer mnemonics, and full documentation of their corresponding codepointers' behaviors is now available in the Eternity Engine Definitive Codepointer Reference. Please refer to that file for full information.

When using Dehacked frame code pointer changes, Eternity will write out a line for each one used showing what you'd put into a BEX [CODEPTR] block, in the DEHOUT.TXT file. For example:

Original Dehacked file lines:

  Pointer 93 (Frame 196)
  Codep Frame = 176

Output from Eternity in the DEHOUT.TXT file, when -dehout parameter is used:

  Line='Pointer 93 (Frame 196)'
  Processing function [2] for Pointer
  Processing Pointer at index 196: Frame
   - applied 1c53c from codeptr[176] to states[196]
  BEX [CODEPTR] -> FRAME 196 = Chase

You could then use this in the [CODEPTR] block of a BEX file instead of the Dehacked lines, making it much more clear that in frame 196 you expect the monster to Chase the player:

  FRAME 196 = Chase

In addition, you can now put any code pointer into any frame, whereas Dehacked is limited to replacing only the existing ones.