// This file is distributed under a BSD license. See LICENSE.txt for details.

#include "kdoc.hpp"
#include "genbitmap.hpp"
#include "genmaterial.hpp"
#include "genmesh.hpp"
#include "genminmesh.hpp"
#include "genoverlay.hpp"
#include "genscene.hpp"
#include "geneffect.hpp"
#include "geneffectex.hpp"
#include "geneffectcubes.hpp"
#include "geneffectdebris.hpp"
#include "geneffectipp.hpp"
#include "genblobspline.hpp"

//#include "kkriegergame.hpp"

 
KHandler KHandlers[] =
{
  // misc
//  0x01, Init_Misc_Load,         Exec_Misc_Load,             // load
//  0x02, Init_Misc_Nop,          Exec_Misc_Nop,              // store
//  0x03, Init_Misc_Nop,          Exec_Misc_Nop,              // nop
//  0x05, Init_Misc_Nop,          Exec_Misc_Time,             // time
  0x06, Init_Misc_Event,        Exec_Misc_Event,            // event
//  0x07, Init_Misc_Trigger,      Exec_Misc_Trigger,          // trigger
//  0x08, Init_Misc_Nop,          Exec_Misc_Delay,            // delay
//  0x09, Init_Misc_Nop,          Exec_Misc_If,               // if
//  0x0a, Init_Misc_Nop,          Exec_Misc_SetIf,            // setif
//  0x0b, Init_Misc_Nop,          Exec_Misc_State,            // state
//  0x0c, Init_Misc_Nop,          Exec_Misc_PlaySample,       // play sample
  0x0d, Init_Misc_Demo,         Exec_Misc_Demo,             // demo 
//  0x0e, Init_Misc_Nop,          Exec_Misc_Menu,             // menu
//  0x0f, Init_Misc_MasterCam,    Exec_Misc_MasterCam,        // set master camera
  0x16, Init_Misc_EventTime,    Exec_Misc_EventTime,        // eventtime

  // kkrieger
//  0x10, Init_KKrieger_Para,     Exec_KKrieger_Para,         // KKriegerPara
//  0x11, Init_KKrieger_Monster,  Exec_KKrieger_Monster,      // KKriegerMonster
//  0x12, Init_KKrieger_Events,   Exec_KKrieger_Events,       // KKriegerEvents
//  0x13, Init_KKrieger_Respawn,  Exec_KKrieger_Respawn,
//  0x14, Init_KKrieger_SplashDamage,  Exec_KKrieger_SplashDamage,
//  0x15, Init_KKrieger_MonsterFlags,  Exec_KKrieger_MonsterFlags,

  0x18, Init_Misc_Spline,       Exec_Misc_Nop,              // spline
  0x19, Init_Misc_Shaker,       Exec_Misc_Nop,              // shakeevent
  0x1a, Init_Misc_PipeSpline,   Exec_Misc_Nop,              // the kasparov operator
  0x1b, Init_Misc_MetaSpline,   Exec_Misc_Nop,              // metaspline
  0x1c, Init_Misc_SplineScale,  Exec_Misc_Nop,              // splinescale

  // bitmap
  0x21, Bitmap_Flat,            Exec_Misc_Nop,              // flat
  0x22, Bitmap_Perlin,          Exec_Misc_Nop,              // perlin
  0x23, Bitmap_Color,           Exec_Misc_Nop,              // color
  0x24, Bitmap_Merge,           Exec_Misc_Nop,              // merge
  0x25, Bitmap_Format,          Exec_Misc_Nop,              // format
/**/  0x26, Bitmap_RenderTarget,    Exec_Misc_Nop,              // render target
  0x27, Bitmap_GlowRect,        Exec_Misc_Nop,              // glowrect (old)
  0x28, Bitmap_Dots,            Exec_Misc_Nop,              // dots
  0x29, Bitmap_Blur,            Exec_Misc_Nop,              // blur
  0x2a, Bitmap_Mask,            Exec_Misc_Nop,              // mask
  0x2b, Bitmap_HSCB,            Exec_Misc_Nop,              // hscb
  0x2c, Bitmap_Rotate,          Exec_Misc_Nop,              // rotate
  0x2d, Bitmap_Distort,         Exec_Misc_Nop,              // distort
  0x2e, Bitmap_Normals,         Exec_Misc_Nop,              // normals
/**/  0x2f, Bitmap_Light,           Exec_Misc_Nop,              // light
  0x30, Bitmap_Bump,            Exec_Misc_Nop,              // bump
  0x31, Bitmap_Text,            Exec_Misc_Nop,              // text
  0x32, Bitmap_Cell,            Exec_Misc_Nop,              // cell
/**/  0x33, Bitmap_Wavelet,         Exec_Misc_Nop,              // wavelet
  0x34, Bitmap_Gradient,        Exec_Misc_Nop,              // gradient
  0x35, Bitmap_Range,           Exec_Misc_Nop,              // range
  0x36, Bitmap_RotateMul,       Exec_Misc_Nop,              // rotatemul
/**/  0x37, Bitmap_Twirl,           Exec_Misc_Nop,              // twirl
  0x38, Bitmap_Sharpen,         Exec_Misc_Nop,              // sharpen
  0x39, Bitmap_GlowRect,        Exec_Misc_Nop,              // glowrect
  0x3a, Bitmap_Import,          Exec_Misc_Nop,              // import
  0x3b, Bitmap_ColorBalance,    Exec_Misc_Nop,              // color balance
/**/  0x3c, Bitmap_Unwrap,          Exec_Misc_Nop,              // unwrap
  0x3d, Bitmap_Bricks,          Exec_Misc_Nop,              // bricks
  0x3e, Bitmap_Bulge,           Exec_Misc_Nop,              // bulge
  0x3f, Bitmap_Render,          Exec_Bitmap_Render,         // render
/**/  0x40, Bitmap_RenderAuto,      Exec_Bitmap_RenderAuto,     // render auto

  // effecte
/**/  0x60, Init_Effect_Dummy,      Exec_Effect_Dummy,          // dummy-effect
/**/  0x61, Init_Effect_Print,      Exec_Effect_Print,          // print text/menu
  0x63, Init_Effect_PartEmitter,Exec_Effect_PartEmitter,    // particles
  0x64, Init_Effect_PartSystem, Exec_Effect_PartSystem,     // particles
  //0x65, Init_Effect_Chaos1,     Exec_Effect_Chaos1,         // Chaos1 (misc experimental stuff)
  0x66, Init_Effect_Tourque,    Exec_Effect_Tourque,        // Tourque (experimental effect)
  //0x67, Init_Effect_Stream,     Exec_Effect_Stream,         // Stream (experimental effect)
#if sLINK_FRIED
  /**/0x68, Init_Effect_ImageLayer, Exec_Effect_ImageLayer,     // Image Layer (for bp06 invi)
#endif
  /**/0x69, Init_Effect_Billboards, Exec_Effect_Billboards,     // Billboard Imposters
  /**/0x6a, Init_Effect_WalkTheSpline,Exec_Effect_WalkTheSpline,// WalkTheSpline (for debris)
  0x6b, Init_Effect_ChainLine,  Exec_Effect_ChainLine,      // ChainLine
#if sLINK_MTRL20
  /**/0x6c, Init_Effect_JPEG,       Exec_Effect_JPEG,           // aRTifakktory
#endif
  /**/0x6d, Init_Effect_LineShuffle,Exec_Effect_LineShuffle,    // LineShuffle
  /**/0x6e, Init_Effect_BillboardField,Exec_Effect_BillboardField, // billboard field
  //0x6f, Init_Effect_BP06Spirit ,Exec_Effect_BP06Spirit,     // scene spirit
  //0x70, Init_Effect_BP06Jungle, Exec_Effect_BP06Jungle,     // jungle

  0x73, Init_Effect_Water,      Exec_Effect_Water,          // water
  0x74, Init_Effect_Glare,      Exec_Effect_Glare,          // glare
  0x75, Init_Effect_ColorCorrection,Exec_Effect_ColorCorrection,    // ColorCorrection
  0x76, Init_Effect_GridStuff,  Exec_Effect_GridStuff,
  0x77, Init_Effect_Cubes,      Exec_Effect_Cubes,
  0x78, Init_Effect_BounceWorm, Exec_Effect_BounceWorm,
  0x79, Init_Effect_Wirbeln,    Exec_Effect_Wirbeln,
  0x7a, Init_Effect_XSI2Cube,   Exec_Effect_XSI2Cube,
  0x7b, Init_Effect_CubeMorpher,  Exec_Effect_CubeMorpher,

  // mesh
  0x81, Mesh_Cube,              Exec_Misc_Nop,              // cube
  0x82, Mesh_Cylinder,          Exec_Misc_Nop,              // cylinder
  0x83, Mesh_Torus,             Exec_Misc_Nop,              // torus
  0x84, Mesh_Sphere,            Exec_Misc_Nop,              // sphere
  /**/0x85, Mesh_SelectAll,         Exec_Misc_Nop,              // select all
  0x86, Mesh_SelectCube,        Exec_Misc_Nop,              // select cube
  0x87, Mesh_Subdivide,         Exec_Misc_Nop,              // subdivide
  0x88, Mesh_Transform,         Exec_Misc_Nop,              // transform
  0x89, Mesh_TransformEx,       Exec_Misc_Nop,              // transformex
  /**/0x8a, Mesh_Crease,            Exec_Misc_Nop,              // crease
  /**/0x8b, Mesh_UnCrease,          Exec_Misc_Nop,              // uncrease
  /**/0x8c, Mesh_Triangulate,       Exec_Misc_Nop,              // triangulate
  /**/0x8d, Mesh_Cut,               Exec_Misc_Nop,              // cut
  /**/0x8e, Mesh_ExtrudeNormal,     Exec_Misc_Nop,              // extrudenormal
  /**/0x8f, Mesh_Displace,          Exec_Misc_Nop,              // displace
  /**/0x90, Mesh_Bevel,             Exec_Misc_Nop,              // bevel
  /**/0x91, Mesh_Perlin,            Exec_Misc_Nop,              // perlin
  0x92, Mesh_Add,               Exec_Misc_Nop,              // add
  0x93, Mesh_DeleteFaces,       Exec_Misc_Nop,              // delete faces
  /**/0x94, Mesh_SelectRandom,      Exec_Misc_Nop,              // select random
  0x95, Mesh_Multiply,          Exec_Misc_Nop,              // multiply
  0x96, Mesh_MatLink,           Exec_Misc_Nop,              // matlink
  /**/0x99, Mesh_BeginRecord,       Exec_Misc_Nop,              // beginrec
  /**/0x9a, Mesh_Extrude,           Exec_Misc_Nop,              // extrude
  /**/0x9c, Mesh_CollisionCube,     Exec_Misc_Nop,              // collcube
  0x9d, Mesh_Grid,              Exec_Misc_Nop,              // grid
  0xa0, Mesh_Bend,              Exec_Misc_Nop,              // bend
  0xa1, Mesh_SelectLogic,       Exec_Misc_Nop,              // select logic
  /**/0xa2, Mesh_SelectGrow,        Exec_Misc_Nop,              // select grow
  0xa3, Mesh_Invert,            Exec_Misc_Nop,              // invert
  /**/0xa4, Mesh_SetPivot,          Exec_Misc_Nop,              // set pivot
  0xa5, Mesh_UVProjection,      Exec_Misc_Nop,              // uvproject
  0xa6, Mesh_Center,            Exec_Misc_Nop,              // center
  /**/0xa7, Mesh_AutoCollision,     Exec_Misc_Nop,              // autocoll
  /**/0xa8, Mesh_SelectSphere,      Exec_Misc_Nop,              // selectsphere
  /**/0xa9, Mesh_SelectFace,        Exec_Misc_Nop,              // selectface
  /**/0xaa, Mesh_SelectAngle,       Exec_Misc_Nop,              // selectangle
  0xab, Mesh_Bend2,             Exec_Misc_Nop,              // bend 2
  /**/0xac, Mesh_SmoothAngle,       Exec_Misc_Nop,              // smangle
  /**/0xad, Mesh_Color,             Exec_Misc_Nop,              // color
  /**/0xae, Mesh_BendS,             Exec_Misc_Nop,              // bend spline
  /**/0xaf, Mesh_LightSlot,         Exec_Misc_Nop,              // light slot
  0xb0, Mesh_ShadowEnable,      Exec_Misc_Nop,              // shadowenable
  /**/0xb3, Mesh_SingleVert,        Exec_Misc_Nop,              // single vertex
  0xb4, Mesh_Multiply2,         Exec_Misc_Nop,              // multiply 2
  0xb5, Mesh_ToMin,             Exec_Misc_Nop,              // genmesh to genminmesh
 
  // scene
  0xc0, Init_Scene_Scene,       Exec_Scene_Scene,           // scene
  0xc1, Init_Scene_Add,         Exec_Scene_Add,             // add
  0xc2, Init_Scene_Multiply,    Exec_Scene_Multiply,        // multiply
  0xc3, Init_Scene_Transform,   Exec_Scene_Transform,       // transform
  0xc4, Init_Scene_Light,       Exec_Scene_Light,           // light
  0xc5, Init_Scene_Particles,   Exec_Scene_Particles,       // scene multply particles
  /**/0xc6, Init_Scene_Camera,      Exec_Scene_Camera,          // camera

  /**/0xc7, Init_Scene_Limb,        Exec_Scene_Limb,            // limb
  /**/0xc8, Init_Scene_Walk,        Exec_Scene_Walk,            // walk
  /**/0xc9, Init_Scene_Rotate,      Exec_Scene_Rotate,          // rotate
  /**/0xca, Init_Scene_Forward,     Exec_Scene_Forward,         // forward
  /**/0xcb, Init_Scene_Sector,      Exec_Scene_Sector,          // sector
  /**/0xcd, Init_Scene_Portal,      Exec_Scene_Portal,          // portal
//  0xce, Init_Scene_Physic,      Exec_Scene_Physic,          // physic

  // material
  0xd0, Init_Material_Material, Exec_Material_Material,     // material
  0xd1, Material_Add,           Exec_Misc_Nop,              // add material
  0xd2, Init_Scene_MatHack,     Exec_Scene_MatHack,         // link material for animation
#if sLINK_MTRL20
  0xd3, Init_Material_Material20, Exec_Material_Material20, // material 2.0
#endif

  // ipp
  /**/0xe2, Init_IPP_Copy,          Exec_IPP_Copy,              // copy
  /**/0xe3, Init_IPP_Blur,          Exec_IPP_Blur,              // blur
  /**/0xe4, Init_IPP_Crashzoom,     Exec_IPP_Crashzoom,         // crashzoom
  /**/0xe5, Init_IPP_Sharpen,       Exec_IPP_Sharpen,           // sharpen
  /**/0xe6, Init_IPP_Color,         Exec_IPP_Color,             // color
  /**/0xe7, Init_IPP_Merge,         Exec_IPP_Merge,             // merge
  /**/0xe8, Init_IPP_Mask,          Exec_IPP_Mask,              // mask
  0xe9, Init_IPP_Layer2D,       Exec_IPP_Layer2D,           // layer2d
  /**/0xea, Init_IPP_Select,        Exec_IPP_Select,            // select
  /**/0xeb, Init_IPP_RenderTarget,  Exec_IPP_RenderTarget,      // render target
//  0xed, Init_IPP_JPEG,          Exec_IPP_JPEG,              // JPEG
  0xf0, Init_IPP_Viewport,      Exec_IPP_Viewport,          // viewport

  // minmesh
  /**/0x100, MinMesh_SingleVert,    Exec_Misc_Nop,              // single vert
  0x101, MinMesh_Grid,          Exec_Misc_Nop,              // grid
  /**/0x102, MinMesh_Cube,          Exec_Misc_Nop,              // cube
  /**/0x103, MinMesh_Torus,         Exec_Misc_Nop,              // torus
  0x104, MinMesh_Sphere,        Exec_Misc_Nop,              // sphere
  /**/0x105, MinMesh_Cylinder,      Exec_Misc_Nop,              // cylinder
/**/0x106, MinMesh_XSI,           Exec_Misc_Nop,              // xsi

  0x110, MinMesh_MatLink,       Exec_Misc_Nop,              // matlink
  0x111, MinMesh_Add,           Exec_Misc_Nop,              // add
  /**/0x112, MinMesh_SelectAll,     Exec_Misc_Nop,              // select all
  0x113, MinMesh_SelectCube,    Exec_Misc_Nop,              // select cube
  0x114, MinMesh_DeleteFaces,   Exec_Misc_Nop,              // delete faces
  0x115, MinMesh_Invert,        Exec_Misc_Nop,              // invert
  /**/0x116, MinMesh_MatLinkId,     Exec_Misc_Nop,              // matlinkid
  0x117, MinMesh_MatLink,       Exec_Misc_Nop,              // matinput

  0x120, MinMesh_TransformEx,   Exec_Misc_Nop,              // transform
  0x121, MinMesh_TransformEx,   Exec_Misc_Nop,              // transform ex
  /**/0x122, MinMesh_ExtrudeNormal, Exec_Misc_Nop,              // extrude normal
  /**/0x123, MinMesh_Displace,      Exec_Misc_Nop,              // displace
  0x124, MinMesh_Perlin,        Exec_Misc_Nop,              // perlin
  0x125, MinMesh_Bend2,         Exec_Misc_Nop,              // bend 2
  /**/0x126, MinMesh_Extrude,       Exec_Misc_Nop,              // extrude
  /**/0x127, MinMesh_BakeAnimation, Exec_Misc_Nop,              // bake animation
  0x128, MinMesh_BoneChain,     Exec_Misc_Nop,              // bone chain
  0x129, MinMesh_BoneTrain,     Exec_Misc_Nop,              // bone train
  0x12a, MinMesh_Triangulate,   Exec_Misc_Nop,              // triangulate
  0x12c, MinMesh_Pipe,          Exec_Misc_Nop,              // pipe
  /**/0x12d, MinMesh_ScaleAnim,     Exec_Misc_Nop,              // scale anim
  /**/0x12e, MinMesh_RenderAutoMap,   Exec_Misc_Nop,              // renderautomap
  0x12f, MinMesh_Multiply,        Exec_Misc_Nop,              // multiply
  /**/0x130, MinMesh_Multiply2,       Exec_Misc_Nop,              // multiply 2
  0x131, MinMesh_Center,          Exec_Misc_Nop,              // center
  /**/0x132, MinMesh_SelectLogic,     Exec_Misc_Nop,              // select logic
  0x133, MinMesh_Font3D,          Exec_Misc_Nop,              // font3d
  0x134, MinMesh_Explode,         Exec_Misc_Nop,              // explode

  // more scene
  /**/0x180, Init_Scene_AdjustPass, Exec_Scene_AdjustPass,      // adjust pass
  /**/0x181, Init_Scene_ApplySpline,Exec_Scene_ApplySpline,     // apply spline
  0x182, Init_Scene_Marker     ,Exec_Scene_Marker,          // set marker
  /**/0x183, Init_Scene_LOD,        Exec_Scene_LOD,             // lod
  0x184, Init_Scene_Ambient,    Exec_Scene_Ambient,         // ambient

  // end!
  0,0,0,
};