Skip to content

Heavy Metal FAKK2 Based

Zack Middleton edited this page Jan 15, 2022 · 4 revisions

Page for tracking support for game data for games based on Ritual's Heavy Metal F.A.K.K.2 / Ubertools. Aside from basic Tiki (.tik) parsing in mint-metal, there is no support for the various scripting systems.

"Supports" and "missing" refer to whether a feature is implemented in Spearmint.

Heavy Metal F.A.K.K.2 and American McGee's Alice

FAKK screenshot fakkhouse in Spearmint + mint-metal + Quake 3 sarge player model.

FAKK and Alice game data are similar enough that I treat them as the same engine for the most part.

Spearmint Engine

  • Level BSP
  • Shaders
    • Supports general syntax changes and many new keywords (see Shaders).
    • Missing stage keywords "rgbGen global", "alphaGen global", "alphaGen dot", "alphaGen oneMinusDot", "tcMod macro".
    • Missing stage keyword "tcMod parallax" (only used by MoHAA and EF2).
    • Missing support for using "fromEntity" as an argument instead of a constant value (used by FAKK and maybe MoHAA?). It's used on world brush model and controlled by map script. See FAKK_Shader_manual.html.
      • "deformVertexes wave 100 sin fromEntity fromEntity fromEntity fromEntity"
      • "rgbGen wave sin fromEntity fromEntity fromEntity fromEntity" (not used)
      • "alphaGen wave sin fromEntity fromEntity fromEntity fromEntity" (not used)
      • "tcMod scroll fromEntity fromEntity"
      • "tcMod offset fromEntity fromEntity"
      • "tcMod rotate fromEntity"
      • "frameFromEntity" (entity sets animMap frame)
    • Missing American McGee's Alice general keyword "deformVertexes wavenormal <wave>".
    • Missing American McGee's Alice stage keyword extension "tcMod rotate <value> <value>". (TODO: Check if this is valid in Alice (or undocumented FAKK feature), might conflict with MoHAA behavior.)
    • In American McGee's Alice at least, the behavior of "tcGen environment" is different from Quake 3; Missing an option and implementation.
  • Textures
    • Supports .ftx (uncompressed 8-bit RGBA with 12 byte header).
  • Models
    • Supports .tan (vertex animation, modified md3 format).
    • Missing .skb (skeletal mesh base) and .ska (skeletal mesh animation).
    • Missing distance level of detail reduction for .tan models (using the collapse data).
  • Sounds
    • Supports .mp3.
  • CGame API
    • Missing values in refEntity_t for shader "fromEntity" substitution?
    • Missing an API for dynamically rotating model bone joints.

I'm not sure what else is needed at the engine level to be able to reimplement FAKK and Alice based on Spearmint Quake 3 mod code.

mint-metal Game Logic

Things that were in the FAKK/Alice engine but I moved to mod code:

Scripting

FAKK/Alice have most of the game logic in text files which should make it easier to reimplement the game. Though it's quite a lot to deal with.

There is Tiki (text: models/*.tik, binary cache?: models/*.cik) which defines level entities. Including rendering settings and optionally what NPC statemap (ai/*.st) file to use.

There are NPC scripts (or state system?) (ai/*.st) that define states that run some action and switch between states based on things happening. The state system (*.st) is also used for the player character's legs and torso animation (global/julie*.st in FAKK, and global/alice*.st in Alice).

There are level scripts (maps/*.scr) which starts threads at goto labels (name:) and the threads use goto statements / labels to control flow and there are various wait [...] and waitFor [...] commands to suspend the thread(?). There are no C-like code other than assignment (<var> = <value>). Instead "if statements" are done like <varname> ifequal <value> <code to run>. It's also possible to start a thread defined in another source file (using thread filename::threadname). There is a reference to /Quake 2 Engine/Sin/Base Sin Data/global/baseai.scr in FAKK's global/baseai.scr so the script system is probably the same or at least based on the one in SiN.

There are level sound scripts (maps/*.snd) that list a bunch of sound entities to spawn.

There are <map>.cfg (looks like level script format?) in root that set players weapons and health. (Is this part of main game or a developer tool?)

There are menu/UI definitions in ui/*.urc (Uber resource?). It's not the same format as Team Arena *.menu files but it's similar in concept.

There are also sound properties defined in global/sound0.txt, such as volume and max distance, and sound aliases defined in global/global0.scr.

(I make no claims this is all of the types of scripts / text definition files.)

I don't remember if I've checked for scripting system differences from FAKK and Alice.

Metal of Honor: Allied Assault

MoHAA screenshot m1l1 in Spearmint + mint-metal + Quake 3 sarge player model.

Spearmint Engine

  • Level BSP
    • Partially supports BSP "2015 19"; missing light grid, dynamic lights, terrain, static models (different from FAKK and EF2).
    • Terrain is loaded but not part of BSP tree so it's currently not rendered in Spearmint.
    • Missing terrain distance level of detail reduction (present in OpenMoHAA).
  • Shaders
    • Supports FAKK syntax changes and some FAKK keywords (see Shaders).
    • Missing FAKK keywords.
    • Missing general keywords "deformVertexes flap [s or t] <value> <wave>", "deformVertexes lightglow", "noMerge" (used for sprites, seems like opposite of Q3's entityMergable).
    • Missing stage keywords "animMapPhase <fps> <phase offset, e.g. 0.0 to 1.0> [images...]", "alphaGen distFade <value> <value>", "alphaGen oneMinusDistFade <value> <value>", "alphaGen sCoord <value> <value>", "alphaGen tCoord <value> <value>", "blendfunc alphaadd", "clampmapy <image>" (not sure if typo or only clamp Y), "depthfunc always", "rgbGen lightingGrid", "rgbGen lightingSpherical", "rgbGen static", "tcGen environmentmodel", "tcMod wavetrant <wave>".
    • Missing stage keyword extension "tcMod rotate <value> [value] [value]" (MoHAA adds two and three argument forms.)
  • Textures
    • Supports .dds
    • Note: Contains .dds and .jpg of same images but shaders all look for tga. So dds needs to be checked for before jpg when tga is not found.
  • Models:
    • Missing .skd (skeletal model?).
    • Missing .skc (skeletal animation?).
    • Missing .lod (skd level of detail info?).
    • There doesn't seem to be models using FAKK model formats.
  • Sounds: Same as FAKK
  • Video: Missing .mpg? Unzipped "video/RenSizzlefeb.mpg" exists but it's an ad for Command and Conquer: Renegade. I don't know if game actually plays it.

Scripting

Tiki is used but I haven't checked for differences.

Like in FAKK and Alice, the state system (*.st) is used for the player character's legs and torso animation (global/mike*.st).

The level scripts (maps/*.scr) are based on the FAKK system but extended with C-like if else, switch, and while statements and probably other changes. The NPC scripts (anim/*.scr, global/*.scr) seems to use the same script system as MoHAA level scripting.

Menu definitions (ui/*.urc) are used but I haven't checked for differences.

New UberSound system(?) in ubersound/uberdialog.scr and ubersound/ubersound.scr. Defines sound alias for a filename with additional parameters. It seems expanded on and combined FAKK's global/sound0.txt and global/global0.scr. MoHAA's global/sound0.txt only has a few sounds set as localsound but has nice documentation.

(Incomplete review of all scripting / text definition files.)

Elite Force 2

Elite Force 2 screenshot dm_trophonius in Spearmint + mint-metal + Quake 3 sarge player model. Yes, I choose a map without spot lights because they fallback to default shader.

Spearmint Engine

  • Level BSP
    • Supports "EF2! 20" except missing new lighting system (different from FAKK and MOHAA).
    • The maps frequently run at very low frame rate. There would need to be rendering optimizations to make it fully playable.
  • Shaders
    • Supports FAKK syntax and some FAKK/EF2 keywords (see Shaders).
    • Missing FAKK keywords.
    • Missing general keywords "detailShader", "textureOnlyIfNoDetail", "forcedAlphaShader <shader>", "maxpicmip 1".
    • Missing stage keywords "alphaGen forcedAlpha", "alphaGen viewDot", "alphaGen oneMinusViewDot","rgbGen default", "deformVertexes heightwave <wave>", "tcGen angle_based_environment".
  • Textures
    • Supports .dds
  • Models
    • Same as FAKK
    • Missing .skm (skeletal model vertex morph?)
  • Sounds
    • Same as FAKK

Scripting

Tiki format has been extended from FAKK. Moved "path <path>" from Tiki setup section to "animations <path> {" which is likely not valid in FAKK. There are other new Tiki keywords. It hasn't been extensively checked.

The NPC scripts (ai/*.st) looks like the same format as FAKK. It hasn't been extensively checked. Like all the other games, the state system (*.st) is also used for the player character's legs and torso animation (global/munro*.st).

The level scripts (maps/<map>.scr) are completely different; using a C-like function based scripts.

Menu definitions (ui/*.urc) are used but I haven't checked for differences.

FAKK sound0 script is now global/sound1.txt. (Maybe the number is sound script version?) global/global0.scr has sound aliases like FAKK. MoHAA UberSound sound definition files are not present.

(Incomplete review of all scripting / text definition files.)