God+of+War

This is the first game in the God of War series. Kinetica engine (Games on engine: Kinetica, GoW I+II, Jak II+3+X, The Getaway, SOCOM I + II, FantaVision)



The models/textures/levels are stored in the .WAD files. Models data format like other optimized ps2 games stored in vif packets. Tools for extracting files (obj+png): @https://github.com/MogAika/god_of_war_tools Newer tool, that can render levels, but cannot export files: https://github.com/mogaika/god_of_war_browser

Something about in-game format Wad represent way of loading one segment of map, like: GFX_HERO [load hero texture pallete indexes] PAL_HERO [load hero texture pallete] TXR_ HERO [info about hero texture] { links to: GFX_HERO, PAL_HERO }

hero_0 [hero mesh data (xyzw, rgba, uv, normals)] MAT_hero [info about material] { links to: TXR_HERO } MDL_hero [info about model] { links to: hero_0, MAT_hero, ANM_hero, ... } gohero [info about game object] { links to: MDL_hero }

All formats has magic in first 4 bytes

Meshes have some levels of grouping > per-vertex rgba blending used for static light > vn (normals) used for dynamic light (and alpha blending?) > backface culling not used
 * 1) Mesh
 * 2) Parts (base-bone grouping, all bones on lower levels realtive to value in this struct)
 * 3) Groups (don't know)
 * 4) Objects (texture grouping)
 * 5) Packets (material grouping)
 * 6) Vif packets (ps2 vu1 vif decoder opcodes with data, they fill vu1 memory with xyz/rgba/uv/vn datas)

models always parent of mesh and his textures in wad tree, also store information for every joint: also models have something like variables:
 * Joint name, children, parents
 * Idle pose matrix + position + scale (in parent joint space)
 * Inverse model matrix position (present, only if joint idle position != model position?) (in world space)
 * HeroBreak
 * Breakable
 * PushPull
 * IO_CSM
 * IO_TandF

"go" game objects store matrices in map-segment space(or global game space)

Kratos in-game extracted model: