When looking throgh new_config_vars.txt I noticed a section mentioning rope/vine lengths are not calculated correctly. There's a config var to fix it globally (belongs in cam_ext.cfg), but it also mentions a property change so FM authors can make sure the lengths in that FM are correct regardless of the cam_ext options:
Concrete objects will have this property set directly, so the above change won't affect anything that's already been created.
Code:
DML1
//Changes taken from here: https://www.ttlg.com/forums/showthread.php?t=98522
////The first section is for things that each author will most likely
////want to review for gameplay reasons
//Throw jars like in Thief 1
+ObjProp "Jar" "FrobInfo"
{
"World Action" "Move"
"Inv Action" "Move"
}
+ObjProp "Jar" "physcontrol"
{
"Controls Active" ""
}
+ObjProp "Jar" "phystype"
{
"Type" "Sphere"
}
//AI
ObjProp "Creature" "scripts"
{
"Script 2" "NoticesPlayerBumps"
}
//Alarm sounds maintain full volume over a greater distance
+ObjProp "DEVICE_ALARM" "schattfac" = 3
//Immovable Barrel physics - easier to mantle, pysics don't get lost if too close to wall, barrels cannot be pushed
CreateArch "Barrel 0" "Barrel0_Solid"
+ObjProp "Barrel0_Solid" "physcontrol"
{
"Controls Active" "Location, Rotation"
}
ObjProp "Barrel0_Solid" "phystype"
{
"Type" "OBB"
}
//Cast a shadow. Runtime Object Shadow prop needed to affect the lightgem...
//but not used here - author should set it when appropriate
+ObjProp "Barrel0_Solid" "immobile" = TRUE
+ObjProp "Barrel0_Solid" "slayresult"
{
"Effect" "No Effect"
}
+ObjProp "Barrel0_Solid" "class tags"
{
"1: Tags" ""
}
+ObjProp "Barrel0_Solid" "ai_objavoid"
{
"Flags" "Block pathfind"
}
+ObjProp "Barrel0_Solid" "ai_objpathable" = TRUE
//Small solid barrel
CreateArch "Barrel0_Solid" "SmalBarrel0_Solid"
+ObjProp "SmalBarrel0_Solid" "modelname" = "barrela"
//Elemental arrows cause AI reaction but no damage, did not work consistently in testing
+StimSource "water" "BashStim"
{
"Intensity" 0
"Propagator" "Contact"
{
"Shape"
{
"Contact Types" "Collision"
"Velocity Coeff" 0.01 //copied this from noise arrow stim
}
}
}
+StimSource "EarthArrow" "BashStim"
{
"Intensity" 0
"Propagator" "Contact"
{
"Shape"
{
"Contact Types" "Collision"
"Velocity Coeff" 0.01 //copied this from noise arrow stim
}
}
}
+StimSource "GasArrow" "BashStim"
{
"Intensity" 0
"Propagator" "Contact"
{
"Shape"
{
"Contact Types" "Collision"
"Velocity Coeff" 0.01 //copied this from noise arrow stim
}
}
}
+StimSource "VineArrow" "BashStim"
{
"Intensity" 0
"Propagator" "Contact"
{
"Shape"
{
"Contact Types" "Collision"
"Velocity Coeff" 0.01 //copied this from noise arrow stim
}
}
}
//Vine Arrow should not inherit PokeStim. Move this from RopeyArrow to just the RopeArrow
-StimSource "RopeyArrow" "PokeStim"
+StimSource "RopeArrow" "PokeStim"
{
"Intensity" 1
"Propagator" "Contact"
{
"Shape"
{
"Contact Types" "Collision"
"Velocity Coeff" 0.08 //same value that was on RopeyArrow
}
}
}
//Vine arrows should attach to wood - credit to qolelis
ObjProp "MatWood" "canattach"
{
"Flags" "Rope, Vine"
}
//Same for these two:
ObjProp "MatCarpet" "canattach"
{
"Flags" "Rope, Vine"
}
ObjProp "MatVegetation" "canattach"
{
"Flags" "Rope, Vine"
}
//Rope and Vine length corrections
ObjProp "RopeArrowRope" "PhysRope"
{
"Desired Length" 30.00
"Length" 0.00
"Deployed" FALSE
"Calc Correct Len" TRUE
}
ObjProp "PlacedRope" "PhysRope"
{
"Desired Length" 30.00
"Length" 0.00
"Deployed" TRUE
"Calc Correct Len" TRUE
}
ObjProp "Vine8" "PhysRope"
{
"Desired Length" 8.00
"Length" 0.00
"Deployed" TRUE
"Calc Correct Len" TRUE
}
ObjProp "Vine12" "PhysRope"
{
"Desired Length" 12.00
"Length" 0.00
"Deployed" TRUE
"Calc Correct Len" TRUE
}
ObjProp "Vine16" "PhysRope"
{
"Desired Length" 16.00
"Length" 0.00
"Deployed" TRUE
"Calc Correct Len" TRUE
}
ObjProp "Vine20" "PhysRope"
{
"Desired Length" 20.00
"Length" 0.00
"Deployed" TRUE
"Calc Correct Len" TRUE
}
//Widen the cone for spotlights (existing spotlights affected upon relighting the mission)
ObjProp "HangingSpot" "spotlight" = 15, 60, 0
ObjProp "HangSpotFlush" "spotlight" = 15, 60, 0
//Fire arrow colour explosion, thanks to NV
+ObjProp "expcorona" "lightcolor"
{
"hue" 0.1
"saturation" 0.75
}
//Also apply this to fire arrow itself
+ObjProp "firearr" "lightcolor"
{
"hue" 0.1
"saturation" 0.75
}
//Make them both brighter, also compensates for effect of colour change
ObjProp "expcorona" "selflit" = 220
ObjProp "firearr" "selflit" = 120
//Stop robot corpese being broken up by broadheads - credit to Stan_The_Thief
+Receptron "RobotCorpses" "PokeStim"
{
"Max" None
"Effect" "Abort"
}
////This sections is for bug fixing
//Skull throw correction - Eshaktaar
ObjProp "Skull" "FrobInfo"
{
"Tool Action" ""
}
//Helps when object texutres include transparency, may depend on image format
-ObjProp "Banner" "renderalpha"
+ObjProp "ExBanner" "renderalpha" = 1
-ObjProp "Fence" "renderalpha"
+ObjProp "Railing" "renderalpha" = 1
+ObjProp "VineRail" "renderalpha" = 1
+ObjProp "catwrail12x3" "renderalpha" = 1
+ObjProp "Catwpiece1" "renderalpha" = 1
+ObjProp "Catwpiece2" "renderalpha" = 1
+ObjProp "Catwpiece3" "renderalpha" = 1
+ObjProp "catwrail4x3" "renderalpha" = 1
+ObjProp "OfficeChair" "renderalpha" = 1
+ObjProp "CoveredChairs" "renderalpha" = 1
//Red warehouse door
+ObjProp "RedDoor" "rotdoor"
{
"Blocks Vision?" FALSE
}
-ObjProp "RedDoor" "renderalpha"
//Containers
ObjProp "Safe" "cfgtweqjoints"
{
"Joint1AnimC" "Sim"
}
ObjProp "VicHopeChest" "cfgtweqjoints"
{
"Joint1AnimC" "Sim"
}
ObjProp "LC_Chest" "cfgtweqjoints"
{
"Joint1AnimC" "Sim"
}
//MoneyBox sounds were doubling due to unnecessary script property
-ObjProp "MoneyBox" "scripts"
//Prevent undead from "drowning" (all values are 0 when added, no need for config)
+ObjProp "Undead" "breathconfig"
{
}
//AI have 'head' as vision joint - thanks to NV
//But not robots - thanks to Stan_The_Thief
+ObjProp "Undead" "ai_visjoint"
{
"joint" "Head"
}
+ObjProp "Beast" "ai_visjoint"
{
"joint" "Head"
}
+ObjProp "Animal" "ai_visjoint"
{
"joint" "Head"
}
//Chair materials
+MetaProp "RamSofaChair" "MatCarpet"
+MetaProp "CoveredChairs" "MatCarpet"
+MetaProp "MechCouch" "MatCarpet"
+MetaProp "VictorianChairs" "MatCarpet"
+MetaProp "VicSmallDeskChair" "MatWood" //exception to the rule
+MetaProp "RamSofa" "MatCarpet"
//Beds, most already carpet
+MetaProp "bedpostphys" "MatWood"
//LC bed is stone, looks like a pedestal for displaying bodies lying in state
+MetaProp "LC_Bed" "MatStone"
-MetaProp "LC_Headrest" "MatCarpet"
+MetaProp "LC_Headrest" "MatMetal"
//Kithen object materials
+MetaProp "Pan" "MatMetal"
+MetaProp "Knife" "MatMetal"
+MetaProp "Butcher Knife" "MatMetal"
+MetaProp "Jar" "MatCeramic"
//Objects blocking AI vision
+ObjProp "Drapes" "ai_blkvis" = TRUE
//All doors, with exceptions for doors with large windows
+ObjProp "Door" "ai_blkvis" = TRUE
+ObjProp "FrenchDoor" "ai_blkvis" = FALSE
+ObjProp "CemetaryGate" "ai_blkvis" = FALSE
+ObjProp "whd4x8-3" "ai_blkvis" = FALSE
+ObjProp "Portcullis" "ai_blkvis" = FALSE
+ObjProp "CloisterGate2" "ai_blkvis" = FALSE
//Gauges should not be fully lit
+ObjProp "Gauge" "selfillum" = 0
+ObjProp "Transformer02" "selfillum" = 0
+ObjProp "Transformer01" "selfillum" = 0
+ObjProp "coil02" "selfillum" = 0
+ObjProp "coil03" "selfillum" = 0
//Moss Arrow Fix (credit to Winter Cat)
ObjProp "Mosslauncher" "cfgtweqemit"
{
"Rate" 400
"CurveC" "JitterLow"
}
ObjProp "mosslump" "scale"
{
"" 1, 1, 1.5
}
-ObjProp "mosslump" "cfgtweqemit"
-ObjProp "mosslump" "sttweqemit"
ObjProp "mosspad" "sttweqemit"
{
"AnimS" "On"
"Cur Time" 0
}
ObjProp "mosspad" "cfgtweqemit"
{
"Halt" "Remove Prop"
"Rate" 200
"Velocity" 0, 0, 9
"CurveC" "JitterHi"
}
-ObjProp "moss0.5" "scale"
ObjProp "mossspore" "PhysInitVel" = 5, 0, 10
-ObjProp "lilmossspore" "PhysInitVel"
//Fix for fire arrow (3 sets of fletching feathers rather than 2)
//Note Winter Cat origainally had a fix for fire particles, but these seem okay in NewDark
ObjProp "firearr" "modelname" = "arrowfir"
//Vic light swtich fix - credit to Zontik
ObjProp "VicLightSwitch" "jointpos"
{
"Joint 1" -0.06
"Joint 2" -0.06
}
ObjProp "VicLightSwitch" "cfgtweqjoints"
{
" rate-low-high" 0.02, -0.065, 0
" rate-low-high2" 0.02, -0.065, 0
}
//Default light radius of 60 for everything
//Static light props
ObjProp "lanterns" "light"
{
"radius (0 for infinite)" 60
}
ObjProp "WallSpotLight" "light"
{
"radius (0 for infinite)" 60
}
ObjProp "MineLight" "light"
{
"radius (0 for infinite)" 60
}
ObjProp "OldElecWallLight" "light"
{
"radius (0 for infinite)" 60 //not sure if needed for brightness of 0 but does no harm
}
ObjProp "OldHangElecLight" "light"
{
"radius (0 for infinite)" 60 //not sure if needed for brightness of 0 but does no harm
}
ObjProp "HangSpotFlush" "light"
{
"radius (0 for infinite)" 60
}
ObjProp "HangingSpot" "light"
{
"radius (0 for infinite)" 60
}
ObjProp "MechHangLamp" "light"
{
"radius (0 for infinite)" 60
}
ObjProp "OldHangingShort" "light"
{
"radius (0 for infinite)" 60
}
ObjProp "Streetlamp2" "light"
{
"radius (0 for infinite)" 60
}
ObjProp "OldStreetlamp2" "light"
{
"radius (0 for infinite)" 60 //not sure if needed for brightness of 0 but does no harm
}
ObjProp "Streetlamp" "light"
{
"radius (0 for infinite)" 60
}
ObjProp "SpotStreetlamp" "light"
{
"radius (0 for infinite)" 60
}
ObjProp "OldSpotStreetlamp" "light"
{
"radius (0 for infinite)" 60 //not sure if needed for brightness of 0 but does no harm
}
ObjProp "TheatricalSpot" "light"
{
"radius (0 for infinite)" 60
}
ObjProp "SmallTabLamp" "light"
{
"radius (0 for infinite)" 30
}
ObjProp "MechFloorLamp" "light"
{
"radius (0 for infinite)" 60
}
ObjProp "MechSpotLight" "light"
{
"radius (0 for infinite)" 60
}
ObjProp "litemush_durabl" "light"
{
"radius (0 for infinite)" 40
}
ObjProp "VicGlowGas" "light"
{
"radius (0 for infinite)" 60
}
ObjProp "SpotLightPoint" "light"
{
"radius (0 for infinite)" 60
}
ObjProp "SpotLightPoint" "light"
{
"radius (0 for infinite)" 60
}
ObjProp "barberpole" "light"
{
"radius (0 for infinite)" 40
}
ObjProp "CollectorTower" "light"
{
"radius (0 for infinite)" 60
}
ObjProp "GlassChandelier" "light"
{
"radius (0 for infinite)" 60
}
ObjProp "PaganLight" "light"
{
"radius (0 for infinite)" 60
}
//Anim light props
ObjProp "litemush_fragil" "animlight"
{
"radius (0 for infinite)" 40
}
ObjProp "Flame" "animlight"
{
"radius (0 for infinite)" 60
}
ObjProp "DynFlame" "animlight"
{
"radius (0 for infinite)" 60
}
ObjProp "WindowShade" "animlight"
{
"radius (0 for infinite)" 60
}
ObjProp "Extinguishable" "animlight"
{
"radius (0 for infinite)" 60
}
ObjProp "MechTorch" "animlight"
{
"radius (0 for infinite)" 60
}
ObjProp "LCLite" "animlight"
{
"radius (0 for infinite)" 60
}
//Change colour and brighten to compensate
+ObjProp "firebolt" "lightcolor"
{
"hue" 0.1
"saturation" 0.75
}
ObjProp "firebolt" "selflit" = 70
+ObjProp "MagicMissile" "selflit" = 50
+ObjProp "MagicMissile" "lightcolor"
{
"hue" 0.8
"saturation" 1
}
+ObjProp "cannonball" "selflit" = 20
+ObjProp "GhostShot" "shadow" = 10
//Add MatCarpet to wires so solid versions are easier to handle
+MetaProp "Wires" "MatCarpet"
//Solid wires - child archetypes created
CreateArch "Wire8" "SolidWire8"
+ObjProp "SolidWire8" "phystype"
{
"Type" "OBB"
}
CreateArch "WireSnake8" "SolidWireSnake8"
+ObjProp "SolidWireSnake8" "phystype"
{
"Type" "OBB"
}
+ObjProp "PaganLight" "CollisionType" = "[None]"
ObjProp "Will O'Wisp" "CollisionType" = "[None]"
-ObjProp "ElecWallLight" "cfgtweqjoints"
-ObjProp "ElecWallLight" "sttweqjoints"
//Physics models
+ObjProp "BigTable" "PhysDims"
{
"Offset 1" 0, 0, 1.2
"Size" 12.2, 6, 0.57679
}
Another useful feature of the DML loading system is that if we just use "+" to add stim source, it won't make a duplicate if source is already present. I'm not sure how much of the existing source it checks (e.g. if it just checks the stimulus type or if it also compares other parameters), but we can use "++" if we really do want duplicates.