
package Cowgen::Darkprop;
require Exporter;
@ISA    = qw(Exporter);
@EXPORT = qw( dark_properties );
@EXPORT_OK = qw( );

use strict 'vars';
use Cowgen::Dromed;
my @properties;

# hack since I couldnt properly export the properties (!?)
sub dark_properties
  {
  return \@properties;
  }

# reordering (animlight, rotdoor etc):
# -1 => hardcoded 0
# -2 => hardcoded -1 (0xFFFFFFFF, or 0xFFFF in case of S)
# -3 => hardcoded 1, -4 => hardcoded 2 etc 
# flags etc are usual written as "UPPERCASE". You have to prefix them with O_ in
# to get them to work. Sometimes the old "o_lowercase()" has to be is used, but I am
# slowly migrating anything to the O_UPPERCASE method.

# basic propertes common of thief, ss2, thief ii etc

$properties[0] =
  {
  name => "SymName,S,17",                             # name of object
  # shape
  scale => "Scale,fff,12",                            # x, y, z 
  modelname => "ModelName,Z16,16",                    # name
  texturereplace0 => "OTxtRepr0,S,17",                # path\name
  texturereplace1 => "OTxtRepr1,S,17",                # path\name
  texturereplace2 => "OTxtRepr2,S,17",                # path\name
  texturereplace3 => "OTxtRepr3,S,17",                # path\name
  jointpositions => "JointPos,ffffff,24",             # pos0,pos1,pos2,pos3,pos4,pos5,pos6
  # Firer
  firer => "Firer,L,4",                               # !?
  # S
  scripts => "Scripts,Z32Z32Z32Z32L,132,65668",       # name, name, name, name, inherit
  # SFX
  flashbombinfo => "RenderFlash,CCCCLLLLfL,28,28,"    # r,g,b,worlddur,screendur,effectdur,range
   ."0,1,2,-1,3,4,5,-1,6,-1",
  spark => "Spark,LSSSSLffffff,40,40,"                # 
   ."0,1,5,2,3,4,6,7,8,9,10",
  frameanimationstate => "FramAniS,LLLL,16,16,"       # current frame
   ."-1,-2,0,-1",  
  frameanimationconfig => "FramAniC,LCCCC,8",         # FPS,oneshot,bounce,framelimit,killfinish 
  particletype => "ParticleType,S,17",                # string
  particle => "Particle,l,4",                         # !?
  particlelaunchinfo => "PGLaunchI,LffffffffffffffffLLSLLLLLLLLLLLllllS,140,1000,"
   ."0,1,2,3,4,5,6,10,11,12,13,14,15,7,8,17,18,16,9,-1,"
   ."-3,-4,-5,-6,-7,-8,-12,-13,-14,-15,-16,-17,-9,-10,-19,-20",
  heatdisks => "HeatDisks,fffffffffffLL,52,52,"       # startx,y,z,radius,endx,y,z,radius, bottom,
   ."0,1,2,4,5,6,3,7,8,9,12,10,11",                   # top jitter, blobs, disksperblob, height
  particles => "ParticleG,"
   ."llLLLLLLLLLLLLLLLLLLLLLffffffCCCCCLCSLfffLffCCCCCCCCLfLLLLLfLffffffffLLLLLLSSLLLLLSSfLLLfLLLfll"
   .",324,1005,",
  # script
  scripttiming => "ScriptTiming,L,4",                 # !?
  terrreplaceon => "TerrRepOn,S,17",                  # string
  terrreplaceoff => "TerrRepOff,S,17",                # string  
  terrreplacedestroy => "TerrRepDestroy,S,17",        # string
  # enginefeatures
  stackcount => "StackCount,L,4",                     # count
  locked => "Locked,L,4",                             # bool
  frobinfo => "FrobInfo,LLLL,16",                     # world,inv,tool, 0
  froblocally => "FrobLocally,L,4",                   # bool
  keysrc => "KeySrc,CSC,4",                           # masterbit (bool), region, lockid
  keydst => "KeyDst,CSC,4",                           # masterbit (bool), region, lockid
  textureradius => "TextureRa,L,4",                   # radius
  combinetype => "CombineType,Z16,16",                # string/name
  lockcount => "LockCnt,L,4",                         # bool (!?)
  # P
  puppet => "Puppet,fLLf,16",                         # !?!?
  # Physics
  #  Misc
  controlsactive => "PhysContr,Lfffffffff,40,66536",  # O_LOCATION etc
  collisiontype => "CollisionType,L,4",               # o_bounce() etc
  movingterrain => "MovingTerrain,LL,8,65544",        # bool, bool
  attributes => "PhysAttr,ffffffffLLLL,48,66536",     # grav, mass, densit,elast,friction,
                                                      # cogoffx,cogoffy,cogoffz, rotaxis,restaxis,
                                                      # climbable_sides, is_edge_trigger
  type => "PhysType,LLL,12,66537",                    # type, joint, remove_on_sleep
  aicollideswith => "PhysAICol,L,4",                  # bool
  pressureplate => "PhysPPlate,ffffLLL,28,66536",     # weight,travel,speed,pause,blockvision(B),0,0
  rope => 'PhysRope,fLf,12,66537,1,2,0',              # desired length, len, deployed (bool)
  # model
  physstate => "PhysState,ffffffffffff,48,65584",     # location (x,y,z), facing, vel, rotvel
  phystype => "PhysType,LLL,12,66537",                # o_obb() etc, number, bool
  dimensions => "PhysDims,ffLLLffffffL,48,65584",     # radius1, radius2, ?, ?, ?, ofs x, ofsy, 
                                                      # ofsz, sizx, sizy, sizz, ?
  # physics->terrain
  friction => "Friction,f,4",                         # amount
  elasticity => "Elasticity,f,4",                     # amount
  climbability => "Climbability,f,4",                 # amount
  canattach => "CanAttach,L,4",                       # bool
  # Door
  rotating => "RotDoor,ffffLLLfLfLLlllllllSLLllLLLL,110,66537,"
   ."-1,0,1,2,3,4,5,7,6,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-2,-2,9,",
                                                      # closed angle, open angle, base speed,
                                                      # axis, status, hard limits, blocks vision, 
                                                      # block sound, push mass, clockwise, room id1, 
                                                      # room id2 (dont set room ids!), 18 longs ??
  translating => "TransDoor,LfffLLLfLfLLlllllllSLLll,94,66536,"
   ."-3,0,1,2,3,4,5,7,6,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-2,-2",
                                                      # closed pos, open pos, base speed,
                                                      # axis, status, hard limits, blocks vision, 
                                                      # block sound, push mass, clockwise, room id1, 
                                                      # room id2 (dont set room ids!), 18 longs ??
  #  Projectile
  facesvelocity => "PhysFaceV,L,4",                   # bool (does not work?)
  initialvelocity => "PhysInitV,fff,12",              # X,Y,Z
  launchermass => "LauncherMass,f,4,65540",           # mass
  explodeme => "PhysExplodeMe,L,4",                   # amount (!?)
  # render
      # mod,milbright,mildim,max,min,radius,offsetx,ofsy,ofsz,rising,countdown,inactive
      #   0         1      2   3   4      5       6    7    8      9        10       11
  animlight => "AnimLight,LfffLLSSLLffLfLLLL,68,68,"  # -1 is undefined
    ."6,7,8,-1,-1,-1,0,1,2,4,3,-1,9,10,11,5,-1",      # mod,milbright,mildim,max,min,radius,
                                                      # offsetx, ofsy,ofsz,rising,countdown,
                                                      # inactive
  hasrefs => "HasRefs,L,4",                           # Bool
  light => "Light,fffff,20",                          # bright, offsetx,y,z, radius
  lightcolor => "LightColor,ff,8,8",                  # hue, saturation
  rendertype => "RenderType,L,4",                     # type o_notrendered() etc
  selflit => "SelfLit,L,4",                           # amount (0..)
  spotlight => "Spotlight,fff,12,65548",              # x,y,z
  transparency => "RenderAlp,f,4,65540",              # amount (0..1)
  extralight => "ExtraLight,fL,8,65544",              # amount (-1.0..1.0), additive (BOOL)
  selfillumination => "SelfIllumination,f,4,65540",   # amount (0.0..?)
  shadow => "Shadow,l,4",                             # amount (0.0..?)
  watertexturecolor => "WaterColor,CCSf,8",           # red, green, blue (+1 byte filler), alpha
  waterflowcolorindex => "FlowColor,L,4",             # 0..??
  bitmapanimation => "BitmapAni,L,4",                 # 0 or 1
  animtexture => "AnimTex,LL,8",                      # value, bool !?
  bitmapanimation => "BitmapAni,L,4",                 # flags (O_KILL_ON_COMPLETION),
  meshattach => "MeshAttac,ffLLSSSSfffLLSSSSfffLLSSSSfffLLSSSSfff,120,120,"
   ."-1,-1, 0,1,2,3,4,-1,5,6,7, 8,9,10,11,12,-1,13,14,15, 16,17,18,19,20,-1,21,22,23," 
   ."24,25,26,27,28,-1,29,30,31 ",                    # 4 times: object id, skeleton joint nr,
                                                      # anglex,y,z, offset x,y,z
  # room
  acoustics => "Acoustics,LLL,12",                    # eax_blah(), height, damp
  ambient => "Ambient,Z64L,68",                       # name, volume
  automap => "Automap,LL,8,131080",                   # page, location
  gravity => "RoomGrav,L,4,65540",                    # in %
  # inventory
  gamename => "GameName,S,17,65553",                  # ASCIIZ String
  cantdropthis => "NoDrop,L,4",                       # bool
  cycleorder => "InvCycleO,S,17,65553",               # ASCIIZ String
  longdescription => "GameDesc,S,17",                 # S = ASCIIZ String
  maxpickdistance => "PickDist,f,4",                  # distance
  pickbias => "PickBias,f,4",                         # bias (?)
  purchaseprice => "SalePrice,l,4,65540",             # price
  toolreach => "ToolReach,f,4",                       # distance (?)
  store => "ItemStore,L,4,65540",                     # bool
  type => "InvType,L,4,65540",                        # o_junk() etc
  invrendertype => "InvRendType,LZ16,20,65556",       # O_DEFAULT,O_ALTERNATE_MODEL etc, resource
  limbmodel => "InvLimbMo,Z16,16",                    # string
  # editor
  automultibrush => "AutoVBR,Z16,16",                 # !?
  hasbrush => "HasBrush,L,4",                         # bool (!?)
  designnote => "DesignNote,S,17",                    # string
  frombriefcase => "FromBrief,L,4",                   # bool !?
  # difficulty
  script => "DiffScript,L,4",                         # O_QUEST_VAR_0,O_QUEST_VAR_1 etc
  turnonoff => "DiffTurnOnOff,L,4",                   # O_QUEST_VAR_0,O_QUEST_VAR_1 etc
  destroy => "DiffDestroy,L,4",                       # O_QUEST_VAR_0,O_QUEST_VAR_1 etc
  lockunlock => "DiffLock,L,4",                       # O_QUEST_VAR_0,O_QUEST_VAR_1 etc
  closeopendoor => "DiffCloseOpenDoor,L,4",           # O_QUEST_VAR_0,O_QUEST_VAR_1 etc
  # game
  bashfactor => "BashFactor,f,4",                     # 0.00..??
  bashparams => "BashParams,ff,8,1000",               # 0.00..??
  # game->damagemodel
  culpable => "Culpable,L,4",                         # Bool
  deathstage => "DeathStage,l,4",                     # ??
  hitpoints => "HitPoints,L,4",                       # 0..??
  maxhitpoints => "MAX_HP,L,4",                       # 0..??
  weapontype => "WeaponType,L,4",                     # 0..??
  weapondamage => "WeaponDamage,L,4",                 # 0..??
  slayresult => "SlayResult,L,4",                     # 0..??
  # game->dark
  bloodcause => "BloodCause,L,4",                     # Bool
  bloodmaxdamage => "BloodMaxDamage,L,4",             # 0..
  bloodtype => "BloodType,S,17",                      # string
  # dark gamesys
  airsupply => "AirSupply,L,4",                       # 0.. (usually 5000)
  loot => "Loot,lllL,16",                             # gold, gem, art, specialflags
  breathconfig => "BreathConfig,LLLf,16",             # maxair,drownfreq,drowndmg,recoverrate
  pickstate => "PickState,CCCCLLL,16",                # curtumber,pin,done,randtime,totaltime,
                                                      # stagetime,picker
  picksrc => "PickSrc,L,4",                           # set/reset bits (!?)
  flashinvulnerability => "NoFlash,L,4",              # BOOL
  stats => "DarkStat,L,4",                            # O_INNOCENT, O_HIDDEN, etc
  pickcfg => "PickCfg,LSSLLSSLLSSL,36",               # O_RANDOMIZE_TIME, O_RESET_ON_FAIL,
  # ObjectSystem
  transient => "Transient,L,4",                       # BOOL
  immobile => "Immobile,L,4",                         # BOOL
  # motions
  swordactiontype => "SwordAction,L,4",               # O_SWING,O_GENERAL_BLOCK, O_DIRECTED_BLOCK
  physicallimits => "MotPhysLim,ll,8",                # foo1, foo2
  playerlimboffsets => "MotPlyrLi,ffffff,24",         # X,Y,Z, X,Y,Z
  motorcontroller => "MotorCont,L,4",                 # O_GROUNDLOCO, O_MOTOR_COMBAT etc
  actortaglist => "MotActorTag,Z800,800",             # string
  gaitdescription => "MotGaitDes,llffffllfflllllll,68",
  # weapon
  weaponbasedamage => "BaseWpnDm,L,4,65540",          # 0..??
  exposure => "WpnExposure,L,4,65540",                # 0..??
  swingexposure => "SwingExposure,L,4",               # 0..??
  # prox
  blood => "Blood,L,4",                               # Bool
  fungus => "Fungus,L,4",                             # Bool
  # C
  csarrow => 'CSArrow,Z16,16',                        # name
  csprojectile => 'CSProjectile,Z16,16',              # name
  csproperty => 'CSProperty,Z16,16',                  # name
  # creature
  creaturetype => "Creature,L,4,65544",               # 1... o_humanoid() etc
  isnonphysical => "NonPhysCr,L,4",                   # bool
  timewarp => "TimeWarp,f,4",                         # 0.0 .. ??
  currentpose => "CretPose,LZ80ffL,96",               # O_TAG/O_MOTION,name,frac,scale,ballistic(BOOL)
  # Trap
  questvar => "TrapQVar,S,17",                        # name !?
  # tweq (use O_ON, O_REVERSE etc for the following flag fields)
  tweqmodels => "CfgTweqMo,SCCSSZ16Z16Z16Z16Z16Z16,104,104,"
   .",-1,11,3,1,0,2,4,5,6,7,8,9,10",                  # 0,type/animc,misc,curvec,rate,model0,
                                                      # model1,model2,model3,model4,model5
  modelstate => "StTweqModel,SSSS,8",                 # anims,miscs(NULL),curtime,frame
  lockstate => "StTweqLock,SSfL,12",                  # anims,miscs(NULL),angle,curstate
  rotatestate => "StTweqRotate,SSLLL,16",             # anims,miscs(NULL),axis1,axis2,axi3, 
  scalestate => "StTweqScale,SSLLL,16",               # anims,miscs(NULL),axis1,axis2,axi3, 
  jointstate => "StTweqJoint,SSLLLLLL,28",            # anims,miscs(NULL),join1-6 flags
  deletestate => "StTweqDelete,SSSS,8",               # anims,miscs(NULL),curtime,frame
  flickerstate => "StTweqBlink,SSSS,8",               # anims,miscs(NULL),curtime,frame
  emitterstate => "StTweqEmitter,SSSS,8",             # anims,miscs(NULL),curtime,frame
  emitter2state => "StTweq2Emitter,SSSS,8",           # anims,miscs(NULL),curtime,frame
  emitter3state => "StTweq3Emitter,SSSS,8",           # anims,miscs(NULL),curtime,frame
  emitter4state => "StTweq4Emitter,SSSS,8",           # anims,miscs(NULL),curtime,frame
  emitter5state => "StTweq5Emitter,SSSS,8",           # anims,miscs(NULL),curtime,frame
  tweqemitter => "CfgTweqEmitter,CCCCSSLZ16fff,40,40,"
    ."-1,3,1,0,2,4,5,6,7,8,9,10",                     # O_TWEQ, O_JITTER, etc
  tweqemitter2 => "CfgTweq2Emitter,CCCCSSLZ16fff,40,40,"
    ."-1,3,1,0,2,4,5,6,7,8,9,10",                     # O_TWEQ, O_JITTER, etc
  tweqemitter3 => "CfgTweq3Emitter,CCCCSSLZ16fff,40,40,"
    ."-1,3,1,0,2,4,5,6,7,8,9,10",                     # O_TWEQ, O_JITTER, etc
  tweqemitter4 => "CfgTweq4Emitter,CCCCSSLZ16fff,40,40,"
    ."-1,3,1,0,2,4,5,6,7,8,9,10",                     # O_TWEQ, O_JITTER, etc
  tweqemitter5 => "CfgTweq5Emitter,CCCCSSLZ16fff,40,40,"
    ."-1,3,1,0,2,4,5,6,7,8,9,10",                     # O_TWEQ, O_JITTER, etc
  tweqlock => "CfgTweqLock,CCCCLLLfffL,32,32,"
    ."-1,3,1,0,2,-1,-1,5,6,7,4",                      # O_TWEQ, O_JITTER, etc
  tweqflicker => "CfgTweqBlink,CCCCSS,8,8,"
    ."-1,3,1,0,2,4",                                  # O_TWEQ, O_JITTER, etc
  tweqdelete => "CfgTweqDelete,CCCCSS,8,8,"
    ."-1,3,1,0,2,4",                                  # O_TWEQ, O_JITTER, etc
  tweqrotate => "CfgTweqRotate,CCCCLlLfffffffL,48,48,"
    ."-1,3,1,0,2,5,6,7,8,9,10,11,12,13,4",            # O_TWEQ, O_JITTER, etc
  tweqjoint => "CfgTweqJoint,CCCCLCCCCLfffCCCCLfffCCCCLfffCCCCLfffCCCCLfffCCCCLffffffL"
    .",132,132,"
    ."-1,3,1,0,2,"                                    # remove prop
    ."-1,6,5,-1,-1,7,8,9,"                            # joint1
    ."-1,11,10,-1,-1,12,13,14,"                       # joint2
    ."-1,16,15,-1,-1,17,18,19,"                       # joint3
    ."-1,21,20,-1,-1,22,23,24,"                       # joint4
    ."-1,26,25,-1,-1,27,28,29,"                       # joint5
    ."-1,31,30,-1,-1,32,33,34,"                       # joint6 
    ."35,36,37,4",                                    # rate low/high, primary joint
  tweqscale => "CfgTweqScale,CCCCLLLfffffffL,48,48,"
    ."-1,3,1,0,2,5,6,7,8,9,10,11,12,13,4",            # O_TWEQ, O_JITTER, etc
  # AI
  # AI->Ability Settings
  camera => "AI_Camera,fff,12",                       # minangle, maxangle, scanspeed
  device => "AI_Device,lffflf,24",                    # join,inact,activ,speed,rot,face
  motiontags => "AI_MotTag,S,17",                     # string
  doespatrol => "AI_Patrol,L,4",                      # bool
  shouldfidget => "AI_Fidget,L,4",                    # bool
  randompatrol => "AI_PtrlRn,L,4",                    # bool
  idlereturn2origin => "AI_IdlRet,L,4",               # bool
  idlingdirections => "AI_IdleDi,LLlLLLLLLL,40",      # (last two are 0)
  frogexploderange => "DAI_FrogE,f,4",                # range
  investigationstyle => "AI_InvKnd,L,4",              # NORMAL, DONT_INVESTIGATE
  htohcombataudioresponse => "HTHAudioResponse,fff,12",      # x,y,z
  htohcombatdistance => "HTHCombat,fff,12",                  # x,y,z
  htohcombatmotionresponse => "HTHMotionResponse,fff,12",    # x,y,z
  htohcombatgruntalways => "HTHGruntAlways,L,4",             # bool
  respondtodamage => "AI_NCDmRs,L,4",                 # bool
  fleecondition => "AI_FleeCondition,LLL,12",         # flags, percent, nr of friends
  turret => "AI_Turret,f,4",                          # fire epsilon
  rangedcombat => "AIRCProp,llflfl,24,65560,",        # O_RARELY, etc
  nonhostile => "AI_NonHst,L,4",                      # O_NEVER, O_UNTIL_DAMAGED etc
  informresponseoptions => "AI_InvRsp,llllllllZ64Z64Z128LZ64Z64Z1688,2108,2108,"
   ."0,1,-1,-1,-1,-1,-1,2,3,4,5,6,7,8,9,",
  # responses
  alertresponse => "AI_AlrtRs,llLLLLlZ64Z64Z128lZ64Z64Z128lZ64Z64Z128lZ64Z64Z128lZ64Z64Z128lZ64Z64Z128Z516"
   .",2104,2104,0,1,-1,-1,-1,-1, 2,3,4,5, 6,7,8,9, 10,11,12,13, 14,15,16,17, 18,19,20,21"
   .",22,23,24,25, 26",                               # level, priorty, step, arg1,arg2,arg3, 
                                                      # step,arg1,arg2...
  bodyresponse => "AI_BodyRs,lLLLLlZ64Z64Z128lZ64Z64Z128lZ64Z64Z128lZ64Z64Z128lZ64Z64Z128lZ64Z64Z128Z516"
   .",2100,2100,0,-1,-1,-1,-1, 1,2,3,4, 5,6,7,8, 9,10,11,12, 13,14,15,16, 17,18,19,20"
   .",21,22,23,24, 25",                               # priorty, step, arg1,arg2,arg3, 
                                                      # step,arg1,arg2...
  signalresponse => "AI_SigRsp,Z32lLLLLlZ64Z64Z128lZ64Z64Z128lZ64Z64Z128lZ64Z64Z128lZ64Z64Z128lZ64Z64Z128Z516"
   .",2132,2132,0,1,-1,-1,-1,-1, 2,3,4,5, 6,7,8,9, 10,11,12,13, 14,15,16,17, 18,19,20,21"
   .",22,23,24,25, 26",                               # signal,piorty, step, arg1,arg2,arg3, 
                                                      # step,arg1,arg2...
  threatresponse => "AI_ThrtRs,llLLLLlZ64Z64Z128lZ64Z64Z128lZ64Z64Z128lZ64Z64Z128lZ64Z64Z128lZ64Z64Z128Z516"
   .",2104,2104,0,1,-1,-1,-1,-1, 2,3,4,5, 6,7,8,9, 10,11,12,13, 14,15,16,17, 18,19,20,21"
   .",22,23,24,25, 26",                               # threat (O_DAMAGE,O_RAISED_WEAPON, priorty,
                                                      # step, arg1,arg2,arg3, 
                                                      # step,arg1,arg2...
  sensecombatresponse => "AI_CbtRsp,LLLLLlZ64Z64Z128lZ64Z64Z128lZ64Z64Z128lZ64Z64Z128lZ64Z64Z128lZ64Z64Z128Z516"
   .",2100,2100,-1,-1,-1,-1,-1, 0,1,2,3, 4,5,6,7, 8,9,10,11, 12,13,14,15, 16,17,18,19,"
   .",20,21,22,23, 24",                               # step, arg1,arg2,arg3, 
                                                      # step,arg1,arg2...
  # AI->AbilitySettings->Inform
  informexpiration => "AI_InfExp,L,4",
  informdelay => "AI_InfDly,L,4",
  informmaxpasses => "AI_InfMxp,L,4",
  informmindistance => "AI_InfDst,L,4",
  informothers => "AI_InfOtr,L,4",                    # bool
  # AI->Core
  seesprojectiles => "AI_SeesPr,L,4",                 # bool
  usesdoors => "AI_UsesDo,L,4",                       # bool
  team => "AI_Team,L,4",                              # TEAM_GOOD, TEAM_NORMAL, TEAM_BAD1 etc
  ai => "AI,Z32,32",                                  # string
  freesenseknowledge => "AI_FreeKn,L,4",              # amount (!?)
  visibilitymodifier => "AI_VisMod,ffffff,24,65560",  # factor1..factor6
  projectilevisibilelaunch => "AI_Launch,L,4",        # bool
  alertnesscap => 'AI_AlertC,LLL,12',                 # maxlevel,minlevel,minrelaxlevel
  standingmotiontags => 'AI_StandT,S,17',             # taglist (comma sep?)
  soundtags => 'AI_SndTag,S,17',                      # taglist (comma sep?)
  awarenessdelay => "AI_AwrDel,lllll,20",             # delaytime1..5
  efficiencysettings => 'AI_Effici,Lffffffff,36',     # enabled, super entry/exit dist/z, 
                                                      # normal entry/exit dist/z
  visiondescription => 'AI_VisDes,LLLLLLLL LllllLllllLllllLllllLllllLllllLllllLllllLllllLllllf'
   .',236,236, -1,-1,-1,-1,-1,-1,-1,-1,'
   .'1,2,3,4,5,      6,7,8,9,10,     11,12,13,14,15, 16,17,18,19,20, 21,22,23,24,25,'
   .'26,27,28,29,30, 31,32,33,34,35, 36,37,38,39,40, 41,42,43,44,45, 46,47,48,49,50, 0',
                                                      # zoffset, 10 times: 
                                                      # flags, angle,zangle,range, acurity
  # ai->debug
  htohmodeoverride => "HTHModeOv,L,4",                # amount (!?)
  # ai->core->movement
  zoffset => "AI_MoveZO,f,4",                         # amount 
  turnrate => "AI_TurnRate,f,4",                      # amount 
  maxspeed => "AI_MoveSpeed,f,4",                     # amount 
  awarenesscapacitor => "AI_AwareC,fffL,16,16,0,1,2,-1",  # discharge0, discharge1, discharge2
  broadcastcustomization => "AI_BcstSe,"
   ."LLLZ16Z64LLZ16Z64LLZ16Z64LLZ16Z64LLZ16Z64LLZ16Z64LLZ16Z64LLZ16Z64,708,708",
                                                      # bool, O_SLEEPING/O_ALERT_TO_ONE etc, 
                                                      # O_NORMAL/O_NO_BROADCAST etc
  # AI->state
  currentmode => "AI_Mode,L,4",                       # O_ASLEEP, O_SUPER_EFFICIENT etc
  currentalertness => "AI_Alertn,LL,8,131080",        # O_NONE, O_LOW, O_MODERATE, O_HIGH
  frozen => "AI_Frozen,LL,8",                         # starttime, duration
  idlingorigin => "AI_IdleOr,ffff,16",                # x,y,z, direction
  # ai->utility
  pathavoid => "AI_ObjAvo,LL,8,8,-1,0",               # 0, flags (O_REPEL, O_BLOCK_PATHFIND)
  pathableobject => "AI_ObjPat,L,4",                  # bool
  fleepoint => "AI_FleePoint,L,4",                    # number (0..100)
  coverpoint => "AICoverPt,LfL,12,65548",             # value, decay speed, can duck (bool)
  vantagepoint => "AIVantagePoint,Lf,8,65544",        # value, decay speed
  anglelimits => "AngleLimits,ff,8",                  # start, end angle
  isknockout => "AI_StimKO,L,4",                      # bool
  soundtype => "AI_SndTyp,LZ36,40,131112",            # type O_INFROM etc, name
  watchpoint => "AI_WtchPn,LLLLLLLLLLLLLLLLLLLLLLLLLLLLL" 
   ."LZ64Z64Z128LZ64Z64Z128LZ64Z64Z128LZ64Z64Z128LZ64Z64Z128LZ64Z64Z128LZ64Z64Z128Z252,"
   ."2196,2196,"
   ."-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,"
   ."0, 3, 4, -1, 7, 8, 9,10,11, 5, 6,-1, 1, 2,"
   ."12,13,14,15, 16,17,18,19, 20,21,22,23, 24,25,26,27, 28,29,30,31, 32,33,34,35,"
   ."36,37,38,39",                                    # SELF_ENTRY/PLAYER_INTRUSION,
                                                      # tigradius,trigheight,reqaware,reqline,
                                                      # minalert,maxalert,linkkill,killlikeink,
                                                      # notestoncetrig,reusedelay,resetdelay
                                                      # 7 mal response, arg1,arg2,arg3
  # AI_Attributes
  aggression => "AI_Aggression,L,4",                  # O_AVERAGE, O_BELOW_AVERAGE etc
  aptitude => "AI_Aptitude,L,4",                      # O_AVERAGE, O_BELOW_AVERAGE etc
  defensive => "AI_Defensive,L,4",                    # O_AVERAGE, O_BELOW_AVERAGE etc
  dodginess => "AI_Dodginess,L,4",                    # O_AVERAGE, O_BELOW_AVERAGE etc 
  hearing => "AI_Hearing,L,4",                        # O_AVERAGE, O_BELOW_AVERAGE etc 
  sloth => "AI_Sloth,L,4",                            # O_AVERAGE, O_BELOW_AVERAGE etc
  verbosity => "AI_Verbosity,L,4",                    # O_AVERAGE, O_BELOW_AVERAGE etc
  vision => "AI_Vision,L,4",                          # O_AVERAGE, O_BELOW_AVERAGE etc
  # ai->conversations
  saveconversation => "AI_SaveCo,L,4",                # bool
  # book
  bookart => "BookArt,S,17",                          # S = ASCIIZ String
  booktext => "Book,S,17",                            # S = ASCIIZ String
  # A
  ambienthacked => "AmbientHacked,LLLZ16Z16Z16,60",   # radius, volume, flags (ENVIRONMENTAL etc), 
                                                      # schema, aux1, aux2
  # Schema
  action => "SchAction,Z16,16",                       # name
  loopparams => "SchLoopParams,CCxxSS,8",             # flags, maxsamples, intvallmin, intvallmax
  priority => "SchPriority,L,4",                      # rang
  message => "SchMsg,Z16,16",                         # string
  attenuationfactor => "SchAttFac,f,4",               # factor
  materialtags => "Material ,lZ252,256",              # string
  classtags => "Class Tag,Z256,256",                  # string
  playparams => "SchPlayParams,LllLL,20,20,"
    ."0,1,3,2,4",                                     # O_SIM, etc
  # Speech
  voice => "SpchVoice,Z16,16",
  voiceindex => "VoiceIdx,L,4",                       # index number
  pausemax => "MaxSpchPause,L,4",                     # in s,ms?
  pausemin => "MinSpchPause,L,4",                     # in s,ms? 
  # unsorted
  donortype => "DonorType,L,4",                       # !?!?
  flowgroup => "FlowGroup,L,4",                       # !?
  stimko => "StimKO,L,4",                             # bool
  };

# System Shock 2 properties (unverified)

$properties[SSHOCK2] =
  {
  radabsorbation => 'RadAbsorbation,f,4',             # amount of radiationabsorbation
  ecostate => 'EcoState,L,4',                         # long or float?
  ecotype => 'EcoType,L,4',                           # long !?
  destlevel => 'DestLevel,Z16,16',                    # name ("shodan")
  destloc => 'DestLoc,L,4',                           # !?
  delaytime => 'DelayTime,f,4',                       # time (in s/ms?) for what?
  blockfrob => 'BlockFrob,L,4',                       # bool
  showhp => 'ShowHP,L,4',                             # bool !?
  lockmessage => 'LockMsg,S,17',                      # string
  hacktext => 'HackText,S,17',                        # string
  meleetype => 'Melee Typ,L,4',                       # type (!?)
  basestats => 'BaseStats,LLLLL,20,276',              # !?
  invcursor => 'InvCursor,S,17,',                     # string
  frobsound => 'FrobSound,Z16,16,',                   # string
  objbroken => 'ObjBroken,Z16,16,',                   # string
  objectshortdescription => 'ObjShort,S,17',          # string
  heartbeat => 'Heartbeat,L,4',                       # in ms?
  energy => 'Energy,f,4',                             # amount
  armor => 'Armor,f,4',                               # amount
  doortimer => 'DoorTimer,L,4,65540',                 # in s?
  qbname => 'QBName,S,17',                            # string
  objectname => 'ObjName,S,17,131089',                # string
  hacktime => 'HackTime,L,4',                         # in ms? (120000 is one example)
  fabricate => "Fabricate,l,4,65540,",                # !?
  transrate => "TransRate,l,4",                       # !?
  nametype => "NameType,l,4",                         # !?
  preload => "Preload,L,4",                           # bool 
  huduse => "HUDUse,S,17",                            # string
  autopickup => "AutoPickup,L,4",                     # bool!?
  psiradar => "PsiRadar,L,4,65540,",                  # bool
  targettype => "TargetType,L,4,65540,",              # !?
  # Gun
  gunstate => "GunState,lfllf,20,20,0,1,3,4,2",       # ammo,condition%,silencing%,settings,modifications

  # unknown formats
  keysrc => "KeySrc,CSCS,6",                          # masterbit (bool), region, lockid !? 
  keydst => "KeyDst,CSCS,6",                          # masterbit (bool), region, lockid !?

  };

# Thief II properties (unverified)
$properties[THIEF2] =
  { 
  # confirmed stuff
  # act/react
  sourcescale => "arSrcScal,f,4",                     # scale
  # difficulty
  permit => "DiffPermi,L,4",                          # O_QUEST_VAR_0,O_QUEST_VAR_1 etc
  # ai->core
  isbig => "AI_IsBig,L,4",                            # bool (uses big doors)
  issmall => "AI_IsSmal,L,4",                         # bool (is small creature)
  nomultiplayerghost => "AI_NoGhos,L,4",              # bool 
  nomultiplayerhandoff => "AI_NoHand,L,4",            # bool
  noticesonlyplayer => "AI_OnlyPlayer,L,4",           # bool
  noticedamage => "AI_Notice,L,4",                    # bool 
  noticebody => "AI_NtcBod,L,4",                      # bool
  avatarzoffset => 'AvatarZOffset,f,4',               # z offset of avatar
  handedoffproxy => "AI_IsProxy,L,4",                 # bool 
  blockvision => "AI_BlkVis,L,4",                     # bool
  device => "AI_Device,lffflfL,28",                   # join,inact,activ,speed,rot,face, rot?
  # ai->utility
  isfrustrated => "AI_Frustr,LLl,12",                 # src, dest, last unknown (amount?)
  pathwater => "AI_UseWat,L,4",                       # bool
  exactobb => "AI_NGOBB,L,4",                         # bool
  trackmedium => "AI_TrackM,L,4",                     # bool
  ignorescamers => "AI_IgCam,L,4",                    # bool 
  immediateinform => "AI_InfNow,L,4",                 # bool
  informfromlastseen => "AI_InfFrm,L,4",              # bool
  # object system
  fixture => "Fixture,L,4",                           # bool
  # engine features
  inheritcontains => "ContainIn,L,4,65540",           # bool
  suspiciousobject => "SuspObj,CZ32f,37",             # issuspicious,type,min light level
  preload => "Preload,L,4",                           # bool
  # sound
  # unsorted
  longdescription => "GameDesc,S,17,65553",           # S = ASCIIZ String
  keysrc => "KeySrc,CSCS,6",                          # masterbit (bool), region, lockid, last unknown
  keydst => "KeyDst,CSCS,6",                          # masterbit (bool), region, lockid, last unknown
  # Gun
  gunstate => "GunState,lfllf,20,20,0,1,3,4,2",       # ammo,condition%,silencing%,settings,modifications
  gundescription => "AIGunDesc,ffffLLLS,30,65566",    # maxrange(notused),fireoffsetx,y,z,startlag,
                                                      # burstlag,endlag,aimerror
  projectil => "Projectil,ls,6,65542",                # spray, spread
  basegundescription => "BaseGunDe,,136,65672,"
   ."1,2,3,4,5,6,7,8,9,-1,11,12,13,14,15,16,17,18,19,-1,"
   ."20,21,22,23,24,25,26,27,28,29,-1,0,10,20,30",    # nr of settings (1..3?)
                                                      # repeat next 9 three times:
                                                      # burst,clip,spray,stimmult, burstinterval, 
                                                      # shotinterval,ammousage,speedmult,
                                                      # reloadtime,zoomfactor,
  # renderer
  light => "Light,fffffLf,28,28,"                     # bright, offsetx,y,z, radius, 
    ."0,1,2,3,4,6,5",                                 # innerradius, quadlight
  zbias => "Z-Bias,L,4",                              # amount
  # network
  disallowborrowing => "NoBorrow,L,4",                # bool 
  heartbeat => 'Heartbeat,L,4',                       # in ms?
  distinctavatar => "DistinctA,L,4",                  # bool
  # physics
  attributes => "PhysAttr,ffffffffLLLLL,52,132073",   # grav, mass, densit,elast,friction,
                                                      # cogoffx,cogoffy,cogoffz, rotaxis,restaxis,
  # physics->model
  mantleable => "PhysCanMa,L,4,4",                    # bool
  phystype => "PhysType,LLLL,16,66538",               # o_obb() etc, number, rem on sleep, special
  dimensions => "PhysDims,ffLLLffffffLL,52,66537",    # radius1, radius2, ?, ?, ?, ofs x, ofsy, 
                                                      # ofsz, sizx, sizy, sizz, 
                                                      # pnt vs terr, pnt vs spec
  # unsure
  networkcard => "NetworkCa,L,4",                     # bool (full name unknown, card/cable!?)
  ai_alsnmu => "AI_AlSnMu,fffffffffffffffff,68",      # 17 floats (full name unknown)
  bumpmap => "Bump Map,L,4",                          # bool !?
  borrowing => "Borrowing,L,4",                       # bool !?
  borrowed => "Borrowed,L,4",                         # bool !?
  localcopy => "LocalCopy,L,4",                       # bool !?
  projectsound => "PrjSound,S,17",                    # string !!?, (full name unknown)
  surprise => "AISuprise,LLL,12",                     # format unknown (full name unknown)
  handoffnu => "HandOffNu,L,4",                       # bool!? (full name unknown)
  invbeingt => 'InvBeingT,L,4,65540',                 # !?
  physcanma => "PhysCanMa,L,4",                       # bool!? (full name unknown)
  rangedaudio => "RangedAud,fff,12",                  # parameter unknown (full name ?audio?)
  spotambient => "SpotAmb,fff,12,65548",              # parameter unknown (full name ?ambient?)
  rangedgrunt => "RngdGrunt,L,4",                     # bool
  trapflags => "TrapFlags,L,4",                       # bitfield
  invisible => "INVISIBLE,l,4",                       # !? (-1 is one example)
  bitmapwor => "BitmapWor,ffff,16,65552",             # parameter and full name unknown !?
  meshtextures => "MeshTex,Z16Z380,396,65932",        # two names (of gifs)
  conveyorv => "ConveyorV,fff,12",                    # last two parameter unsure (full name!?)
  advpickst => "AdvPickSt,LLLLLLLLLLLLL,52,52",       # parameter and full name unknown
  weather => "Weather,LLLL,16,65552",                 # parameter unknown 
 
  tweqemitter => "CfgTweqEmitter,CCCCSSLZ16fff,52,52,"
    ."-1,3,1,0,2,4,5,6,7,8,9,10",                     # O_TWEQ, O_JITTER, etc
  tweqemitter2 => "CfgTweq2Emitter,CCCCSSLZ16fff,52,52,,"
    ."-1,3,1,0,2,4,5,6,7,8,9,10",                     # O_TWEQ, O_JITTER, etc
  tweqemitter3 => "CfgTweq3Emitter,CCCCSSLZ16fff,52,52,"
    ."-1,3,1,0,2,4,5,6,7,8,9,10",                     # O_TWEQ, O_JITTER, etc
  tweqemitter4 => "CfgTweq4Emitter,CCCCSSLZ16fff,52,52,"
    ."-1,3,1,0,2,4,5,6,7,8,9,10",                     # O_TWEQ, O_JITTER, etc
  tweqemitter5 => "CfgTweq5Emitter,CCCCSSLZ16fff,52,52,"
    ."-1,3,1,0,2,4,5,6,7,8,9,10",                     # O_TWEQ, O_JITTER, etc
  explodeme => "PhysExplodeMe,LL,8,1000",             # amount (!?), second!?
  turret => "AI_Turret,fLff,16",                      # fire epsilon, rest!?
  altlink => "AltLink,LLfffff,28",                    # rest!? (full name unknown yet)
  beltlink => "BeltLink,LLfffff,28",                  # rest!? (full name unknown yet)
  gaitdescription => "MotGaitDes,llffffllffllllllll,72", # one l more!?
  rangedcombat => "AIRCProp,llflfll,28,65564,",       # O_RARELY, etc
  
  };

1;