------------------------------------------------------------------------------------------------------------ Hover Pack Tutorial ------------------------------------------------------------------------------------------------------------ This tutorial creates a new pack that suspends people in air as if they were hovering. Since it's impossible to stop gravity in Tribes2 and I don't like bouncing up and down by using impulses, I accomplished this by creating a real small cloaked static object that sits below the person to hold them up and then suspended movement of the person when they use the pack. Step #1 // ------------------------------------------ // inventoryHud.cs // ------------------------------------------ $InvPack[17] = "Hover Pack"; $NTInvPack[12] = "Hover Pack"; $NameToInv["Hover Pack"] = "HoverPack"; Step #2 // ------------------------------------------ // Pack.cs // ------------------------------------------ exec("scripts/packs/HoverPack.cs"); Step #3 // ------------------------------------------ // Player.cs // ------------------------------------------ 4a) Add this to each of the datablocks, recommended for all armor sizes like most packs. max[HoverPack] = 1; Step #4 // ------------------------------------------ // HoverPack.cs // ------------------------------------------ Create a new files called HoverPack.cs in your packs directory. Add all this into it. // ------------------------------------------------------------------ // Hover PACK // can be used by any armor type // Allows Armors to sit stationary in the air // ------------------------------------------------------------------ datablock ShapeBaseImageData(HoverPackImage) { shapeFile = "pack_upgrade_sensorjammer.dts"; item = HoverPack; mountPoint = 1; offset = "0 0 0"; usesEnergy = true; minEnergy = 3; stateName[0] = "Idle"; stateTransitionOnTriggerDown[0] = "Activate"; stateName[1] = "Activate"; stateScript[1] = "onActivate"; stateTransitionOnTriggerUp[1] = "Deactivate"; stateName[2] = "Deactivate"; stateScript[2] = "onDeactivate"; stateTransitionOnTimeout[2] = "Idle"; stateTimeoutValue[2] = 0.5; }; datablock ItemData(HoverPack) { className = Pack; catagory = "Packs"; shapeFile = "pack_upgrade_sensorjammer.dts"; mass = 1; elasticity = 0.2; friction = 0.6; pickupRadius = 2; rotate = true; image = "HoverPackImage"; pickUpName = "a hover pack"; computeCRC = true; }; datablock StaticShapeData(PlayerPlatform) : StaticShapeDamageProfile { shapeFile = "Pmiscf.dts"; isInvincible = true; }; function HoverPackImage::onMount(%data, %obj, %node) { %obj.platform = new StaticShape() { dataBlock = PlayerPlatform; Position = "0 0 -1000"; Scale = "0.05 0.05 0.05"; }; %obj.platform.setCloaked(true); %obj.platform.setTransform("0 0 -1000 0 0 0 1"); %obj.platform.team = 0; if(%obj.platform.getTarget() != -1) setTargetSensorGroup(%obj.platform.getTarget(), %obj.team); MissionCleanup.add(%obj.platform); } function HoverPackImage::onUnmount(%data, %obj, %node) { %obj.setMoveState(false); if (isObject(%obj.platform)) %obj.platform.schedule(100, "delete"); } function HoverPack::onPickup(%this, %obj, %shape, %amount) { // created to prevent console errors } function HoverPackImage::onActivate(%data, %obj, %slot) { %obj.client.player.setVelocity("0 0 5"); %obj.setMoveState(true); %xy = getWords(%obj.getTransform(), 0, 1); %z = getWord(%obj.getTransform(), 2); %obj.platform.setTransform(%xy SPC %z - 5 SPC "0 0 0 1"); } function HoverPackImage::onDeactivate(%data, %obj, %slot) { %obj.setMoveState(false); if (isObject(%obj.platform)) %obj.platform.setTransform("0 0 -1000 0 0 0 1"); }