Blast Wall Tut Notes: This will cover making deployables and seeting the rotation of objects. Skip the last step and name it a platform if you want a platform. Step #1 To begin we will need to make the blastwall.cs file under packs, I really dont wanna just give you the code for it, but there isnt really anything else that you can just start from. so here is the code for blastwall.cs //--------------------------------------------------------- // Deployable wall, Code by Parousia //--------------------------------------------------------- datablock StaticShapeData(Deployedwall) : StaticShapeDamageProfile { className = Wall; shapeFile = "Pmiscf.dts"; // dmiscf.dts, alternate maxDamage = 2.5; destroyedLevel = 2.5; disabledLevel = 2.3; explosion = DeployablesExplosion; dynamicType = $TypeMasks::StaticShapeObjectType; deployedObject = true; cmdCategory = "DSupport"; cmdIcon = CMDSensorIcon; cmdMiniIconName = "commander/MiniIcons/com_deploymotionsensor"; targetNameTag = 'Blast Wall'; deployAmbientThread = true; debrisShapeName = "debris_generic_small.dts"; debris = DeployableDebris; heatSignature = 0; }; datablock ShapeBaseImageData(wallDeployableImage) { mass = 20; emap = true; shapeFile = "Stackable1s.dts"; item = wallDeployable; mountPoint = 1; offset = "0 0 0"; deployed = Deployedwall; heatSignature = 0; stateName[0] = "Idle"; stateTransitionOnTriggerDown[0] = "Activate"; stateName[1] = "Activate"; stateScript[1] = "onActivate"; stateTransitionOnTriggerUp[1] = "Idle"; isLarge = true; maxDepSlope = 360; // 30 deploySound = ItemPickupSound; minDeployDis = 0.5; maxDeployDis = 5.0; }; datablock ItemData(wallDeployable) { className = Pack; catagory = "Deployables"; shapeFile = "Stackable1s.dts"; mass = 5.0; elasticity = 0.2; friction = 0.6; pickupRadius = 1; rotate = true; image = "wallDeployableImage"; pickUpName = "a blast wall"; heatSignature = 0; emap = true; }; function wallDeployableImage::testObjectTooClose(%item) { %mask = $TypeMasks::PlayerObjectType; %pos = %item.surfacePt; return !ContainerBoxEmpty (%mask, %pos, $MinDeployableDistance); } function wallDeployableImage::testNoTerrainFound(%item) { //don't check this for non-Landspike turret deployables } function wallDeployable::onPickup(%this, %obj, %shape, %amount) { // created to prevent console errors } function Deployedwall::onDestroyed(%this, %obj, %prevState) { Parent::onDestroyed(%this, %obj, %prevState); $TeamDeployedCount[%obj.team, wallDeployable]--; %obj.schedule(500, "delete"); } Thats the code, its pretty normal. Most deployables need three datablocks, one for the item, one for the image, and one for the deployed object Step #2. in inventoryhud.cs find the $InvPack and $NTInvPack arrays, then add the blast wall to each of them(only add it to $NTInvPack array if you want people to be able to use it on non team games) This is simple to do, but for those of you that dont know what to do here is the code: $InvPack[20] = "Blast Wall"; $NTInvPack[12] = "Blast Wall"; now those numbers depend on how many packs are already there, so set it to the next availible number for each one. Also in inventoryhud.cs add the blastwall to the $NameToInv array, like so: $NameToInv["Blast Wall"] = "WallDeployable"; Step #3. now open up Hud.cs and find the $BackpackHudData array, then add the blast wall to it like so: $BackpackHudData[21, itemDataName] = "WallDeployable"; $BackpackHudData[21, bitmapName] = "gui/hud_new_packinventory"; Again, those numbers will vary, also dont forget to increase the.... Step #4. Now we need to set the team count for blast walls to 0 every time there is a new game, so open defaultgame.cs and find the clearDeployableMaxes function, then add the blast wall like so: $TeamDeployedCount[%i, WallDeployable] = 0; Step #5. Now open player.cs and add the blastwall to the max inventory for each male human armor, for each armor you want to have it use this: max[WallDeployable] = 1; if you dont want the armor to have it, use this: max[WallDeployable] = 0; Step #6. now open deployables.cs find the $TeamDeployableMax array and add the blastwall to it like so: $TeamDeployableMax[WallDeployable] = 20; then at the very bottom add the exec line for the blast wall: exec("scripts/packs/BlastWall.cs"); Step #7. Now we rotate the blastwall so its not flat like a platform, still in deployables.cs look for // set orientation You should find something like this. if(%className $= "Turret") %deplObj.setDeployRotation(%item.surfacePt, %item.surfaceNrm); else %deplObj.setTransform(%item.surfacePt SPC %rot); Replace it with this: if(%className $= "Turret") %deplObj.setDeployRotation(%item.surfacePt, %item.surfaceNrm); else if (%item.deployed.classname $= "Wall") { // %item.deployed.classname refers to the static //shape data, in deployables, //or the deployedwall datablock in blastwall.cs %d2 = -1 * (getWord(%rot, 3) * getWord(%rot, 2)); %d2 += 1.57; %rot = "0 1.57 " @ %d2; //this is where you set the //rotation, it goes x, y, z, its in // radians so 1.57 is 90 degrees. %mat = MatrixCreateFromEuler(%rot); %deplObj.setTransform(VectorAdd(%item.surfacePt, "0 0 2") SPC getWord(%mat, 3) SPC getWord(%mat, 4) SPC GetWord(%mat, 5) SPC getWord(%mat, 6)); } else %deplObj.setTransform(%item.surfacePt SPC %rot); And thats your blast wall!!! Some credit to Jimomighty for telling me how to rotate objects in the first place.