here's an example directory tree for the content pack "forceislands2" inside the zip file "forceislands2.zip" inside the mods subdirectory of a freebuild installation.
Note that the Force Islands 2 subdirectory should not be present. The correct structure for this content pack is as follows:
also note that i'm not entirely sure why those textures are in the interiors directory when they look more like terrain textures, and as far as I can tell they are using the core/data/ copy anyway, so that should go too.
Here is a sample modinfo.txt
Code:
this should be corrected so that the NAME: line reads as following
Code:
to match the .zip name of the content pack.
Finally here is some example mission code.
Code:
This should be changed as follows
Code:

Note that the Force Islands 2 subdirectory should not be present. The correct structure for this content pack is as follows:

also note that i'm not entirely sure why those textures are in the interiors directory when they look more like terrain textures, and as far as I can tell they are using the core/data/ copy anyway, so that should go too.
Here is a sample modinfo.txt
Code:
NAME: Force Islands 2
AUTHOR: fiveforce
VERSION: 1
DEPENDENCIES: None
DESCRIPTION: Map for use in Freebuild (TBG) to replace the one lost in The Orange Block
Resources: core/data/terrains/grassy
core data/terrains/sand
core data/terrains/water
core data/terrains/cliffy
this should be corrected so that the NAME: line reads as following
Code:
NAME: forceislands2
Finally here is some example mission code.
Code:
//--- OBJECT WRITE BEGIN ---
new SimGroup(MissionGroup) {
canSaveDynamicFields = "1";
cdTrack = "2";
musicTrack = "lush";
CTF_scoreLimit = "5";
new ScriptObject(MissionInfo) {
preview = "core/data/missions/previews/ForceIslands2.png";
name = "BL-Force Islands 2";
desc0 = "Come and build on these wonderful islands. Map by 5Force";
desclines = "2";
};
new MissionArea(MissionArea) {
canSaveDynamicFields = "1";
Area = "-360 -648 720 1296";
flightCeiling = "300";
flightCeilingRange = "20";
locked = "true";
};
new Sky(Sky) {
canSaveDynamicFields = "1";
position = "336 136 0";
rotation = "1 0 0 0";
scale = "1 1 1";
materialList = "~/data/skies/Sky_Blue2/resource.dml";
cloudHeightPer[0] = "0.349971";
cloudHeightPer[1] = "0.3";
cloudHeightPer[2] = "0.199973";
cloudSpeed1 = "0.0005";
cloudSpeed2 = "0.001";
cloudSpeed3 = "0.0003";
visibleDistance = "2000";
fogDistance = "350";
fogColor = "0.5 0.5 0.6 1";
fogStorm1 = "0";
fogStorm2 = "0";
fogStorm3 = "0";
fogVolume1 = "0 0 0";
fogVolume2 = "0 0 0";
fogVolume3 = "0 0 0";
fogVolumeColor1 = "128 128 128 -2.22768e+038";
fogVolumeColor2 = "128 128 128 0";
fogVolumeColor3 = "128 128 128 -1.70699e+038";
windVelocity = "-2.3 0.5 0";
windEffectPrecipitation = "1";
SkySolidColor = "0.9 0.8 0.6 1";
useSkyTextures = "1";
renderBottomTexture = "0";
noRenderBans = "0";
locked = "true";
};
new Sun(sunlight) {
canSaveDynamicFields = "1";
azimuth = "0";
elevation = "35";
color = "0.45 0.45 0.45 1";
ambient = "0.15 0.15 0.15 1";
CastsShadows = "1";
position = "0 0 0";
rotation = "0 0 1 0";
scale = "1 1 1";
locked = "true";
direction = "0.483304 0.262845 -0.76855";
};
new SimGroup(PlayerDropPoints) {
canSaveDynamicFields = "1";
new SpawnSphere(Drop1) {
canSaveDynamicFields = "1";
position = "-4.74673 326.024 19.9";
rotation = "0 0 1 179.909";
scale = "0.940827 1.97505 1";
dataBlock = "SpawnSphereMarker";
radius = "10";
sphereWeight = "1";
indoorWeight = "1";
outdoorWeight = "1";
locked = "False";
homingCount = "0";
lockCount = "0";
};
};
new TerrainBlock(Terrain) {
canSaveDynamicFields = "1";
rotation = "1 0 0 0";
scale = "1 1 1";
detailTexture = "~/data/terrains/details/detail1";
terrainFile = "./BL-ForceIslands2.ter";
squareSize = "8";
bumpScale = "1";
bumpOffset = "0.01";
zeroBumpScale = "8";
tile = "1";
position = "-1024 -1024 0";
locked = "true";
};
new fxSunLight(sunlight) {
canSaveDynamicFields = "1";
position = "-0.140032 -14.612 129.561";
rotation = "0 0 1 30";
scale = "1 1 1";
Enable = "1";
LocalFlareBitmap = "~/common/lighting/corona";
RemoteFlareBitmap = "~/common/lighting/corona";
SunAzimuth = "0";
SunElevation = "25";
LockToRealSun = "1";
FlareTP = "1";
Colour = "0.5 0.5 0.5 1";
Brightness = "0.5";
FlareSize = "1";
FadeTime = "0.1";
BlendMode = "0";
AnimColour = "1";
AnimBrightness = "0";
AnimRotation = "1";
AnimSize = "0";
AnimAzimuth = "1";
AnimElevation = "0";
LerpColour = "1";
LerpBrightness = "1";
LerpRotation = "1";
LerpSize = "1";
LerpAzimuth = "1";
LerpElevation = "1";
LinkFlareSize = "0";
SingleColourKeys = "1";
MinColour = "0 0 0 1";
MaxColour = "1 1 1 1";
MinBrightness = "0";
MaxBrightness = "1";
MinRotation = "0";
MaxRotation = "359";
minSize = "0.5";
MaxSize = "1";
MinAzimuth = "250";
MaxAzimuth = "250";
MinElevation = "-30";
MaxElevation = "210";
RedKeys = "AZA";
GreenKeys = "AZA";
BlueKeys = "AZA";
BrightnessKeys = "AZA";
RotationKeys = "AZA";
SizeKeys = "AZA";
AzimuthKeys = "AZ";
ElevationKeys = "AZ";
ColourTime = "60";
BrightnessTime = "60";
RotationTime = "60";
SizeTime = "60";
AzimuthTime = "5";
ElevationTime = "5";
};
new StaticShape() {
canSaveDynamicFields = "1";
position = "-37.2438 319.745 9.962";
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = "gray32";
receiveSunLight = "1";
receiveLMLighting = "1";
useAdaptiveSelfIllumination = "0";
useCustomAmbientLighting = "0";
customAmbientSelfIllumination = "0";
customAmbientLighting = "0 0 0 1";
useLightingOcclusion = "1";
};
new WaterBlock() {
canSaveDynamicFields = "1";
position = "-64 272 -41.5";
rotation = "1 0 0 0";
scale = "1 1 50";
UseDepthMask = "1";
surfaceTexture = "~/data/water/water";
ShoreTexture = "~/data/water/water";
envMapOverTexture = "~/data/water/water";
envMapUnderTexture = "~/data/water/water";
submergeTexture[0] = "~/data/water/water";
submergeTexture[1] = "~/data/water/water";
specularMaskTex = "~/data/water/water";
liquidType = "OceanWater";
density = "5";
viscosity = "15";
waveMagnitude = "3";
surfaceOpacity = "0.75";
envMapIntensity = "0.4";
TessSurface = "50";
TessShore = "60";
SurfaceParallax = "0.5";
FlowAngle = "0";
FlowRate = "0.015";
DistortGridScale = "0.1";
DistortMag = "0.05";
DistortTime = "0.5";
ShoreDepth = "20";
DepthGradient = "1";
MinAlpha = "0.03";
MaxAlpha = "1";
tile = "1";
removeWetEdges = "0";
specularColor = "1 1 1 1";
specularPower = "6";
envMapTexture = "~/data/skies/sunset_0007";
textureSize = "32 32";
params2 = "0.39 0.39 0.2 0.133";
floodFill = "1";
Extent = "100 100 10";
seedPoints = "0 0 1 0 1 1 0 1";
params0 = "0.32 -0.67 0.066 0.5";
params3 = "1.21 -0.61 0.13 -0.33";
params1 = "0.63 -2.41 0.33 0.21";
};
new FileObject() {
canSaveDynamicFields = "1";
};
new StaticShape() {
canSaveDynamicFields = "1";
position = "442.756 767.745 21.362";
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = "gray32";
receiveSunLight = "1";
receiveLMLighting = "1";
useAdaptiveSelfIllumination = "0";
useCustomAmbientLighting = "0";
customAmbientSelfIllumination = "0";
customAmbientLighting = "0 0 0 1";
useLightingOcclusion = "1";
};
new StaticShape() {
canSaveDynamicFields = "1";
position = "474.756 623.745 9.962";
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = "gray32";
receiveSunLight = "1";
receiveLMLighting = "1";
useAdaptiveSelfIllumination = "0";
useCustomAmbientLighting = "0";
customAmbientSelfIllumination = "0";
customAmbientLighting = "0 0 0 1";
useLightingOcclusion = "1";
};
new StaticShape() {
canSaveDynamicFields = "1";
position = "-581.244 335.745 9.962";
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = "gray32";
receiveSunLight = "1";
receiveLMLighting = "1";
useAdaptiveSelfIllumination = "0";
useCustomAmbientLighting = "0";
customAmbientSelfIllumination = "0";
customAmbientLighting = "0 0 0 1";
useLightingOcclusion = "1";
};
new FileObject() {
canSaveDynamicFields = "1";
};
new StaticShape() {
canSaveDynamicFields = "1";
position = "-565.244 -112.255 10.162";
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = "gray32";
receiveSunLight = "1";
receiveLMLighting = "1";
useAdaptiveSelfIllumination = "0";
useCustomAmbientLighting = "0";
customAmbientSelfIllumination = "0";
customAmbientLighting = "0 0 0 1";
useLightingOcclusion = "1";
};
new StaticShape() {
canSaveDynamicFields = "1";
position = "-181.244 -608.255 9.962";
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = "gray32";
receiveSunLight = "1";
receiveLMLighting = "1";
useAdaptiveSelfIllumination = "0";
useCustomAmbientLighting = "0";
customAmbientSelfIllumination = "0";
customAmbientLighting = "0 0 0 1";
useLightingOcclusion = "1";
};
new StaticShape() {
canSaveDynamicFields = "1";
position = "842.756 -640.255 14.362";
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = "gray32";
receiveSunLight = "1";
receiveLMLighting = "1";
useAdaptiveSelfIllumination = "0";
useCustomAmbientLighting = "0";
customAmbientSelfIllumination = "0";
customAmbientLighting = "0 0 0 1";
useLightingOcclusion = "1";
};
};
//--- OBJECT WRITE END ---
This should be changed as follows
Code:
//--- OBJECT WRITE BEGIN ---
new SimGroup(MissionGroup) {
canSaveDynamicFields = "1";
cdTrack = "2";
musicTrack = "lush";
CTF_scoreLimit = "5";
new ScriptObject(MissionInfo) {
preview = "mods/forceislands2/data/missions/previews/ForceIslands2.png";
name = "BL-Force Islands 2";
desc0 = "Come and build on these wonderful islands. Map by 5Force";
desclines = "2";
};
new MissionArea(MissionArea) {
canSaveDynamicFields = "1";
Area = "-360 -648 720 1296";
flightCeiling = "300";
flightCeilingRange = "20";
locked = "true";
};
new Sky(Sky) {
canSaveDynamicFields = "1";
position = "336 136 0";
rotation = "1 0 0 0";
scale = "1 1 1";
materialList = "core/data/skies/Sky_Blue2/resource.dml";
cloudHeightPer[0] = "0.349971";
cloudHeightPer[1] = "0.3";
cloudHeightPer[2] = "0.199973";
cloudSpeed1 = "0.0005";
cloudSpeed2 = "0.001";
cloudSpeed3 = "0.0003";
visibleDistance = "2000";
fogDistance = "350";
fogColor = "0.5 0.5 0.6 1";
fogStorm1 = "0";
fogStorm2 = "0";
fogStorm3 = "0";
fogVolume1 = "0 0 0";
fogVolume2 = "0 0 0";
fogVolume3 = "0 0 0";
fogVolumeColor1 = "128 128 128 -2.22768e+038";
fogVolumeColor2 = "128 128 128 0";
fogVolumeColor3 = "128 128 128 -1.70699e+038";
windVelocity = "-2.3 0.5 0";
windEffectPrecipitation = "1";
SkySolidColor = "0.9 0.8 0.6 1";
useSkyTextures = "1";
renderBottomTexture = "0";
noRenderBans = "0";
locked = "true";
};
new Sun(sunlight) {
canSaveDynamicFields = "1";
azimuth = "0";
elevation = "35";
color = "0.45 0.45 0.45 1";
ambient = "0.15 0.15 0.15 1";
CastsShadows = "1";
position = "0 0 0";
rotation = "0 0 1 0";
scale = "1 1 1";
locked = "true";
direction = "0.483304 0.262845 -0.76855";
};
new SimGroup(PlayerDropPoints) {
canSaveDynamicFields = "1";
new SpawnSphere(Drop1) {
canSaveDynamicFields = "1";
position = "-4.74673 326.024 19.9";
rotation = "0 0 1 179.909";
scale = "0.940827 1.97505 1";
dataBlock = "SpawnSphereMarker";
radius = "10";
sphereWeight = "1";
indoorWeight = "1";
outdoorWeight = "1";
locked = "False";
homingCount = "0";
lockCount = "0";
};
};
new TerrainBlock(Terrain) {
canSaveDynamicFields = "1";
rotation = "1 0 0 0";
scale = "1 1 1";
detailTexture = "core/data/terrains/details/detail1";
terrainFile = "mods/forceislands2/data/terrains/BL-ForceIslands2.ter";
squareSize = "8";
bumpScale = "1";
bumpOffset = "0.01";
zeroBumpScale = "8";
tile = "1";
position = "-1024 -1024 0";
locked = "true";
};
new fxSunLight(sunlight) {
canSaveDynamicFields = "1";
position = "-0.140032 -14.612 129.561";
rotation = "0 0 1 30";
scale = "1 1 1";
Enable = "1";
LocalFlareBitmap = "core/common/lighting/corona";
RemoteFlareBitmap = "core/common/lighting/corona";
SunAzimuth = "0";
SunElevation = "25";
LockToRealSun = "1";
FlareTP = "1";
Colour = "0.5 0.5 0.5 1";
Brightness = "0.5";
FlareSize = "1";
FadeTime = "0.1";
BlendMode = "0";
AnimColour = "1";
AnimBrightness = "0";
AnimRotation = "1";
AnimSize = "0";
AnimAzimuth = "1";
AnimElevation = "0";
LerpColour = "1";
LerpBrightness = "1";
LerpRotation = "1";
LerpSize = "1";
LerpAzimuth = "1";
LerpElevation = "1";
LinkFlareSize = "0";
SingleColourKeys = "1";
MinColour = "0 0 0 1";
MaxColour = "1 1 1 1";
MinBrightness = "0";
MaxBrightness = "1";
MinRotation = "0";
MaxRotation = "359";
minSize = "0.5";
MaxSize = "1";
MinAzimuth = "250";
MaxAzimuth = "250";
MinElevation = "-30";
MaxElevation = "210";
RedKeys = "AZA";
GreenKeys = "AZA";
BlueKeys = "AZA";
BrightnessKeys = "AZA";
RotationKeys = "AZA";
SizeKeys = "AZA";
AzimuthKeys = "AZ";
ElevationKeys = "AZ";
ColourTime = "60";
BrightnessTime = "60";
RotationTime = "60";
SizeTime = "60";
AzimuthTime = "5";
ElevationTime = "5";
};
new StaticShape() {
canSaveDynamicFields = "1";
position = "-37.2438 319.745 9.962";
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = "gray32";
receiveSunLight = "1";
receiveLMLighting = "1";
useAdaptiveSelfIllumination = "0";
useCustomAmbientLighting = "0";
customAmbientSelfIllumination = "0";
customAmbientLighting = "0 0 0 1";
useLightingOcclusion = "1";
};
new WaterBlock() {
canSaveDynamicFields = "1";
position = "-64 272 -41.5";
rotation = "1 0 0 0";
scale = "1 1 50";
UseDepthMask = "1";
surfaceTexture = "core/data/water/water";
ShoreTexture = "core/data/water/water";
envMapOverTexture = "core/data/water/water";
envMapUnderTexture = "core/data/water/water";
submergeTexture[0] = "core/data/water/water";
submergeTexture[1] = "core/data/water/water";
specularMaskTex = "core/data/water/water";
liquidType = "OceanWater";
density = "5";
viscosity = "15";
waveMagnitude = "3";
surfaceOpacity = "0.75";
envMapIntensity = "0.4";
TessSurface = "50";
TessShore = "60";
SurfaceParallax = "0.5";
FlowAngle = "0";
FlowRate = "0.015";
DistortGridScale = "0.1";
DistortMag = "0.05";
DistortTime = "0.5";
ShoreDepth = "20";
DepthGradient = "1";
MinAlpha = "0.03";
MaxAlpha = "1";
tile = "1";
removeWetEdges = "0";
specularColor = "1 1 1 1";
specularPower = "6";
envMapTexture = "core/data/skies/sunset_0007";
textureSize = "32 32";
params2 = "0.39 0.39 0.2 0.133";
floodFill = "1";
Extent = "100 100 10";
seedPoints = "0 0 1 0 1 1 0 1";
params0 = "0.32 -0.67 0.066 0.5";
params3 = "1.21 -0.61 0.13 -0.33";
params1 = "0.63 -2.41 0.33 0.21";
};
new FileObject() {
canSaveDynamicFields = "1";
};
new StaticShape() {
canSaveDynamicFields = "1";
position = "442.756 767.745 21.362";
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = "gray32";
receiveSunLight = "1";
receiveLMLighting = "1";
useAdaptiveSelfIllumination = "0";
useCustomAmbientLighting = "0";
customAmbientSelfIllumination = "0";
customAmbientLighting = "0 0 0 1";
useLightingOcclusion = "1";
};
new StaticShape() {
canSaveDynamicFields = "1";
position = "474.756 623.745 9.962";
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = "gray32";
receiveSunLight = "1";
receiveLMLighting = "1";
useAdaptiveSelfIllumination = "0";
useCustomAmbientLighting = "0";
customAmbientSelfIllumination = "0";
customAmbientLighting = "0 0 0 1";
useLightingOcclusion = "1";
};
new StaticShape() {
canSaveDynamicFields = "1";
position = "-581.244 335.745 9.962";
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = "gray32";
receiveSunLight = "1";
receiveLMLighting = "1";
useAdaptiveSelfIllumination = "0";
useCustomAmbientLighting = "0";
customAmbientSelfIllumination = "0";
customAmbientLighting = "0 0 0 1";
useLightingOcclusion = "1";
};
new FileObject() {
canSaveDynamicFields = "1";
};
new StaticShape() {
canSaveDynamicFields = "1";
position = "-565.244 -112.255 10.162";
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = "gray32";
receiveSunLight = "1";
receiveLMLighting = "1";
useAdaptiveSelfIllumination = "0";
useCustomAmbientLighting = "0";
customAmbientSelfIllumination = "0";
customAmbientLighting = "0 0 0 1";
useLightingOcclusion = "1";
};
new StaticShape() {
canSaveDynamicFields = "1";
position = "-181.244 -608.255 9.962";
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = "gray32";
receiveSunLight = "1";
receiveLMLighting = "1";
useAdaptiveSelfIllumination = "0";
useCustomAmbientLighting = "0";
customAmbientSelfIllumination = "0";
customAmbientLighting = "0 0 0 1";
useLightingOcclusion = "1";
};
new StaticShape() {
canSaveDynamicFields = "1";
position = "842.756 -640.255 14.362";
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = "gray32";
receiveSunLight = "1";
receiveLMLighting = "1";
useAdaptiveSelfIllumination = "0";
useCustomAmbientLighting = "0";
customAmbientSelfIllumination = "0";
customAmbientLighting = "0 0 0 1";
useLightingOcclusion = "1";
};
};
//--- OBJECT WRITE END ---