Creating custom ANM files

From EDukeWiki
Jump to navigation Jump to search

Duke Nukem 3D uses the DeluxePaint Animation format for displaying its cutscenes and logos. These are a sequence of ZSoft PCX images within the ANM file.

You can create your own ANM files, as well as extract the PCX files from an existing ANM file by using the ANIM2PCX tool. FFmpeg (and its descendents ffplay and mplayer) also support ANMs as input.

Although ANM files are limited to an 8-bit palette, each ANM holds its own palette, independent of any stored in the game. This palette remains constant for every frame of an ANM. Please note that the first color index in the palette used is used as background color during blitting and filling of the screen. All resulting pillarboxing will use this color as the background color. While the animation changes, it's also possible that you will see the screen filled with this color for a single game tic. Therefore, it is highly recommended to ensure the first palette index is RGB #000000, black.

List of animations

These are all the animations that exist by default in Duke Nukem 3D (1.5) and their framerates. All animations are played in sequence with the exception of RADLOGO and DUKETEAM, which only have a single frame and are displayed until the user gives any input. You can see the framerates in the source file anim.c.

# Name Framerate Description
1 cineov2 120/10 = 12 fps Episode 2 ending
2 cineov3 120/10 = 12 fps Episode 3 ending
3 RADLOGO 120/10 = 12 fps Duke Nukem 3D logo at the end of Episode 3
4 DUKETEAM 120/10 = 12 fps Development team with big heads
5 logo 120/9 ≈ 13.3 fps Intro with missile exploding behind the nuke sign
6 vol41a 120/14 ≈ 8.571428 fps Episode 4 intro part 1
7 vol42a 120/18 ≈ 6.6 fps Episode 4 intro part 2
8 vol4e1 120/10 = 12 fps Episode 4 ending part 1
9 vol43a 120/10 = 12 fps Episode 4 intro part 3
10 vol4e2 120/14 ≈ 8.571428 fps Episode 4 ending part 2
11 vol4e3 120/10 = 12 fps Episode 4 ending part 3

By default, the game looks for a file with the extension .ANM for each animation file.

VP8 replacement

You can also use the VP8 video codec inside an IVF container for custom animations. Simply give your IVF file the same name as an ANM and place it in one of EDuke32's search paths. For example: LOGO.IVF.

Note that VP8 videos will only display when using 32-bit OpenGL video mode--not the 8-bit classic software renderer. Also note that the hardcoded sounds (listed below) of any ANM replaced by an IVF will not play. Instead, use the animsounds def command to specify new ones. Further note that the IVF container does not hold audio--all audio for a VP8 video must be added via animsounds.

To create VP8 video, see the Utilities page.

Full list of sounds played for each animation

By replacing these sounds, you can customize your own animation files with new sound files. The frames they're played on are hard-coded, but listed here for ease of use. As with the framerates, these can be found in the source file anim.c.

cineov2
Frame Sounds
1 WIND_AMBIENCE
26 ENDSEQVOL2SND1
36 ENDSEQVOL2SND2
54 THUD
62 ENDSEQVOL2SND3
75 ENDSEQVOL2SND4
81 ENDSEQVOL2SND5
115 ENDSEQVOL2SND6
124 ENDSEQVOL2SND7
cineov3
Frame Sounds
1 WIND_REPEAT
98 DUKE_GRUNT
102 THUD
SQUISHED
124 ENDSEQVOL3SND3
134 ENDSEQVOL3SND2
158 PIPEBOMB_EXPLODE
logo
Frame Sounds
1 FLY_BY
19 PIPEBOMB_EXPLODE
vol41a
Frame Sounds
1 INTRO4_1
12 INTRO4_2
7 INTRO4_3
26 INTRO4_4


vol42a
Frame Sounds
1 INTRO4_B
12 SHORT_CIRCUIT
34 SHORT_CIRCUIT
18 INTRO4_5
vol4e1
Frame Sounds
3 DUKE_UNDERWATER
35 VOL4ENDSND1
vol43a
Frame Sounds
10 INTRO4_6
vol4e2
Frame Sounds
11 DUKE_UNDERWATER
20 VOL4ENDSND1
39 VOL4ENDSND2
50 (all sounds stopped)
vol4e3
Frame Sounds
1 BOSS4_DEADSPEECH
40 VOL4ENDSND1
DUKE_UNDERWATER
50 BIGBANG

RADLOGO plays the sounds ENDSEQVOL3SND5, ENDSEQVOL3SND6, ENDSEQVOL3SND7, ENDSEQVOL3SND8 and ENDSEQVOL3SND9 sequentially after another.

DUKETEAM plays ENDSEQVOL3SND4 (a variation of Grabbag). The sound starts when the "Thanks for giving us big heads" screen (see LOGO_FLAGS) is shown and continues until any user input is given during the DUKETEAM animation.