diff --git a/Base.rte/AI/CrabBehaviors.lua b/Base.rte/AI/CrabBehaviors.lua index 6b6fc7553..ce02c404a 100644 --- a/Base.rte/AI/CrabBehaviors.lua +++ b/Base.rte/AI/CrabBehaviors.lua @@ -89,8 +89,9 @@ end function CrabBehaviors.Sentry(AI, Owner, Abort) local sweepUp = true local sweepDone = false - local maxAng = Owner.AimRange - local minAng = -maxAng + -- to-do: refer to upper/lower limits! + local maxAng = Owner.AimRange--Owner.AimRangeUpperLimit + local minAng = -maxAng--Owner.AimRangeLowerLimit local aim if AI.OldTargetPos then -- try to reacquire an old target diff --git a/Base.rte/AI/DropShipAI.lua b/Base.rte/AI/DropShipAI.lua index d16171c91..370e92689 100644 --- a/Base.rte/AI/DropShipAI.lua +++ b/Base.rte/AI/DropShipAI.lua @@ -9,14 +9,4 @@ end function UpdateAI(self) self.AI:Update(self) -end - -function Update(self) - --Re-orient the craft at 180 degrees to help rotational AI - if self.RotAngle > math.pi then - self.RotAngle = self.RotAngle - (math.pi * 2); - end - if self.RotAngle < -math.pi then - self.RotAngle = self.RotAngle + (math.pi * 2); - end end \ No newline at end of file diff --git a/Base.rte/AI/HumanBehaviors.lua b/Base.rte/AI/HumanBehaviors.lua index 5e67c75ea..9c424dadc 100644 --- a/Base.rte/AI/HumanBehaviors.lua +++ b/Base.rte/AI/HumanBehaviors.lua @@ -154,6 +154,8 @@ function HumanBehaviors.CalculateThreatLevel(MO, Owner) else priority = priority + 0.3 end + elseif MO.ClassName == "ADoor" then + priority = priority * 0.5 end return priority - MO.Health / 500 -- prioritize damaged targets @@ -2113,10 +2115,12 @@ function HumanBehaviors.GoProne(AI, Owner, TargetPos, targetID) end AI.proneState = AHuman.PRONE - if Dist.X > 0 then - AI.lateralMoveState = Actor.LAT_RIGHT - else - AI.lateralMoveState = Actor.LAT_LEFT + if not Owner.EquippedBGItem then + if Dist.X > 0 then + AI.lateralMoveState = Actor.LAT_RIGHT + else + AI.lateralMoveState = Actor.LAT_LEFT + end end return true @@ -2124,12 +2128,16 @@ end -- get the projectile properties from the magazine function HumanBehaviors.GetProjectileData(Owner) - local Weapon = ToHDFirearm(Owner.EquippedItem) - local Round = Weapon.Magazine.NextRound - local Projectile = Round.NextParticle - local PrjDat = {MagazineName=Weapon.Magazine.PresetName} - - if Round.IsEmpty then -- set default values if there is no particle + local Weapon, Round, Projectile, PrjDat + if Owner.EquippedItem and IsHDFirearm(Owner.EquippedItem) then + Weapon = ToHDFirearm(Owner.EquippedItem) + if Weapon.Magazine then + Round = Weapon.Magazine.NextRound + Projectile = Round.NextParticle + PrjDat = {MagazineName=Weapon.Magazine.PresetName} + end + end + if Round == nil or Round.IsEmpty then -- set default values if there is no particle PrjDat.g = 0 PrjDat.vel = 100 PrjDat.rng = math.huge @@ -2533,6 +2541,10 @@ function HumanBehaviors.ShootTarget(AI, Owner, Abort) if Owner.EquippedItem and ToHeldDevice(Owner.EquippedItem):IsReloading() then ShootTimer:Reset() AI.Ctrl.AnalogAim = SceneMan:ShortestDistance(Owner.Pos, AI.Target.Pos, false).Normalized + if AI.lateralMoveState == Actor.LAT_STILL then + AI.proneState = AHuman.PRONE + --AI.Ctrl:SetState(Controller.BODY_CROUCH, true) + end elseif Owner:EquipFirearm(true) then local _ai, _ownr, _abrt = coroutine.yield() -- wait until next frame, just in case the magazine is replenished by another script if _abrt then return true end @@ -2828,7 +2840,7 @@ function HumanBehaviors.AttackTarget(AI, Owner, Abort) local startPos = Vector(Owner.EyePos.X, Owner.EyePos.Y) if Owner:EquipDeviceInGroup("Tools - Diggers", true) or Owner:EquipDeviceInGroup("Weapons - Melee", true) then - meleeDist = Owner.Radius + 25 + meleeDist = Owner.IndividualRadius + 25 startPos = Vector(Owner.EquippedItem.Pos.X, Owner.EquippedItem.Pos.Y) elseif Owner.armSway then local arm = Owner.FGArm or Owner.BGArm diff --git a/Base.rte/AI/HumanFunctions.lua b/Base.rte/AI/HumanFunctions.lua index b2e5c5984..8381ddc2e 100644 --- a/Base.rte/AI/HumanFunctions.lua +++ b/Base.rte/AI/HumanFunctions.lua @@ -3,10 +3,11 @@ HumanFunctions = {}; function HumanFunctions.DoAlternativeGib(actor) --Detach limbs instead of regular gibbing if actor.detachWoundLimit or actor.detachImpulseLimit then - if actor.detachWoundLimit and actor.WoundCount > actor.detachWoundLimit then - actor.detachWoundLimit = actor.WoundCount + 1; + local torsoWoundCount = actor:GetWoundCount(false, false, false); + if actor.detachWoundLimit and torsoWoundCount > actor.detachWoundLimit then + actor.detachWoundLimit = torsoWoundCount + 1; - local parts = {actor.BGArm, actor.BGLeg, actor.FGArm, actor.FGLeg, actor.Head}; --Priority order + local parts = {actor.BGArm, actor.BGLeg, actor.FGLeg, actor.Head}; --Priority order (Never detach FG Arm) local mostWounds, detachLimb; --Pick the limb with most wounds and detach it for _, limb in pairs(parts) do @@ -16,12 +17,12 @@ function HumanFunctions.DoAlternativeGib(actor) end end if detachLimb then - detachLimb.JointStrength = -1; + actor:RemoveAttachable(detachLimb, true, true); end end - if actor.detachImpulseLimit and actor.TravelImpulse.Magnitude > actor.detachImpulseLimit then - local parts = {actor.BGLeg, actor.BGArm, actor.FGLeg, actor.FGArm, actor.Head}; --Priority order - local impulsePoint = actor.Pos - actor.TravelImpulse/(actor.Mass == 0 and 0.0001 or actor.Mass); + if actor.detachImpulseLimit and actor.TravelImpulse.Magnitude > actor.detachImpulseLimit and actor.Mass > 0 then + local parts = {actor.BGLeg, actor.BGArm, actor.FGLeg, actor.Head}; --Priority order (Never detach FG Arm) + local impulsePoint = actor.Pos - actor.TravelImpulse/actor.Mass; local closestDist, detachLimb; --Pick the limb closest to the direction of impulse for _, limb in pairs(parts) do @@ -34,10 +35,10 @@ function HumanFunctions.DoAlternativeGib(actor) end end end - if detachLimb then - local limbImpulse = actor.TravelImpulse.Magnitude/(detachLimb.Mass == 0 and 0.0001 or detachLimb.Mass); + if detachLimb and detachLimb.Mass > 0 then + local limbImpulse = actor.TravelImpulse.Magnitude/detachLimb.Mass; if limbImpulse > detachLimb.JointStrength then - detachLimb.JointStrength = -1; + actor:RemoveAttachable(detachLimb, true, true); if math.random() * limbImpulse > detachLimb.GibImpulseLimit then detachLimb:GibThis(); end @@ -57,124 +58,139 @@ function HumanFunctions.DoAlternativeGib(actor) end function HumanFunctions.DoAutomaticEquip(actor) - --Equip a weapon automatically if the one held by a player is destroyed - if actor:IsPlayerControlled() and actor.EquippedItem == nil and actor.InventorySize > 0 and not actor.controller:IsState(Controller.WEAPON_FIRE) then + --Equip a weapon automatically if the one held by a player is destroyed (To-do: move this to cpp?) + if actor.EquippedItem == nil and not actor.controller:IsState(Controller.WEAPON_FIRE) and (actor:IsPlayerControlled() or actor:UnequipBGArm()) then actor:EquipFirearm(true); end end function HumanFunctions.DoArmSway(actor, pushStrength) - --Control arm movements local aimAngle = actor:GetAimAngle(false); - if not actor.lastHandPos then --Initialize - actor.lastAngle = aimAngle; - actor.lastHandPos = {actor.Pos, actor.Pos}; + if actor.weight then + actor:RemoveAttachable(actor.weight); + actor.weight = nil; end - --Flail around if aiming around too fast - local angleMovement = actor.lastAngle - aimAngle; - actor.AngularVel = actor.AngularVel - (2 * angleMovement * actor.FlipFactor)/(math.abs(actor.AngularVel) * 0.1 + 1); - actor.lastAngle = aimAngle; - --Shove when unarmed - if actor:IsInventoryEmpty() and actor.controller:IsState(Controller.WEAPON_FIRE) and (actor.FGArm or actor.BGArm) and not (actor.EquippedItem or actor.EquippedBGItem) and actor.Status == Actor.STABLE then - actor.AngularVel = actor.AngularVel/(actor.shoved and 1.3 or 3) + (aimAngle - actor.RotAngle * actor.FlipFactor - 1.57) * (actor.shoved and 0.3 or 3) * actor.FlipFactor/(1 + math.abs(actor.RotAngle)); - if not actor.shoved then - actor.Vel = actor.Vel + Vector(2/(1 + actor.Vel.Magnitude), 0):RadRotate(actor:GetAimAngle(true)) * math.abs(math.cos(actor:GetAimAngle(true))); - actor.shoved = true; + if actor.Status == Actor.STABLE and actor.lastHandPos then + --Unequip weapons by pressing both weapon switch keys at once + if actor.controller:IsState(Controller.WEAPON_CHANGE_NEXT) and actor.controller:IsState(Controller.WEAPON_CHANGE_PREV) then + local item = CreateHeldDevice("Null Item"); + actor:AddInventoryItem(item); + actor:EquipNamedDevice("Null Item", true); + item.ToDelete = true; end - else - actor.shoved = false; - end - local armPairs = {{actor.FGArm, actor.FGLeg, actor.BGLeg}, {actor.BGArm, actor.BGLeg, actor.FGLeg}}; - for i = 1, #armPairs do - local arm = armPairs[i][1]; - if arm then - arm = ToArm(arm); - - local armLength = ToMOSprite(arm):GetSpriteWidth(); - local rotAng = actor.RotAngle - (1.57 * actor.FlipFactor); - local legMain = armPairs[i][2]; - local legAlt = armPairs[i][3]; - - if actor.controller:IsState(Controller.MOVE_LEFT) or actor.controller:IsState(Controller.MOVE_RIGHT) then - rotAng = (legAlt and legAlt.RotAngle) or (legMain and (-legMain.RotAngle + math.pi) or rotAng); - elseif legMain then - rotAng = legMain.RotAngle; - end - --Flail arms in tandem with leg movement or raise them them up for a push if aiming - if actor.controller:IsState(Controller.AIM_SHARP) then - arm.IdleOffset = Vector(0, 1):RadRotate(aimAngle); - else - arm.IdleOffset = Vector(0, (armLength + arm.SpriteOffset.X) * 1.1):RadRotate(rotAng * actor.FlipFactor + 1.5 + (i * 0.2)); + --Control arm movements + --Flail around if aiming around too fast + local angleMovement = actor.lastAngle - aimAngle; + actor.AngularVel = actor.AngularVel - (2 * angleMovement * actor.FlipFactor)/(math.abs(actor.AngularVel) * 0.1 + 1); + --Shove when unarmed + if actor.controller:IsState(Controller.WEAPON_FIRE) and (actor.FGArm or actor.BGArm) and not (actor.EquippedItem or actor.EquippedBGItem) then + actor.AngularVel = actor.AngularVel/(actor.shoved and 1.3 or 3) + (aimAngle - actor.RotAngle * actor.FlipFactor - 1.57) * (actor.shoved and 0.3 or 3) * actor.FlipFactor/(1 + math.abs(actor.RotAngle)); + if not actor.shoved then + actor.Vel = actor.Vel + Vector(2/(1 + actor.Vel.Magnitude), 0):RadRotate(actor:GetAimAngle(true)) * math.abs(math.cos(actor:GetAimAngle(true))); + actor.shoved = true; end - if actor.shoved or (actor.EquippedItem and IsTDExplosive(actor.EquippedItem) and actor.controller:IsState(Controller.WEAPON_FIRE)) then - arm.IdleOffset = Vector(armLength + (pushStrength * armLength), 0):RadRotate(aimAngle); - local handVector = SceneMan:ShortestDistance(actor.lastHandPos[i], arm.HandPos, SceneMan.SceneWrapsX); - --Diminish hand relocation vector to potentially prevent post-superhuman pushing powers - handVector:SetMagnitude(handVector.Magnitude/(1 + handVector.Magnitude * 0.01)); - --Emphasize the first frames that signify contracted arm = highest potential energy - local dots = math.sqrt(arm.Radius)/(1 + arm.Frame/arm.FrameCount); - local armStrength = (arm.Mass + arm.Material.StructuralIntegrity) * pushStrength; - for i = 1, dots do - local part = CreateMOPixel("Smack Particle Light"); - part.Pos = arm.HandPos - Vector(handVector.X * 0.5, handVector.Y * 0.5); - part.Vel = Vector(handVector.X, handVector.Y):RadRotate(RangeRand(-0.1, 0.1)) + Vector(0, -0.5); - part.Mass = armStrength; part.Sharpness = math.random() * 0.1; - part.Team = actor.Team; part.IgnoresTeamHits = true; - MovableMan:AddParticle(part); + else + actor.shoved = false; + end + local shove = {}; + local armPairs = {{actor.FGArm, actor.FGLeg, actor.BGLeg}, {actor.BGArm, actor.BGLeg, actor.FGLeg}}; + for i = 1, #armPairs do + local arm = armPairs[i][1]; + if arm then + arm = ToArm(arm); + + local armLength = ToMOSprite(arm):GetSpriteWidth(); + local rotAng = actor.RotAngle - (1.57 * actor.FlipFactor); + local legMain = armPairs[i][2]; + local legAlt = armPairs[i][3]; + + if actor.controller:IsState(Controller.MOVE_LEFT) or actor.controller:IsState(Controller.MOVE_RIGHT) then + rotAng = (legAlt and legAlt.RotAngle) or (legMain and (-legMain.RotAngle + math.pi) or rotAng); + elseif legMain then + rotAng = legMain.RotAngle; + end + --Flail arms in tandem with leg movement or raise them them up for a push if aiming + if actor.controller:IsState(Controller.AIM_SHARP) then + arm.IdleOffset = Vector(0, 1):RadRotate(aimAngle); + else + arm.IdleOffset = Vector(0, (armLength + arm.SpriteOffset.X) * 1.1):RadRotate(rotAng * actor.FlipFactor + 1.5 + (i * 0.2)); end - --Apply some additional forces if the travel vector of the moving hand is half an arms length - if handVector.Magnitude > (armLength * 0.5) then - local moCheck = SceneMan:GetMOIDPixel(arm.HandPos.X, arm.HandPos.Y) - if moCheck ~= rte.NoMOID then - local mo = MovableMan:GetMOFromID(MovableMan:GetMOFromID(moCheck).RootID); - if mo and mo.Team ~= actor.Team and IsActor(mo) and actor.Mass > (mo.Mass * 0.5) then - mo:AddForce(handVector * (actor.Mass * 0.5), Vector()); - ToActor(mo).Status = Actor.UNSTABLE; + if actor.shoved or (actor.EquippedItem and IsTDExplosive(actor.EquippedItem) and actor.controller:IsState(Controller.WEAPON_FIRE)) then + arm.IdleOffset = Vector(armLength + (pushStrength * armLength), 0):RadRotate(aimAngle); + local handVector = SceneMan:ShortestDistance(actor.lastHandPos[i], arm.HandPos, SceneMan.SceneWrapsX); + --Diminish hand relocation vector to prevent superhuman pushing powers + handVector:SetMagnitude(math.min(handVector.Magnitude, 1 + armLength * 0.1)); + local armStrength = (arm.Mass + arm.Material.StructuralIntegrity * 0.5) * pushStrength; + + shove.Pos = shove.Pos and shove.Pos + SceneMan:ShortestDistance(shove.Pos, arm.HandPos, SceneMan.SceneWrapsX) * 0.5 or arm.HandPos; + shove.Power = shove.Power and shove.Power + armStrength or armStrength; + shove.Vector = shove.Vector and shove.Vector + handVector * 0.5 or handVector * 0.5; + end + actor.lastHandPos[i] = arm.HandPos; + end + end + if shove.Pos then + --local moCheck = SceneMan:GetMOIDPixel(shove.Pos.X + actor.FlipFactor, shove.Pos.Y - 1); + local moCheck = SceneMan:CastMORay(shove.Pos, shove.Vector, actor.ID, actor.Team, rte.airID, false, shove.Vector.Magnitude - 1); + if moCheck ~= rte.NoMOID then + local mo = MovableMan:GetMOFromID(MovableMan:GetMOFromID(moCheck).RootID); + if mo and mo.Team ~= actor.Team and IsActor(mo) then + if actor.Mass > mo.Mass then + ToActor(mo).Status = Actor.UNSTABLE; + --Simulate target actor weight with an attachable + if not actor.weight then + actor.weight = CreateAttachable("Null Attachable"); + actor.weight.Mass = mo.Mass; + actor:AddAttachable(actor.weight); end + local shoveVel = shove.Vector/rte.PxTravelledPerFrame; + mo.Vel = mo.Vel * 0.5 + shoveVel:SetMagnitude(math.min(shoveVel.Magnitude, math.sqrt(actor.IndividualDiameter))) - SceneMan.GlobalAcc * GetMPP() * rte.PxTravelledPerFrame; + mo.AngularVel = (aimAngle - actor.lastAngle) * actor.FlipFactor * math.pi; + else + mo:AddForce(shove.Vector * (actor.Mass * 0.5) * shove.Power, Vector()); end end end - actor.lastHandPos[i] = arm.HandPos; end + actor.lastAngle = aimAngle; + else + actor.lastAngle = aimAngle; + actor.lastHandPos = {actor.Pos, actor.Pos}; end end function HumanFunctions.DoVisibleInventory(actor, showAll) --Visualize inventory with primitive bitmaps - if actor.Status < Actor.DYING and not actor:IsInventoryEmpty() then + if actor.Status < Actor.DYING then local heldCount, thrownCount, largestItem = 0, 0, 0; - for i = 1, actor.InventorySize do - local item = actor:Inventory(); - if item then - if item.ClassName == "TDExplosive" then - thrownCount = thrownCount + 1; - elseif item.ClassName == "HDFirearm" or item.ClassName == "HeldDevice" then - if showAll or item.Diameter + item.Mass > largestItem then - item = ToMOSprite(item); - largestItem = item.Diameter + item.Mass; - heldCount = heldCount + 1; - local itemCount = math.sqrt(heldCount); + for item in actor.Inventory do + if item.ClassName == "TDExplosive" then + thrownCount = thrownCount + 1; + elseif item.ClassName == "HDFirearm" or item.ClassName == "HeldDevice" then + if showAll or item.Diameter + item.Mass > largestItem then + item = ToMOSprite(item); + largestItem = item.Diameter + item.Mass; + heldCount = heldCount + 1; + local itemCount = math.sqrt(heldCount); - local actorBack = Vector(ToMOSprite(actor):GetSpriteWidth() + actor.SpriteOffset.X, ToMOSprite(actor):GetSpriteHeight() + actor.SpriteOffset.Y); - local stackX = item.Radius * 0.2 + itemCount; - --Bigger actors carry weapons higher up, smaller weapons are carried lower down - local drawPos = actor.Pos + Vector((-actorBack.X * 0.5 - stackX) * actor.FlipFactor, -actorBack.Y * 0.75):RadRotate(actor.RotAngle); - --Display tall objects upright - local widthToHeightRatio = item:GetSpriteWidth()/item:GetSpriteHeight(); - local orientation = widthToHeightRatio > 1 and 1.57 * actor.FlipFactor or 0; + local actorBack = Vector(ToMOSprite(actor):GetSpriteWidth() + actor.SpriteOffset.X, ToMOSprite(actor):GetSpriteHeight() + actor.SpriteOffset.Y); + local stackX = item.Radius * 0.2 + itemCount; + --Bigger actors carry weapons higher up, smaller weapons are carried lower down + local drawPos = actor.Pos + Vector((-actorBack.X * 0.5 - stackX) * actor.FlipFactor, -actorBack.Y * 0.75):RadRotate(actor.RotAngle); + --Display tall objects upright + local widthToHeightRatio = item:GetSpriteWidth()/item:GetSpriteHeight(); + local orientation = widthToHeightRatio > 1 and 1.57 * actor.FlipFactor or 0; - local tilt = (itemCount/item.Radius) * widthToHeightRatio * actor.FlipFactor; - local rotAng = actor.RotAngle + orientation + (tilt * 2) - tilt * (itemCount - 1); + local tilt = (itemCount/item.Radius) * widthToHeightRatio * actor.FlipFactor; + local rotAng = actor.RotAngle + orientation + (tilt * 2) - tilt * (itemCount - 1); - for player = Activity.PLAYER_1, Activity.MAXPLAYERCOUNT - 1 do - local screen = ActivityMan:GetActivity():ScreenOfPlayer(player); - if screen ~= -1 and not SceneMan:IsUnseen(drawPos.X, drawPos.Y, ActivityMan:GetActivity():GetTeamOfPlayer(player)) then - PrimitiveMan:DrawBitmapPrimitive(screen, drawPos, item, rotAng, item.Frame, actor.HFlipped, true); - end + for player = Activity.PLAYER_1, Activity.MAXPLAYERCOUNT - 1 do + local screen = ActivityMan:GetActivity():ScreenOfPlayer(player); + if screen ~= -1 and not SceneMan:IsUnseen(drawPos.X, drawPos.Y, ActivityMan:GetActivity():GetTeamOfPlayer(player)) then + PrimitiveMan:DrawBitmapPrimitive(screen, drawPos, item, rotAng, item.Frame, actor.HFlipped, true); end end end - actor:SwapNextInventory(item, true); end end end diff --git a/Base.rte/AI/NativeDropShipAI.lua b/Base.rte/AI/NativeDropShipAI.lua index 3966278b9..34f3a9d6b 100644 --- a/Base.rte/AI/NativeDropShipAI.lua +++ b/Base.rte/AI/NativeDropShipAI.lua @@ -27,7 +27,7 @@ function NativeDropShipAI:Create(Owner) elseif Members.AIMode == Actor.AIMODE_BOMB then Members.hoverAlt = Owner.Radius * 6 else - Members.hoverAlt = Owner.Radius * 2 + Members.hoverAlt = Owner.Radius * 2 end -- The controllers diff --git a/Base.rte/AI/NativeHumanAI.lua b/Base.rte/AI/NativeHumanAI.lua index 6957acbd9..b6f41926c 100644 --- a/Base.rte/AI/NativeHumanAI.lua +++ b/Base.rte/AI/NativeHumanAI.lua @@ -346,67 +346,76 @@ function NativeHumanAI:Update(Owner) end if Leader then - if Leader.EquippedItem and SceneMan:ShortestDistance(Owner.Pos, Leader.Pos, false).Largest < (Leader.Height + Owner.Height) * 0.5 then - - if IsHDFirearm(Leader.EquippedItem) then - - local LeaderWeapon = ToHDFirearm(Leader.EquippedItem) - if LeaderWeapon:IsWeapon() then - local AimDelta = SceneMan:ShortestDistance(Leader.Pos, Leader.ViewPoint, false) - self.Ctrl.AnalogAim = SceneMan:ShortestDistance(Owner.Pos, Leader.ViewPoint+AimDelta, false).Normalized - self.deviceState = AHuman.POINTING - - -- check if the SL is shooting and if we have a similar weapon - if Owner.FirearmIsReady then - self.deviceState = AHuman.AIMING - - if IsHDFirearm(Owner.EquippedItem) and Leader:GetController():IsState(Controller.WEAPON_FIRE) then - local OwnerWeapon = ToHDFirearm(Owner.EquippedItem) - if OwnerWeapon:IsTool() then - -- try equipping a weapon - if Owner.InventorySize > 0 and not Owner:EquipDeviceInGroup("Weapons - Primary", true) then - Owner:EquipFirearm(true) - end - elseif LeaderWeapon:GetAIBlastRadius() >= OwnerWeapon:GetAIBlastRadius() * 0.5 and - OwnerWeapon:CompareTrajectories(LeaderWeapon) < math.max(100, OwnerWeapon:GetAIBlastRadius()) - then - -- slightly displace full-auto shots to diminish stacking sounds and create a more dense fire rate - if OwnerWeapon.FullAuto then - if math.random() < 0.3 then + local dist = SceneMan:ShortestDistance(Owner.Pos, Leader.Pos, false).Largest + local radius = (Leader.Height + Owner.Height) * 0.5 + if dist < radius then + local copyControls = {Controller.MOVE_LEFT, Controller.MOVE_RIGHT, Controller.BODY_JUMPSTART, Controller.BODY_JUMP, Controller.BODY_CROUCH} + for _, control in pairs(copyControls) do + local state = Leader:GetController():IsState(control) + self.Ctrl:SetState(control, state) + end + if Leader.EquippedItem then + + if IsHDFirearm(Leader.EquippedItem) then + + local LeaderWeapon = ToHDFirearm(Leader.EquippedItem) + if LeaderWeapon:IsWeapon() then + local AimDelta = SceneMan:ShortestDistance(Leader.Pos, Leader.ViewPoint, false) + self.Ctrl.AnalogAim = SceneMan:ShortestDistance(Owner.Pos, Leader.ViewPoint + AimDelta, false).Normalized + self.deviceState = AHuman.POINTING + + -- check if the SL is shooting and if we have a similar weapon + if Owner.FirearmIsReady then + self.deviceState = AHuman.AIMING + + if IsHDFirearm(Owner.EquippedItem) and Leader:GetController():IsState(Controller.WEAPON_FIRE) then + local OwnerWeapon = ToHDFirearm(Owner.EquippedItem) + if OwnerWeapon:IsTool() then + -- try equipping a weapon + if Owner.InventorySize > 0 and not Owner:EquipDeviceInGroup("Weapons - Primary", true) then + Owner:EquipFirearm(true) + end + elseif LeaderWeapon:GetAIBlastRadius() >= OwnerWeapon:GetAIBlastRadius() * 0.5 and + OwnerWeapon:CompareTrajectories(LeaderWeapon) < math.max(100, OwnerWeapon:GetAIBlastRadius()) + then + -- slightly displace full-auto shots to diminish stacking sounds and create a more dense fire rate + if OwnerWeapon.FullAuto then + if math.random() < 0.3 then + self.Target = nil + self.squadShoot = true + end + else self.Target = nil self.squadShoot = true end - else - self.Target = nil - self.squadShoot = true end + else + self.squadShoot = false end else - self.squadShoot = false - end - else - if Owner.FirearmIsEmpty then - Owner:ReloadFirearm() - elseif Owner.InventorySize > 0 and not Owner:EquipDeviceInGroup("Weapons - Primary", true) then - Owner:EquipFirearm(true) + if Owner.FirearmIsEmpty then + Owner:ReloadFirearm() + elseif Owner.InventorySize > 0 and not Owner:EquipDeviceInGroup("Weapons - Primary", true) then + Owner:EquipFirearm(true) + end end end - end - elseif IsTDExplosive(Leader.EquippedItem) and Leader:IsPlayerControlled() then - -- throw grenades in unison with squad - if ToTDExplosive(Leader.EquippedItem):HasObjectInGroup("Bombs - Grenades") and Owner:HasObjectInGroup("Bombs - Grenades") then + elseif IsTDExplosive(Leader.EquippedItem) and Leader:IsPlayerControlled() then + -- throw grenades in unison with squad + if ToTDExplosive(Leader.EquippedItem):HasObjectInGroup("Bombs - Grenades") and Owner:HasObjectInGroup("Bombs - Grenades") then - self.Ctrl.AnalogAim = SceneMan:ShortestDistance(Leader.Pos, Leader.ViewPoint, false).Normalized - self.deviceState = AHuman.POINTING + self.Ctrl.AnalogAim = SceneMan:ShortestDistance(Leader.Pos, Leader.ViewPoint, false).Normalized + self.deviceState = AHuman.POINTING - if Leader:GetController():IsState(Controller.WEAPON_FIRE) then + if Leader:GetController():IsState(Controller.WEAPON_FIRE) then - Owner:EquipDeviceInGroup("Bombs - Grenades", true) + Owner:EquipDeviceInGroup("Bombs - Grenades", true) - self.Target = nil - self.squadShoot = true - else - self.squadShoot = false + self.Target = nil + self.squadShoot = true + else + self.squadShoot = false + end end end end @@ -737,7 +746,7 @@ function NativeHumanAI:CreateAttackBehavior(Owner) elseif Owner.AIMode ~= Actor.AIMODE_SQUAD and Owner:EquipThrowable(true) and dist < (ToThrownDevice(Owner.EquippedItem).MaxThrowVel * GetPPM()) then self.NextBehavior = coroutine.create(HumanBehaviors.ThrowTarget) self.NextBehaviorName = "ThrowTarget" - elseif Owner.AIMode ~= Actor.AIMODE_SQUAD and Owner:EquipDiggingTool(true) and dist < 150 then + elseif Owner.AIMode ~= Actor.AIMODE_SQUAD and Owner:EquipDiggingTool(true) and dist < 250 then self.NextBehavior = coroutine.create(HumanBehaviors.AttackTarget) self.NextBehaviorName = "AttackTarget" else -- unarmed or far away diff --git a/Base.rte/AI/RocketAI.lua b/Base.rte/AI/RocketAI.lua index 2f4f4de56..8b37063e5 100644 --- a/Base.rte/AI/RocketAI.lua +++ b/Base.rte/AI/RocketAI.lua @@ -15,7 +15,7 @@ function Create(self) self.DeliveryState = ACraft.FALL; self.LastAIMode = Actor.AIMODE_NONE; - self.groundDist = self.Radius / 1.35; + self.groundDist = self.Radius/1.35; self.LZpos = SceneMan:MovePointToGround(self.Pos, self.groundDist, 9); self.velIntegrator = 0; @@ -60,16 +60,6 @@ function Create(self) ---------------- AI variables end ---------------- end -function Update(self) - -- Re-orient the craft at 180 degrees to help the rotational AI - if self.RotAngle > math.pi then - self.RotAngle = self.RotAngle - (math.pi * 2); - end - if self.RotAngle < -math.pi then - self.RotAngle = self.RotAngle + (math.pi * 2); - end -end - function UpdateAI(self) self.Ctrl = self:GetController(); @@ -95,7 +85,7 @@ function UpdateAI(self) -- Reset StableTimer if not in a stable and upright state self.velIntegrator = self.velIntegrator * 0.8 + self.Vel.Magnitude * 0.2; - if self.velIntegrator > 3 or math.abs(self.AngularVel) > 0.75 then + if self.velIntegrator > 5 or math.abs(self.AngularVel) > 1 then self.StableTimer:Reset(); else self.LZpos.X = self.Pos.X; @@ -117,7 +107,7 @@ function UpdateAI(self) if self.ObstacleTimer:IsPastSimTimeLimit() then self.ObstacleTimer:Reset(); - local Trace = Vector(self.Vel.X+RangeRand(-1, 1), math.max(self.Vel.Y, 2)) * 40; + local Trace = Vector(self.Vel.X + RangeRand(-1, 1), math.max(self.Vel.Y, 2)) * 40; local obstID = SceneMan:CastMORay(self.Pos, Trace, self.ID, self.IgnoresWhichTeam, 0, false, 5); if obstID ~= rte.NoMOID then local MO = MovableMan:GetMOFromID(MovableMan:GetRootMOID(obstID)); @@ -171,7 +161,7 @@ function UpdateAI(self) self:CloseHatch(); end end - elseif self.StableTimer:IsPastSimMS(400) and self.HatchState == ACraft.CLOSED then + elseif self.StableTimer:IsPastSimMS(300) and self.HatchState == ACraft.CLOSED then self:OpenHatch(); self.DoorTimer:Reset(); end @@ -180,7 +170,7 @@ function UpdateAI(self) if self.ObstacleTimer:IsPastSimTimeLimit() then self.ObstacleTimer:Reset(); - local Trace = Vector(self.Vel.X+RangeRand(-1, 1), math.min(self.Vel.Y, -1)) * 50; + local Trace = Vector(self.Vel.X + RangeRand(-1, 1), math.min(self.Vel.Y, -1)) * 50; local obstID = SceneMan:CastMORay(self.Pos, Trace, self.ID, self.IgnoresWhichTeam, 0, false, 5); if obstID ~= rte.NoMOID then local MO = MovableMan:GetMOFromID(MovableMan:GetRootMOID(obstID)); @@ -209,7 +199,7 @@ function UpdateAI(self) self.Ctrl:SetState(Controller.MOVE_UP, true); -- Don't burst when returning to orbit else if change > 11 and not self.burstUp then - self.burstUp = math.max(15 - change, 4); -- Wait n frames until next burst (lower -> better control) + self.burstUp = math.max(16 - change, 2); -- Wait n frames until next burst (lower -> better control) elseif change < -20 then self.burstUp = nil; self.Ctrl:SetState(Controller.MOVE_DOWN, true); @@ -226,23 +216,23 @@ function UpdateAI(self) local targetAng = 0; if self.Vel.Y > 0 then if change < -4 then - targetAng = -math.max(change / 40, -0.5); + targetAng = -math.max(change/40, -0.5); elseif change > 4 then - targetAng = -math.min(change / 40, 0.5); + targetAng = -math.min(change/40, 0.5); end else if change > 4 then - targetAng = -math.max(change / 40, -0.5); + targetAng = -math.max(change/40, -0.5); elseif change < -4 then - targetAng = -math.min(change / 40, 0.5); + targetAng = -math.min(change/40, 0.5); end end -- Control angle change = self.AngPID:Update(self.RotAngle + self.AngularVel, targetAng); -- Don't burst side thrusters from minimal tilt - local tilted = math.floor(math.abs(self.RotAngle) + 0.8); - if tilted ~= 0 then + local tilted = math.floor(math.abs(self.RotAngle) + 0.9); + if tilted ~= 0 then if change > 1.1 and not self.burstRight then self.burstRight = math.max(5 - change, 2); -- Wait n frames until next burst (lower -> better control) elseif change < -1.1 and not self.burstLeft then @@ -275,7 +265,7 @@ function UpdateAI(self) self.burstUp = self.burstUp - 1; if self.burstUp < 0 then self.Ctrl:SetState(Controller.MOVE_UP, true); - if self.burstUp < -12 then + if self.burstUp < -16 then self.burstUp = nil; end end @@ -293,4 +283,4 @@ function UpdateAI(self) elseif self.AIMode == Actor.AIMODE_SCUTTLE or self.StuckTimer:IsPastSimMS(40000) then self:GibThis(); end -end +end \ No newline at end of file diff --git a/Base.rte/Activities/MetaFight.lua b/Base.rte/Activities/MetaFight.lua index cb3b0238b..126a30523 100644 --- a/Base.rte/Activities/MetaFight.lua +++ b/Base.rte/Activities/MetaFight.lua @@ -111,7 +111,7 @@ function MetaFight:BrainCheck() -- If there's only one active team, it means they are clearing out wildlife in this mission if self.TeamCount == 1 then -- Check if there's any wildlife left to clear out, and the brain is standing on the surface (and not in a ship still) - if not MovableMan:GetFirstTeamActor(Activity.NOTEAM, Activity.NOPLAYER) and MovableMan:IsActor(self:GetPlayerBrain(player)) and self:GetPlayerBrain(player):IsInGroup("Brains") then + if not MovableMan:GetFirstTeamActor(Activity.NOTEAM, Activity.PLAYER_NONE) and MovableMan:IsActor(self:GetPlayerBrain(player)) and self:GetPlayerBrain(player):IsInGroup("Brains") then -- Only do EndActivity if the winner outcome has changed local winnerChanged = self.WinnerTeam ~= self:WhichTeamLeft(); self.WinnerTeam = self:WhichTeamLeft(); @@ -576,7 +576,7 @@ function MetaFight:StartActivity() for Act in MovableMan.AddedActors do if not Act:HasObjectInGroup("Brains") and not IsADoor(Act) then local value = Act:GetTotalValue(0, 1, defenderTeamNativeCostMultiplier) - if Act.PlacedByPlayer == Activity.NOPLAYER then + if Act.PlacedByPlayer == Activity.PLAYER_NONE then value = value * 0.5 -- This actor is left-over from previous battles end @@ -1071,7 +1071,7 @@ function MetaFight:UpdateActivity() -- The brain should stay put, presumably in a safe spot as dictated by the base plan -- Not a brain, so can this actor go hunt the enemy brain? -- If so, check if it was ordered during the fight as opposed to placed beforehand as defensive sentry - if actor.PlacedByPlayer == Activity.NOPLAYER and not actor:IsInGroup("Anti-Air") and not actor:IsInGroup("Brains") then + if actor.PlacedByPlayer == Activity.PLAYER_NONE and not actor:IsInGroup("Anti-Air") and not actor:IsInGroup("Brains") then actor.AIMode = Actor.AIMODE_BRAINHUNT; break; end diff --git a/Base.rte/Activities/OneManArmy.lua b/Base.rte/Activities/OneManArmy.lua index bf9dad5f5..a30903a3f 100644 --- a/Base.rte/Activities/OneManArmy.lua +++ b/Base.rte/Activities/OneManArmy.lua @@ -79,28 +79,20 @@ function OneManArmy:StartActivity() local primaryWeapon, secondaryWeapon, throwable, actor; for entity in module.Presets do local picked; --Prevent duplicates - if not primaryWeapon and entity.ClassName == "HDFirearm" then - if ToMOSRotating(entity):HasObjectInGroup(primaryGroup) then - primaryWeapon = CreateHDFirearm(entity:GetModuleAndPresetName()); - picked = true; - end + if not primaryWeapon and entity.ClassName == "HDFirearm" and ToMOSRotating(entity):HasObjectInGroup(primaryGroup) and ToMOSRotating(entity).IsBuyable then + primaryWeapon = CreateHDFirearm(entity:GetModuleAndPresetName()); + picked = true; end - if not picked and not secondaryWeapon and entity.ClassName == "HDFirearm" then - if ToMOSRotating(entity):HasObjectInGroup(secondaryGroup) then - secondaryWeapon = CreateHDFirearm(entity:GetModuleAndPresetName()); - picked = true; - end + if not picked and not secondaryWeapon and entity.ClassName == "HDFirearm" and ToMOSRotating(entity):HasObjectInGroup(secondaryGroup) and ToMOSRotating(entity).IsBuyable then + secondaryWeapon = CreateHDFirearm(entity:GetModuleAndPresetName()); + picked = true; end - if not picked and not throwable and entity.ClassName == "TDExplosive" then - if ToMOSRotating(entity):HasObjectInGroup("Bombs - Grenades") then - throwable = CreateTDExplosive(entity:GetModuleAndPresetName()); - picked = true; - end + if not picked and not throwable and entity.ClassName == "TDExplosive" and ToMOSRotating(entity):HasObjectInGroup("Bombs - Grenades") and ToMOSRotating(entity).IsBuyable then + throwable = CreateTDExplosive(entity:GetModuleAndPresetName()); + picked = true; end - if not picked and not actor and entity.ClassName == "AHuman" then - if ToMOSRotating(entity):HasObjectInGroup(actorGroup) then - actor = CreateAHuman(entity:GetModuleAndPresetName()); - end + if not picked and not actor and entity.ClassName == "AHuman" and ToMOSRotating(entity):HasObjectInGroup(actorGroup) and ToMOSRotating(entity).IsBuyable then + actor = CreateAHuman(entity:GetModuleAndPresetName()); end end if actor then diff --git a/Base.rte/Activities/OneManArmyDiggers.lua b/Base.rte/Activities/OneManArmyDiggers.lua index e7a10568d..008515355 100644 --- a/Base.rte/Activities/OneManArmyDiggers.lua +++ b/Base.rte/Activities/OneManArmyDiggers.lua @@ -81,28 +81,20 @@ function OneManArmy:StartActivity() local primaryWeapon, secondaryWeapon, throwable, actor; for entity in module.Presets do local picked; -- Prevent duplicates - if not primaryWeapon and entity.ClassName == "HDFirearm" then - if ToMOSRotating(entity):HasObjectInGroup(primaryGroup) then - primaryWeapon = CreateHDFirearm(entity:GetModuleAndPresetName()); - picked = true; - end + if not primaryWeapon and entity.ClassName == "HDFirearm" and ToMOSRotating(entity):HasObjectInGroup(primaryGroup) and ToMOSRotating(entity).IsBuyable then + primaryWeapon = CreateHDFirearm(entity:GetModuleAndPresetName()); + picked = true; end - if not picked and not secondaryWeapon and entity.ClassName == "HDFirearm" then - if ToMOSRotating(entity):HasObjectInGroup(secondaryGroup) then - secondaryWeapon = CreateHDFirearm(entity:GetModuleAndPresetName()); - picked = true; - end + if not picked and not secondaryWeapon and entity.ClassName == "HDFirearm" and ToMOSRotating(entity):HasObjectInGroup(secondaryGroup) and ToMOSRotating(entity).IsBuyable then + secondaryWeapon = CreateHDFirearm(entity:GetModuleAndPresetName()); + picked = true; end - if not picked and not throwable and entity.ClassName == "TDExplosive" then - if ToMOSRotating(entity):HasObjectInGroup("Bombs - Grenades") then - throwable = CreateTDExplosive(entity:GetModuleAndPresetName()); - picked = true; - end + if not picked and not throwable and entity.ClassName == "TDExplosive" and ToMOSRotating(entity):HasObjectInGroup("Bombs - Grenades") and ToMOSRotating(entity).IsBuyable then + throwable = CreateTDExplosive(entity:GetModuleAndPresetName()); + picked = true; end - if not picked and not actor and entity.ClassName == "AHuman" then - if ToMOSRotating(entity):HasObjectInGroup(actorGroup) then - actor = CreateAHuman(entity:GetModuleAndPresetName()); - end + if not picked and not actor and entity.ClassName == "AHuman" and ToMOSRotating(entity):HasObjectInGroup(actorGroup) and ToMOSRotating(entity).IsBuyable then + actor = CreateAHuman(entity:GetModuleAndPresetName()); end end if actor then diff --git a/Base.rte/Activities/WaveDefense.lua b/Base.rte/Activities/WaveDefense.lua index 124215126..c8745bec1 100644 --- a/Base.rte/Activities/WaveDefense.lua +++ b/Base.rte/Activities/WaveDefense.lua @@ -878,7 +878,7 @@ end -- Get any Actor from the CPU's native tech function WaveDefense:CreateRandomInfantry() - local Passenger = RandomAHuman("Actors", self.AI.Tech) + local Passenger = RandomAHuman("Any", self.AI.Tech) if Passenger then Passenger:AddInventoryItem(RandomHDFirearm("Weapons - Primary", self.AI.Tech)) Passenger:AddInventoryItem(RandomHDFirearm("Weapons - Secondary", self.AI.Tech)) diff --git a/Base.rte/Actors/Brains/Brainbot/Brainbot.ini b/Base.rte/Actors/Brains/Brainbot/Brainbot.ini index 4964b48d1..9c6bc2d9b 100644 --- a/Base.rte/Actors/Brains/Brainbot/Brainbot.ini +++ b/Base.rte/Actors/Brains/Brainbot/Brainbot.ini @@ -35,7 +35,7 @@ AddActor = Attachable JointStrength = 1000 JointStiffness = 0.3 BreakWound = AEmitter - CopyOf = Leaking Machinery + CopyOf = Leaking Machinery Heavy ParentBreakWound = AEmitter CopyOf = Leaking Machinery Heavy JointOffset = Vector @@ -311,7 +311,7 @@ AddActor = Attachable Spread = 2.25 MaxVelocity = 15 MinVelocity = 5 - GibImpulseLimit = 150 + GibImpulseLimit = 250 GibWoundLimit = 12 @@ -403,7 +403,7 @@ AddActor = Arm Spread = 2.25 MaxVelocity = 15 MinVelocity = 5 - GibImpulseLimit = 45 + GibImpulseLimit = 240 GibWoundLimit = 7 @@ -491,7 +491,7 @@ AddActor = Leg Resolution = 4 Depth = 2 DeepCheck = 1 - JointStrength = 350 + JointStrength = 360 JointStiffness = 0.5 BreakWound = AEmitter CopyOf = Leaking Machinery @@ -500,7 +500,7 @@ AddActor = Leg JointOffset = Vector X = -5 Y = 2 - DrawAfterParent = 0 + DrawAfterParent = 1 Foot = Attachable CopyOf = Brainbot Foot FG ParentOffset = Vector @@ -558,7 +558,7 @@ AddActor = Leg Spread = 2.25 MaxVelocity = 15 MinVelocity = 5 - GibImpulseLimit = 75 + GibImpulseLimit = 360 GibWoundLimit = 8 @@ -569,6 +569,7 @@ AddActor = Leg FilePath = Base.rte/Actors/Brains/Brainbot/LegBG.png Foot = Attachable CopyOf = Brainbot Foot BG + DrawAfterParent = 0 AddActor = AHuman @@ -612,7 +613,7 @@ AddActor = AHuman AddSound = ContentFile FilePath = Base.rte/Actors/Brains/Case/Sounds/EnergyExplosion.flac DeviceSwitchSound = SoundContainer - CopyOf = Device Switch + CopyOf = Servo Sound Team = 0 Health = 100 ImpulseDamageThreshold = 2800 @@ -627,6 +628,7 @@ AddActor = AHuman ParentOffset = Vector X = 1 Y = -5 + LookToAimRatio = 0.2 Jetpack = AEmitter CopyOf = Jetpack Robot ParentOffset = Vector @@ -678,55 +680,12 @@ AddActor = AHuman X = 8 Y = 16 WalkLimbPath = LimbPath - PresetName = Brainbot Walk Path - StartOffset = Vector - X = 13 - Y = -2 - StartSegCount = 3 - AddSegment = Vector - X = 0 - Y = 2 - AddSegment = Vector - X = 0 - Y = 2 - AddSegment = Vector - X = 0 - Y = 5 - AddSegment = Vector - X = 0 - Y = 5 - AddSegment = Vector - X = -6 - Y = 4 - AddSegment = Vector - X = -4 - Y = 0 - AddSegment = Vector - X = -4 - Y = 0 - AddSegment = Vector - X = -4 - Y = 1 - AddSegment = Vector - X = -3 - Y = 1 - AddSegment = Vector - X = 0 - Y = -2 - SlowTravelSpeed = 1.5 - NormalTravelSpeed = 2.5 - FastTravelSpeed = 4.5 - PushForce = 6000 + CopyOf = Robot Walk Path CrouchLimbPath = LimbPath - PresetName = Brainbot Crouch Path - StartOffset = Vector - X = 12 - Y = 0 - StartSegCount = 0 - SlowTravelSpeed = 0.1 - NormalTravelSpeed = 0.5 - FastTravelSpeed = 1.5 - PushForce = 5000 + CopyOf = Human Crouch Path + CrouchLimbPathBG = LimbPath + CopyOf = Human Crouch Path BG + CrouchRotAngleTarget = -0.6 CrawlLimbPath = LimbPath PresetName = Brainbot Crawl Path StartOffset = Vector diff --git a/Base.rte/Actors/Infantry/GreenDummy/GreenDummy.ini b/Base.rte/Actors/Infantry/GreenDummy/GreenDummy.ini index ad18f23da..0065d0f92 100644 --- a/Base.rte/Actors/Infantry/GreenDummy/GreenDummy.ini +++ b/Base.rte/Actors/Infantry/GreenDummy/GreenDummy.ini @@ -300,7 +300,7 @@ AddEffect = Attachable Resolution = 6 Depth = 2 DeepCheck = 1 - JointStrength = 130 + JointStrength = 150 JointStiffness = 0.1 BreakWound = AEmitter CopyOf = Leaking Machinery @@ -430,7 +430,7 @@ AddActor = Arm Offset = Vector X = -4.5 Y = -3 - GibImpulseLimit = 50 + GibImpulseLimit = 185 GibWoundLimit = 2 GibSound = SoundContainer CopyOf = Bone Crack @@ -526,7 +526,7 @@ AddActor = Leg JointOffset = Vector X = -5 Y = 2 - DrawAfterParent = 0 + DrawAfterParent = 1 Foot = Attachable CopyOf = Green Dummy Foot FG ParentOffset = Vector @@ -584,7 +584,7 @@ AddActor = Leg Offset = Vector X = 3 Y = 0 - GibImpulseLimit = 60 + GibImpulseLimit = 200 GibWoundLimit = 3 GibSound = SoundContainer CopyOf = Bone Crack @@ -601,6 +601,7 @@ AddActor = Leg ParentOffset = Vector X = -11 Y = -10 + DrawAfterParent = 0 AddActor = AHuman @@ -644,7 +645,7 @@ AddActor = AHuman DeathSound = SoundContainer CopyOf = Robot Death DeviceSwitchSound = SoundContainer - CopyOf = Device Switch + CopyOf = Servo Sound Health = 100 ImpulseDamageThreshold = 2500 AimDistance = 30 @@ -664,6 +665,7 @@ AddActor = AHuman X = -6 Y = -1 JumpTime = 1.5 + JumpAngleRange = 0.2 FGArm = Arm CopyOf = Green Dummy Arm FG ParentOffset = Vector @@ -712,11 +714,14 @@ AddActor = AHuman CopyOf = Human Walk Path PresetName = Green Dummy Walk Path StartOffset = Vector - X = 6 + X = 10 Y = -3 NormalTravelSpeed = 3.4 CrouchLimbPath = LimbPath CopyOf = Human Crouch Path + CrouchLimbPathBG = LimbPath + CopyOf = Human Crouch Path BG + CrouchRotAngleTarget = -0.6 CrawlLimbPath = LimbPath CopyOf = Human Crawl Path ArmCrawlLimbPath = LimbPath diff --git a/Base.rte/Actors/Mecha/AIBox/AIBox.ini b/Base.rte/Actors/Mecha/AIBox/AIBox.ini index 5fe929386..8f35b6ee5 100644 --- a/Base.rte/Actors/Mecha/AIBox/AIBox.ini +++ b/Base.rte/Actors/Mecha/AIBox/AIBox.ini @@ -140,7 +140,7 @@ AddActor = Leg Resolution = 4 Depth = 0 DeepCheck = 0 - JointStrength = 165 + JointStrength = 160 JointStiffness = 0.5 BreakWound = AEmitter CopyOf = Leaking Machinery @@ -149,7 +149,7 @@ AddActor = Leg JointOffset = Vector X = -2 Y = 6 - DrawAfterParent = 0 + DrawAfterParent = 1 ExtendedOffset = Vector X = 8 Y = -10 @@ -166,7 +166,7 @@ AddActor = Leg Offset = Vector X = -3 Y = 0 - GibImpulseLimit = 2200 + GibImpulseLimit = 2000 GibWoundLimit = 5 GibSound = SoundContainer CopyOf = Bone Crack @@ -181,6 +181,7 @@ AddActor = Leg SpriteOffset = Vector X = -6 Y = -7 + DrawAfterParent = 0 AddActor = ACrab @@ -219,7 +220,7 @@ AddActor = ACrab // AddSound = ContentFile // FilePath = Base.rte/Actors/Brains/Case/Sounds/EnergyExplosion.flac DeviceSwitchSound = SoundContainer - CopyOf = Device Switch + CopyOf = Servo Sound PassengerSlots = 2 Health = 100 ImpulseDamageThreshold = 5000 diff --git a/Base.rte/Actors/Mecha/Medic/Medic.lua b/Base.rte/Actors/Mecha/Medic/Medic.lua index 8a5a00317..f63d2a39f 100644 --- a/Base.rte/Actors/Mecha/Medic/Medic.lua +++ b/Base.rte/Actors/Mecha/Medic/Medic.lua @@ -7,8 +7,14 @@ function Create(self) self.crossTimer = Timer(); self.crossTimer:SetSimTimeLimitMS(800); - self.colors = {135, 133, 149, 148, 145}; - self.maxHealRange = 100 + self.Radius; + self.visual = {}; + self.visual.Colors = {135, 133, 149, 148, 145, 148, 149, 133}; + self.visual.CurrentColor = 0; + self.visual.Rotation = 0; + self.visual.RPM = 60; + self.visual.ArcCount = 2; + + self.maxHealRange = 100 + self.IndividualRadius; self.healStrength = 1; self.healTargets = {}; end @@ -16,41 +22,39 @@ function Update(self) local parent = self:GetParent(); if parent and IsActor(parent) then parent = ToActor(parent); + --Visualize heal range local healRange = self.maxHealRange * (1 - (self.WoundCount/self.GibWoundLimit)); if (parent:IsPlayerControlled() and parent:GetController():IsState(Controller.WEAPON_FIRE)) or #self.healTargets > 0 then local screen = ActivityMan:GetActivity():ScreenOfPlayer(parent:GetController().Player); if screen ~= -1 then - local color = self.colors[math.random(#self.colors)]; - PrimitiveMan:DrawCirclePrimitive(screen, self.Pos, healRange, color); - for i = 1, math.random(10, 20) do - local vector = Vector(healRange, 0):RadRotate(6.28 * math.random()); - PrimitiveMan:DrawLinePrimitive(screen, self.Pos + vector * RangeRand(0.66, 0.99), self.Pos + vector, color); + self.visual.Rotation = self.visual.Rotation - self.visual.RPM/(TimerMan.DeltaTimeMS * 0.5); + local color = self.visual.Colors[self.visual.CurrentColor]; + local angleSize = 180/self.visual.ArcCount; + for i = 0, self.visual.ArcCount - 1 do + local arcThin = i * 360/self.visual.ArcCount + self.visual.Rotation; + local arcThick = arcThin + angleSize * 0.1; + PrimitiveMan:DrawArcPrimitive(self.Pos, arcThick, arcThick + angleSize * 0.8, healRange, color, 2); + PrimitiveMan:DrawArcPrimitive(self.Pos, arcThin, arcThin + angleSize, healRange, color, 1); end end end if self.healTimer:IsPastSimTimeLimit() then + self.visual.CurrentColor = self.visual.CurrentColor % #self.visual.Colors + 1; self.healTimer:Reset(); - for i = 1, #self.healTargets do - local targetFound = false; - local healTarget = self.healTargets[i]; + for _, healTarget in pairs(self.healTargets) do if healTarget and IsActor(healTarget) and (healTarget.Health < healTarget.MaxHealth or healTarget.WoundCount > 0) and healTarget.Vel.Largest < 10 then local trace = SceneMan:ShortestDistance(self.Pos, healTarget.Pos, false); - if (trace.Magnitude - healTarget.Radius) < healRange then - if SceneMan:CastObstacleRay(self.Pos, trace, Vector(), Vector(), parent.ID, parent.IgnoresWhichTeam, rte.grassID, 5) < 0 then - targetFound = true; - end - end - end - if targetFound then - healTarget.Health = math.min(healTarget.Health + self.healStrength, healTarget.MaxHealth); - if self.crossTimer:IsPastSimTimeLimit() then - local cross = CreateMOSParticle("Particle Heal Effect", "Base.rte"); - if cross then - cross.Pos = healTarget.AboveHUDPos + Vector(0, 4); - MovableMan:AddParticle(cross); - end - if healTarget.Health >= healTarget.MaxHealth then - healTarget:RemoveWounds(self.healStrength); + if (trace.Magnitude - healTarget.Radius) < healRange and SceneMan:CastObstacleRay(self.Pos, trace, Vector(), Vector(), parent.ID, parent.IgnoresWhichTeam, rte.grassID, 5) < 0 then + healTarget.Health = math.min(healTarget.Health + self.healStrength, healTarget.MaxHealth); + if self.crossTimer:IsPastSimTimeLimit() then + local cross = CreateMOSParticle("Particle Heal Effect", "Base.rte"); + if cross then + cross.Pos = healTarget.AboveHUDPos + Vector(0, 4); + MovableMan:AddParticle(cross); + end + if healTarget.Health >= healTarget.MaxHealth then + healTarget:RemoveWounds(self.healStrength); + end end end end @@ -59,12 +63,12 @@ function Update(self) self.crossTimer:Reset(); end self.healTargets = {}; - for act in MovableMan.Actors do - if act.Team == parent.Team and act.ID ~= parent.ID and (act.Health < act.MaxHealth or act.WoundCount > 0) and act.Vel.Largest < 5 then - local trace = SceneMan:ShortestDistance(self.Pos, act.Pos, false); - if (trace.Magnitude - act.Radius) < (healRange * 0.9) then + for actor in MovableMan.Actors do + if actor.Team == parent.Team and actor.ID ~= parent.ID and (actor.Health < actor.MaxHealth or actor.WoundCount > 0) and actor.Vel.Largest < 5 then + local trace = SceneMan:ShortestDistance(self.Pos, actor.Pos, false); + if (trace.Magnitude - actor.Radius) < (healRange * 0.9) then if SceneMan:CastObstacleRay(self.Pos, trace, Vector(), Vector(), parent.ID, parent.IgnoresWhichTeam, rte.airID, 3) < 0 then - table.insert(self.healTargets, act); + table.insert(self.healTargets, actor); end end end diff --git a/Base.rte/Actors/Mecha/Medic/MedicDrone.ini b/Base.rte/Actors/Mecha/Medic/MedicDrone.ini index 675507ea5..bdc7f2e87 100644 --- a/Base.rte/Actors/Mecha/Medic/MedicDrone.ini +++ b/Base.rte/Actors/Mecha/Medic/MedicDrone.ini @@ -141,7 +141,7 @@ AddActor = Leg Resolution = 4 Depth = 0 DeepCheck = 0 - JointStrength = 165 + JointStrength = 160 JointStiffness = 0.5 BreakWound = AEmitter CopyOf = Leaking Machinery @@ -150,7 +150,7 @@ AddActor = Leg JointOffset = Vector X = -2 Y = 6 - DrawAfterParent = 0 + DrawAfterParent = 1 ExtendedOffset = Vector X = 8 Y = -10 @@ -167,7 +167,7 @@ AddActor = Leg Offset = Vector X = -3 Y = 0 - GibImpulseLimit = 2200 + GibImpulseLimit = 2000 GibWoundLimit = 5 GibSound = SoundContainer CopyOf = Bone Crack @@ -182,6 +182,7 @@ AddActor = Leg SpriteOffset = Vector X = -6 Y = -7 + DrawAfterParent = 0 AddActor = ACrab @@ -217,7 +218,7 @@ AddActor = ACrab DeathSound = SoundContainer CopyOf = Bone Crack DeviceSwitchSound = SoundContainer - CopyOf = Device Switch + CopyOf = Servo Sound Health = 100 ImpulseDamageThreshold = 5000 AimRange = 1.57 diff --git a/Base.rte/Actors/Shared.ini b/Base.rte/Actors/Shared.ini index df03c84bc..5723a8d10 100644 --- a/Base.rte/Actors/Shared.ini +++ b/Base.rte/Actors/Shared.ini @@ -35,6 +35,20 @@ AddActor = Attachable JointStiffness = 0.1 +AddActor = Actor + PresetName = Null Actor + Mass = 0 + PinStrength = 1000 + Buyable = 0 + HitsMOs = 0 + GetsHitByMOs = 0 + SpriteFile = ContentFile + FilePath = Base.rte/Null.png + AtomGroup = AtomGroup + CopyOf = Null AtomGroup + HUDVisible = 0 + + /////////////////////////////////////////////////////////////////////// // Limb Paths @@ -54,21 +68,21 @@ AddLimbPath = LimbPath AddLimbPath = LimbPath PresetName = Human Walk Path StartOffset = Vector - X = 6 + X = 10 Y = -2 StartSegCount = 3 AddSegment = Vector - X = 4.2 - Y = 0 + X = 0 + Y = 2 AddSegment = Vector X = 0 - Y = 4 + Y = 2 AddSegment = Vector X = 0 Y = 5 AddSegment = Vector X = 0 - Y = 6 + Y = 5 AddSegment = Vector X = -4 Y = 3 @@ -77,22 +91,26 @@ AddLimbPath = LimbPath Y = 1 AddSegment = Vector X = -5 - Y = 0 + Y = 1 AddSegment = Vector X = -4 Y = 1 AddSegment = Vector X = -3 - Y = -1 + Y = 0 AddSegment = Vector X = 0 - Y = -4 + Y = -2 AddSegment = Vector X = 3 Y = -3 AddSegment = Vector - X = 5 + X = 4 Y = -2 + AddSegment = Vector + X = 5 + Y = -1 + EndSegCount = 4 SlowTravelSpeed = 1.6 NormalTravelSpeed = 3.2 FastTravelSpeed = 4.8 @@ -100,32 +118,93 @@ AddLimbPath = LimbPath AddLimbPath = LimbPath - PresetName = Human Run Path + PresetName = Robot Walk Path StartOffset = Vector - X = 4 + X = 10 Y = -2 - StartSegCount = 2 + StartSegCount = 3 AddSegment = Vector - X = 4.2 - Y = 0 + X = 0 + Y = 2 AddSegment = Vector - X = 2 + X = 0 Y = 3 AddSegment = Vector X = 0 - Y = 3 + Y = 4 AddSegment = Vector X = 0 Y = 4 + AddSegment = Vector + X = 0 + Y = 3 + AddSegment = Vector + X = 0 + Y = 1 + AddSegment = Vector + X = 0 + Y = 1 + AddSegment = Vector + X = -1 + Y = 0 + AddSegment = Vector + X = -1 + Y = 0 + AddSegment = Vector + X = -2 + Y = 1 + AddSegment = Vector + X = -5 + Y = 1 + AddSegment = Vector + X = -4 + Y = 0 + AddSegment = Vector + X = -4 + Y = 0 + AddSegment = Vector + X = -3 + Y = 0 + AddSegment = Vector + X = 1 + Y = -2 + AddSegment = Vector + X = 3 + Y = -3 + AddSegment = Vector + X = 5 + Y = -2 + AddSegment = Vector + X = 6 + Y = -1 + EndSegCount = 4 + SlowTravelSpeed = 1 + NormalTravelSpeed = 2.5 + FastTravelSpeed = 4 + PushForce = 8000 + + +AddLimbPath = LimbPath + PresetName = Human Run Path + StartOffset = Vector + X = 9.2 + Y = -1 + StartSegCount = 2 + AddSegment = Vector + X = 0 + Y = 3 AddSegment = Vector X = 0 Y = 4 AddSegment = Vector X = 0 Y = 5 + AddSegment = Vector + X = 0 + Y = 5 AddSegment = Vector X = -8 - Y = 1 + Y = 2 AddSegment = Vector X = -9 Y = 1 @@ -133,19 +212,23 @@ AddLimbPath = LimbPath X = -4 Y = 0 AddSegment = Vector - X = 0 + X = -2 Y = 0 - AddSegment = Vector - X = -1 - Y = -1 AddSegment = Vector X = 0 - Y = -4 + Y = -2 + AddSegment = Vector + X = 1 + Y = -3 + AddSegment = Vector + X = 3 + Y = -3 AddSegment = Vector X = 8 - Y = -4 - SlowTravelSpeed = 1.6 - NormalTravelSpeed = 4.6 + Y = -1 + EndSegCount = 4 + SlowTravelSpeed = 2.0 + NormalTravelSpeed = 4.0 FastTravelSpeed = 5.0 PushForce = 9000 @@ -153,8 +236,8 @@ AddLimbPath = LimbPath AddLimbPath = LimbPath PresetName = Human Crouch Path StartOffset = Vector - X = 10 - Y = 3 + X = -4 + Y = 7 StartSegCount = 0 SlowTravelSpeed = 0.1 NormalTravelSpeed = 0.5 @@ -162,6 +245,14 @@ AddLimbPath = LimbPath PushForce = 8000 +AddLimbPath = LimbPath + CopyOf = Human Crouch Path + PresetName = Human Crouch Path BG + StartOffset = Vector + X = 9 + Y = 7 + + AddLimbPath = LimbPath PresetName = Human Crawl Path StartOffset = Vector @@ -386,7 +477,7 @@ AddEffect = AEmitter AddEmission = Emission EmittedParticle = MOSParticle CopyOf = Main Thruster Blast Ball 1 - BurstSize = 2 + BurstSize = 3 LifeVariation = 0.15 Spread = 0 MaxVelocity = 10 @@ -395,7 +486,7 @@ AddEffect = AEmitter EmittedParticle = MOSParticle CopyOf = Side Thruster Blast Ball 1 PresetName = Jetpack Blast Ball 2 - Mass = 3 + Mass = 4 LifeTime = 250 AirResistance = 0.1 AirThreshold = 1 @@ -404,7 +495,9 @@ AddEffect = AEmitter Spread = 0.1 MaxVelocity = 20 MinVelocity = 10 - BurstSpacing = 2000 + BurstSpacing = 1000 + MinThrottleRange = 1 + MaxThrottleRange = 1 BurstSound = SoundContainer AttenuationStartDistance = 130 AddSound = ContentFile diff --git a/Base.rte/Actors/Shared/Jetpack.png b/Base.rte/Actors/Shared/Jetpack.png index bc475dd81..4a8f63d03 100644 Binary files a/Base.rte/Actors/Shared/Jetpack.png and b/Base.rte/Actors/Shared/Jetpack.png differ diff --git a/Base.rte/Actors/Wildlife/Crabs/CrabBodyA000.png b/Base.rte/Actors/Wildlife/Crabs/CrabBodyA000.png index 620a05fdc..75e515d0e 100644 Binary files a/Base.rte/Actors/Wildlife/Crabs/CrabBodyA000.png and b/Base.rte/Actors/Wildlife/Crabs/CrabBodyA000.png differ diff --git a/Base.rte/Actors/Wildlife/Crabs/CrabBodyA001.png b/Base.rte/Actors/Wildlife/Crabs/CrabBodyA001.png index 3267a6e3e..3eba46b98 100644 Binary files a/Base.rte/Actors/Wildlife/Crabs/CrabBodyA001.png and b/Base.rte/Actors/Wildlife/Crabs/CrabBodyA001.png differ diff --git a/Base.rte/Actors/Wildlife/Crabs/CrabBodyA002.png b/Base.rte/Actors/Wildlife/Crabs/CrabBodyA002.png new file mode 100644 index 000000000..685001387 Binary files /dev/null and b/Base.rte/Actors/Wildlife/Crabs/CrabBodyA002.png differ diff --git a/Base.rte/Actors/Wildlife/Crabs/CrabBodyA003.png b/Base.rte/Actors/Wildlife/Crabs/CrabBodyA003.png new file mode 100644 index 000000000..424c80170 Binary files /dev/null and b/Base.rte/Actors/Wildlife/Crabs/CrabBodyA003.png differ diff --git a/Base.rte/Actors/Wildlife/Crabs/Crabs.ini b/Base.rte/Actors/Wildlife/Crabs/Crabs.ini index 0f20c7b01..7762a798a 100644 --- a/Base.rte/Actors/Wildlife/Crabs/Crabs.ini +++ b/Base.rte/Actors/Wildlife/Crabs/Crabs.ini @@ -25,7 +25,7 @@ AddEffect = Leg Resolution = 4 Depth = 0 DeepCheck = 0 - JointStrength = 165 + JointStrength = 150 JointStiffness = 0.5 BreakWound = AEmitter CopyOf = Wound Bone Break @@ -34,7 +34,7 @@ AddEffect = Leg JointOffset = Vector X = -2 Y = 6 - DrawAfterParent = 0 + DrawAfterParent = 1 ExtendedOffset = Vector X = 10 Y = -11 @@ -45,7 +45,7 @@ AddEffect = Leg X = 6 Y = 6 MoveSpeed = 0.4 - GibImpulseLimit = 2200 + GibImpulseLimit = 1500 GibWoundLimit = 3 GibSound = SoundContainer CopyOf = Bone Crack @@ -102,6 +102,7 @@ AddEffect = Leg IdleOffset = Vector X = 3 Y = 6 + DrawAfterParent = 0 AddEffect = ACrab @@ -116,9 +117,9 @@ AddEffect = ACrab IgnoresTeamHits = 0 SpriteFile = ContentFile FilePath = Base.rte/Actors/Wildlife/Crabs/CrabBodyA.png - FrameCount = 2 + FrameCount = 4 SpriteAnimMode = 4 - SpriteAnimDuration = 250 + SpriteAnimDuration = 500 SpriteOffset = Vector X = -9 Y = -8 @@ -176,9 +177,9 @@ AddEffect = ACrab Y = 6 StartSegCount = 0 SlowTravelSpeed = 0.1 - NormalTravelSpeed = 0.25 + NormalTravelSpeed = 0.5 FastTravelSpeed = 1.5 - PushForce = 1000 + PushForce = 200 LWalkLimbPath = LimbPath PresetName = Crab Walk Path Left StartOffset = Vector @@ -209,7 +210,7 @@ AddEffect = ACrab SlowTravelSpeed = 1.5 NormalTravelSpeed = 2.5 FastTravelSpeed = 4.5 - PushForce = 5500 + PushForce = 500 LDislodgeLimbPath = LimbPath PresetName = Crab Dislodge Path Left StartOffset = Vector @@ -222,7 +223,7 @@ AddEffect = ACrab SlowTravelSpeed = 1.5 NormalTravelSpeed = 2.5 FastTravelSpeed = 4.5 - PushForce = 10000 + PushForce = 5000 RStandLimbPath = LimbPath CopyOf = Crab Stand Path Left PresetName = Crab Stand Path Right diff --git a/Base.rte/Actors/Wildlife/Jumper/Jumper.ini b/Base.rte/Actors/Wildlife/Jumper/Jumper.ini index 7f8b81e27..d4f89dc81 100644 --- a/Base.rte/Actors/Wildlife/Jumper/Jumper.ini +++ b/Base.rte/Actors/Wildlife/Jumper/Jumper.ini @@ -87,7 +87,7 @@ AddActor = Leg Offset = Vector X = -2 Y = 2 - GibImpulseLimit = 50 + GibImpulseLimit = 500 GibWoundLimit = 3 GibSound = SoundContainer CopyOf = Bone Crack @@ -123,12 +123,12 @@ AddEffect = Attachable Resolution = 6 Depth = 3 DeepCheck = 0 - JointStrength = 125 + JointStrength = 250 JointStiffness = 0.1 JointOffset = Vector X = -2 Y = -1 - GibImpulseLimit = 500 + GibImpulseLimit = 750 GibWoundLimit = 3 GibSound = SoundContainer CopyOf = Flesh Body Blunt Hit diff --git a/Base.rte/Actors/Wildlife/MegaCrab/MegaCrab.ini b/Base.rte/Actors/Wildlife/MegaCrab/MegaCrab.ini index 8d42a960e..aef2fcf50 100644 --- a/Base.rte/Actors/Wildlife/MegaCrab/MegaCrab.ini +++ b/Base.rte/Actors/Wildlife/MegaCrab/MegaCrab.ini @@ -34,7 +34,7 @@ AddEffect = Leg JointOffset = Vector X = -4 Y = 12 - DrawAfterParent = 0 + DrawAfterParent = 1 ExtendedOffset = Vector X = 20 Y = -22 @@ -102,6 +102,7 @@ AddEffect = Leg IdleOffset = Vector X = 6 Y = 12 + DrawAfterParent = 0 AddEffect = ACrab diff --git a/Base.rte/AtomGroups.ini b/Base.rte/AtomGroups.ini index f9fffdc0e..59840c0a4 100644 --- a/Base.rte/AtomGroups.ini +++ b/Base.rte/AtomGroups.ini @@ -270,14 +270,14 @@ AddActor = AtomGroup TrailLength = 0 AddAtom = Atom Offset = Vector - X = -2 + X = -1 Y = 0 Material = Material CopyOf = Rubber TrailLength = 0 AddAtom = Atom Offset = Vector - X = -1 + X = 0 Y = 0 Material = Material CopyOf = Rubber diff --git a/Base.rte/Constants.lua b/Base.rte/Constants.lua index 25adb27f2..53a978dca 100644 --- a/Base.rte/Constants.lua +++ b/Base.rte/Constants.lua @@ -1,30 +1,18 @@ - - --- Misc global constants.. add whatever you like and thinks makes sense across multiple scripts. All should be under the rte table +--Misc global constants. Add whatever you think makes sense across multiple scripts. All should be under the rte table. rte = {}; --- This will be replaced by a more data driven system soon -rte.TechList = {"Browncoats", "Coalition", "Dummy", "Imperatus", "Ronin", "Techion"}; -- Deprecated -rte.OffensiveLoadouts = {"Default", "Infantry Light", "Infantry Heavy", "Infantry CQB", "Infantry Grenadier", "Infantry Sniper", "Mecha"}; -rte.DefensiveLoadouts = {"Default", "Infantry Heavy", "Infantry CQB", "Infantry Sniper", "Infantry Engineer", "Mecha"}; -rte.EngineerLoadouts = {"Infantry Engineer"}; -rte.MOIDCountMax = SettingsMan.RecommendedMOIDCount;--210; --- Don't let the user set too low number as this will stop the AI from spawning any units at all -if rte.MOIDCountMax < 140 then - rte.MOIDCountMax = 140 -end -rte.DefenderMOIDMax = rte.MOIDCountMax - 80; --140 -rte.AIMOIDMax = math.ceil(rte.MOIDCountMax / 4);--50; -- Per every AI team +rte.MOIDCountMax = math.max(SettingsMan.RecommendedMOIDCount * 3, 250); +rte.AIMOIDMax = rte.MOIDCountMax/4; +rte.DefenderMOIDMax = rte.MOIDCountMax - rte.AIMOIDMax; rte.NoMOID = 255; rte.SpawnIntervalScale = 1.0; rte.StartingFundsScale = 1.0; -rte.PassengerMax = 3; -- Deprecated. Use 'Craft.MaxPassengers' instead -rte.DiggersRate = 0.4 -rte.MetabaseArea = "MetabaseServiceArea" +rte.DiggersRate = 0.4; +rte.MetabaseArea = "MetabaseServiceArea"; rte.PxTravelledPerFrame = GetPPM() * TimerMan.DeltaTimeSecs; --- Materials +--Materials rte.airID = 0; rte.goldID = 2; -rte.doorID = 4; -- Xenocronium +rte.doorID = 4; --Xenocronium rte.grassID = 128; diff --git a/Base.rte/Craft/Dropships/DropshipMK1.ini b/Base.rte/Craft/Dropships/DropshipMK1.ini index 12638ce84..085a79afa 100644 --- a/Base.rte/Craft/Dropships/DropshipMK1.ini +++ b/Base.rte/Craft/Dropships/DropshipMK1.ini @@ -13,7 +13,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -13 Y = -13 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -40,7 +40,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -14 Y = -7 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -67,7 +67,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -20 Y = -9 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -94,7 +94,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -13 Y = -14 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -121,7 +121,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -16 Y = -14 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -148,7 +148,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -14 Y = -13 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -175,7 +175,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -15 Y = -12 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -202,7 +202,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -19 Y = -16 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -229,7 +229,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -17 Y = -12 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -256,7 +256,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -18 Y = -13 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -283,7 +283,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -18 Y = -23 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -310,7 +310,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -18 Y = -11 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -337,7 +337,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -16 Y = -17 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -364,7 +364,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -20 Y = -11 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -390,7 +390,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -14 Y = -10 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -417,7 +417,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -46 Y = -32 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -578,7 +578,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -12 Y = -11 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -605,7 +605,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -11 Y = -11 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -632,7 +632,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -11 Y = -8 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -659,7 +659,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -8 Y = -12 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -686,7 +686,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -13 Y = -7 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -713,7 +713,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -12 Y = -9 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -740,7 +740,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -16 Y = -8 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -767,7 +767,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -9 Y = -12 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -798,7 +798,7 @@ AddEffect = AEmitter SpriteOffset = Vector X = -12 Y = -21 - AngularVel = 6 + AngularVel = 5 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -815,7 +815,7 @@ AddEffect = AEmitter JointOffset = Vector X = 17 Y = 0 - JointStrength = 1800 + JointStrength = 3600 JointStiffness = 1.0 DrawAfterParent = 1 EntryWound = AEmitter @@ -859,7 +859,7 @@ AddEffect = AEmitter EmissionOffset = Vector X = 1 Y = 28 - ParticlesPerMinute = 5000 + ParticlesPerMinute = 10000 MinThrottleRange = 1.0 MaxThrottleRange = 0.3 BurstSize = 10 @@ -871,8 +871,9 @@ AddEffect = AEmitter Flash = Attachable CopyOf = Jet Flame A FlashOnlyOnBurst = 0 - GibImpulseLimit = 2100 - GibWoundLimit = 30 + GibImpulseLimit = 4200 + GibWoundLimit = 35 + GibWithParentChance = 0.2 GibSound = SoundContainer CopyOf = Craft Engine Gib AddGib = Gib @@ -1043,7 +1044,7 @@ AddEffect = AEmitter SpriteOffset = Vector X = -22 Y = -21 - AngularVel = 6 + AngularVel = 5 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -1057,7 +1058,7 @@ AddEffect = AEmitter Resolution = 7 Depth = 4 DeepCheck = 0 - JointStrength = 1800 + JointStrength = 3600 JointStiffness = 1.0 JointOffset = Vector X = -16 @@ -1101,7 +1102,7 @@ AddEffect = AEmitter EmissionOffset = Vector X = 0 Y = 28 - ParticlesPerMinute = 5000 + ParticlesPerMinute = 10000 MinThrottleRange = 1.0 MaxThrottleRange = 0.3 BurstSize = 10 @@ -1113,8 +1114,9 @@ AddEffect = AEmitter Flash = Attachable CopyOf = Jet Flame A FlashOnlyOnBurst = 0 - GibImpulseLimit = 2100 - GibWoundLimit = 30 + GibImpulseLimit = 4200 + GibWoundLimit = 35 + GibWithParentChance = 0.2 GibSound = SoundContainer CopyOf = Craft Engine Gib AddGib = Gib @@ -1338,7 +1340,7 @@ AddEffect = AEmitter Resolution = 3 Depth = 5 DeepCheck = 0 - JointStrength = 0 + JointStrength = 10000 JointStiffness = 1 DrawAfterParent = 1 AddEmission = Emission @@ -1377,6 +1379,7 @@ AddEffect = AEmitter Flash = Attachable CopyOf = Muzzle Flash Pistol FlashOnlyOnBurst = 0 + GibWithParentChance = 1 AddGib = Gib GibParticle = MOSParticle CopyOf = Gib Metal Grey Tiny A @@ -1410,16 +1413,15 @@ AddActor = Attachable Resolution = 10 Depth = 2 DeepCheck = 1 - JointStrength = 700 + JointStrength = 750 JointStiffness = 1 - BreakWound = AEmitter - CopyOf = Leaking Machinery ParentBreakWound = AEmitter CopyOf = Leaking Machinery JointOffset = Vector X = 18 Y = -38 DrawAfterParent = 0 + //Add gibs!! AddActor = Attachable @@ -1459,7 +1461,7 @@ AddActor = ACDropShip ExitWound = AEmitter CopyOf = Leaking Machinery GoldValue = 500 - DeliveryDelayMultiplier = 2.0 + DeliveryDelayMultiplier = 1.8 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -1527,7 +1529,10 @@ AddActor = ACDropShip HatchDelay = 250 HatchOpenSound = SoundContainer AddSound = ContentFile - FilePath = Base.rte/Sounds/Craft/HatchOpen.flac + FilePath = Base.rte/Sounds/Craft/HatchOpen1.flac + HatchCloseSound = SoundContainer + AddSound = ContentFile + FilePath = Base.rte/Sounds/Craft/HatchOpen1.flac AddExit = Exit Offset = Vector X = 0 @@ -1542,7 +1547,7 @@ AddActor = ACDropShip CanLand = 0 GibImpulseLimit = 24000 GibBlastStrength = 50 - GibWoundLimit = 75 + GibWoundLimit = 80 GibSound = SoundContainer CopyOf = Craft Body Gib AddGib = Gib diff --git a/Base.rte/Craft/Rockets/MK2/RocketMK2.ini b/Base.rte/Craft/Rockets/MK2/RocketMK2.ini index 044a04722..6d0056b75 100644 --- a/Base.rte/Craft/Rockets/MK2/RocketMK2.ini +++ b/Base.rte/Craft/Rockets/MK2/RocketMK2.ini @@ -13,7 +13,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -13 Y = -8 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -34,7 +34,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -5 Y = -17 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -55,7 +55,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -9 Y = -15 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -76,7 +76,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -9 Y = -8 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -97,7 +97,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -11 Y = -9 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -118,7 +118,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -12 Y = -13 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -139,7 +139,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -13 Y = -20 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -160,7 +160,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -11 Y = -18 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -305,7 +305,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -11 Y = -13 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -326,7 +326,7 @@ AddEffect = MOSRotating SpriteOffset = Vector X = -16 Y = -35 - AngularVel = 6 + AngularVel = 1 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -518,7 +518,8 @@ AddEffect = AEmitter EmissionsIgnoreThis = 1 BurstScale = 1 BurstTriggered = 1 - BurstSpacing = 100 + BurstSpacing = 150 + GibWithParentChance = 1 AddActor = ACRocket @@ -609,7 +610,10 @@ AddActor = ACRocket HatchDelay = 220 HatchOpenSound = SoundContainer AddSound = ContentFile - FilePath = Base.rte/Sounds/Craft/HatchOpen.flac + FilePath = Base.rte/Sounds/Craft/HatchOpen1.flac + HatchCloseSound = SoundContainer + AddSound = ContentFile + FilePath = Base.rte/Sounds/Craft/HatchOpen1.flac AddExit = Exit Offset = Vector X = 15 diff --git a/Base.rte/Craft/Shared.ini b/Base.rte/Craft/Shared.ini index f19136e4a..00393efd7 100644 --- a/Base.rte/Craft/Shared.ini +++ b/Base.rte/Craft/Shared.ini @@ -76,8 +76,31 @@ AddEffect = Leg MoveSpeed = 0.2 GibImpulseLimit = 10000 GibWoundLimit = 8 + GibWithParentChance = 0.2 GibSound = SoundContainer CopyOf = Bone Crack + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Grey Tiny A + Count = 4 + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Gib Metal Rusty Small A + Offset = Vector + X = 5 + Y = -2 + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Gib Metal Rusty Small B + Offset = Vector + X = -1 + Y = 0 + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Gib Metal Rusty Small C + Offset = Vector + X = 1 + Y = -3 /////////////////////////////////////////////////////////////////////// @@ -112,7 +135,7 @@ AddEffect = AEmitter Resolution = 3 Depth = 5 DeepCheck = 0 - JointStrength = 0 + JointStrength = 10000 JointStiffness = 1 DrawAfterParent = 1 AddEmission = Emission @@ -151,6 +174,7 @@ AddEffect = AEmitter Flash = Attachable CopyOf = Muzzle Flash Pistol FlashOnlyOnBurst = 0 + GibWithParentChance = 1 AddGib = Gib GibParticle = MOSParticle CopyOf = Gib Metal Grey Tiny A @@ -184,7 +208,7 @@ AddEffect = AEmitter Resolution = 3 Depth = 5 DeepCheck = 0 - JointStrength = 0 + JointStrength = 10000 JointStiffness = 1 JointOffset = Vector X = -1 @@ -229,6 +253,7 @@ AddEffect = AEmitter Flash = Attachable CopyOf = Muzzle Flash Pistol FlashOnlyOnBurst = 0 + GibWithParentChance = 1 AddGib = Gib GibParticle = MOSParticle CopyOf = Gib Metal Grey Tiny A diff --git a/Base.rte/Craft/Shared/AttachableTurret.lua b/Base.rte/Craft/Shared/AttachableTurret.lua index d3f534a42..124d9bc59 100644 --- a/Base.rte/Craft/Shared/AttachableTurret.lua +++ b/Base.rte/Craft/Shared/AttachableTurret.lua @@ -15,8 +15,14 @@ end function Update(self) local parent = self:GetParent(); if parent then + --Aim directly away from parent + local posTrace = SceneMan:ShortestDistance(parent.Pos, self.Pos, SceneMan.SceneWrapsX):SetMagnitude(self.searchRange * 0.5); + self.RotAngle = (math.pi * 0.5 * self.verticalFactor + posTrace.AbsRadAngle + (parent.HFlipped and math.pi or 0))/(1 + self.verticalFactor) - self.rotation; if IsActor(parent) then parent = ToActor(parent); + if parent.Status ~= Actor.STABLE then + return; + end local controller = parent:GetController(); if controller:IsState(Controller.MOVE_RIGHT) then @@ -40,9 +46,6 @@ function Update(self) else self.verticalFactor = 0; end - --Aim directly away from parent - local posTrace = SceneMan:ShortestDistance(parent.Pos, self.Pos, SceneMan.SceneWrapsX):SetMagnitude(self.searchRange * 0.5); - self.RotAngle = (1.57 * self.verticalFactor + posTrace.AbsRadAngle + (parent.HFlipped and math.pi or 0))/(1 + self.verticalFactor) - self.rotation; if self.areaMode then --Area Mode local aimPos = self.Pos + Vector((self.searchRange * 0.5), 0):RadRotate(self.RotAngle); --Debug: visualize aim area diff --git a/Base.rte/Craft/Shared/Turrets.ini b/Base.rte/Craft/Shared/Turrets.ini index 97a1dc860..9da47ebf2 100644 --- a/Base.rte/Craft/Shared/Turrets.ini +++ b/Base.rte/Craft/Shared/Turrets.ini @@ -93,6 +93,7 @@ AddEffect = AEmitter FlashOnlyOnBurst = 1 GibImpulseLimit = 1000 GibWoundLimit = 4 + GibWithParentChance = 1 GibSound = SoundContainer CopyOf = Metal Body Blunt Hit AddGib = Gib diff --git a/Base.rte/Craft/StorageCrate/Crate.ini b/Base.rte/Craft/StorageCrate/Crate.ini index e8196ab41..058d4f88f 100644 --- a/Base.rte/Craft/StorageCrate/Crate.ini +++ b/Base.rte/Craft/StorageCrate/Crate.ini @@ -51,14 +51,8 @@ AddEffect = MOSRotating AddActor = ACRocket PresetName = Crate Mass = 300 - MaxInventoryMass = 300 + MaxInventoryMass = 250 MaxPassengers = 1 - Position = Vector - X = 0 - Y = -50 - Velocity = Vector - X = 0 - Y = 0 HitsMOs = 1 GetsHitByMOs = 1 SpriteFile = ContentFile @@ -95,16 +89,16 @@ AddActor = ACRocket HolsterOffset = Vector X = 0 Y = 0 - HatchDelay = 200 + HatchDelay = 300 HatchOpenSound = SoundContainer AddSound = ContentFile - FilePath = Base.rte/Sounds/Craft/HatchOpen.flac + FilePath = Base.rte/Sounds/Craft/HatchOpen2.flac AddExit = Exit Offset = Vector X = 13 Y = 0 Velocity = Vector - X = 6 + X = 5 Y = 0 Radius = 10 AddExit = Exit @@ -112,7 +106,7 @@ AddActor = ACRocket X = -13 Y = 0 Velocity = Vector - X = -6 + X = -5 Y = 0 Radius = 10 RLeg = Leg @@ -154,7 +148,7 @@ AddActor = ACRocket ParentOffset = Vector X = 0 Y = 0 -// ExitInterval = 1000 + ExitInterval = 600 RaisedGearLimbPath = LimbPath CopyOf = Null Path LoweredGearLimbPath = LimbPath @@ -165,8 +159,8 @@ AddActor = ACRocket CopyOf = Null Path CrashSound = SoundContainer CopyOf = Metal Body Blunt Hit Large -// GibImpulseLimit = 14000 -// GibWoundLimit = 10 + GibImpulseLimit = 20000 + GibWoundLimit = 15 GibSound = SoundContainer CopyOf = Metal Body Blunt Hit Large AddGib = Gib @@ -237,11 +231,12 @@ AddActor = ACRocket ScriptPath = Base.rte/Craft/StorageCrate/DropCrate.lua Description = Quick drop from an orbiting station in a strong metal crate and amazing cushions to preserve the contents that would usually never survive an orbital drop. Organic contents may suffer from mild blunt trauma. AddToGroup = Craft - Crates + Position = Vector + X = 0 + Y = -50 Velocity = Vector X = 0 Y = 20 GoldValue = 50 - DeliveryDelayMultiplier = 2.5 - Buyable = 1 - GibImpulseLimit = 20000 - GibWoundLimit = 10 \ No newline at end of file + DeliveryDelayMultiplier = 2.2 + Buyable = 1 \ No newline at end of file diff --git a/Base.rte/Craft/StorageCrate/DropCrate.lua b/Base.rte/Craft/StorageCrate/DropCrate.lua index 970b8e7c4..bdca40ca3 100644 --- a/Base.rte/Craft/StorageCrate/DropCrate.lua +++ b/Base.rte/Craft/StorageCrate/DropCrate.lua @@ -1,30 +1,29 @@ function Create(self) self.GibTimer = Timer(); - self.GibTimer:SetSimTimeLimitMS(1000 + self.InventorySize * 100); - -- Choose a random horizontal direction + --Set the crate to gib after delivering the cargo + self.GibTimer:SetSimTimeLimitMS((1 + self.InventorySize) * 600); + --Choose a random horizontal direction local randomDirection = math.random() > 0.5 and 1 or -1; - -- Randomize velocities + --Randomize velocities self.RotAngle = RangeRand(0, math.pi * 2); - self.AngularVel = -randomDirection * math.random(1, 10); self.Pos = Vector(self.Pos.X - randomDirection * math.random(99), self.Pos.Y); - -- Try not to fly off the edge in non-wrapping scenes + --Try not to fly off the edge in non-wrapping scenes if not SceneMan.SceneWrapsX then randomDirection = self.Pos.X > (SceneMan.SceneWidth - 99) and -1 or (self.Pos.X < 99 and 1 or randomDirection); end - self.Vel = Vector(randomDirection * math.random(1, 20), 40); + self.AngularVel = -randomDirection * math.random(1, 10); + self.Vel = Vector(randomDirection * math.random(1, 20), math.min(10 + 10 * 1500/SceneMan.SceneHeight, 100)); end function Update(self) - -- Apply damage to the actors inside based on impulse forces + --Apply damage to the actors inside based on impulse forces if self.TravelImpulse.Magnitude > self.Mass then - for i = 1, self.InventorySize do - local actor = self:Inventory(); + for actor in self.Inventory do if actor and IsActor(actor) and string.find(actor.Material.PresetName, "Flesh") then actor = ToActor(actor); - -- The following method is a slightly revised version of the hardcoded impulse damage system + --The following method is a slightly revised version of the hardcoded impulse damage system local impulse = self.TravelImpulse.Magnitude - actor.ImpulseDamageThreshold; local damage = impulse/(actor.GibImpulseLimit * 0.1 + actor.Material.StructuralIntegrity * 10); actor.Health = damage > 0 and actor.Health - damage or actor.Health; - actor.Status = actor.Status < Actor.DYING and Actor.UNSTABLE or actor.Status; end self:SwapNextInventory(actor, true); end @@ -33,7 +32,7 @@ function Update(self) self:GibThis(); elseif (self.Vel.Largest + math.abs(self.AngularVel)) > 5 or self.AIMode == Actor.AIMODE_STAY then self.GibTimer:Reset(); - else + elseif self.HatchState == ACraft.CLOSED then self:OpenHatch(); end end diff --git a/Base.rte/Devices/Artifacts/Artifacts.ini b/Base.rte/Devices/Artifacts/Artifacts.ini index c5e298398..4bd147be1 100644 --- a/Base.rte/Devices/Artifacts/Artifacts.ini +++ b/Base.rte/Devices/Artifacts/Artifacts.ini @@ -79,7 +79,6 @@ AddAmmo = MOSRotating Depth = 5 DeepCheck = 1 - /* AddDevice = HeldDevice PresetName = Control Chip diff --git a/Base.rte/Devices/Explosives/AntiPersonnelMine/MineDeploy.lua b/Base.rte/Devices/Explosives/AntiPersonnelMine/MineDeploy.lua index 8d1549e12..69e8b8cb8 100644 --- a/Base.rte/Devices/Explosives/AntiPersonnelMine/MineDeploy.lua +++ b/Base.rte/Devices/Explosives/AntiPersonnelMine/MineDeploy.lua @@ -16,6 +16,8 @@ function Update(self) mine.Pos = self.Pos; mine.Vel = self.Vel; mine.Sharpness = self.alliedTeam; + mine.RotAngle = self.RotAngle; + mine.HFlipped = self.HFlipped; MovableMan:AddParticle(mine); self.ToDelete = true; diff --git a/Base.rte/Devices/Explosives/AntiPersonnelMine/MineSet.lua b/Base.rte/Devices/Explosives/AntiPersonnelMine/MineSet.lua index 5a10dfd31..523cd81e7 100644 --- a/Base.rte/Devices/Explosives/AntiPersonnelMine/MineSet.lua +++ b/Base.rte/Devices/Explosives/AntiPersonnelMine/MineSet.lua @@ -28,7 +28,7 @@ function Create(self) self.checkDelay = 100; self.checkDelayExtension = 0.1; - self.detonateThreshold = 10; + self.detonateThreshold = 15; self.detonateDelay = 200; end diff --git a/Base.rte/Devices/Explosives/ClusterMineBomb/ClusterMineBomb.ini b/Base.rte/Devices/Explosives/ClusterMineBomb/ClusterMineBomb.ini index 56a093968..d6a50ee2f 100644 --- a/Base.rte/Devices/Explosives/ClusterMineBomb/ClusterMineBomb.ini +++ b/Base.rte/Devices/Explosives/ClusterMineBomb/ClusterMineBomb.ini @@ -94,7 +94,7 @@ AddDevice = TDExplosive AddToGroup = Bombs AddToGroup = Bombs - Payloads Description = Mine field deployment bomb. ONLY for dropship use. Scatter mines across the battlefield to stop enemy advances! Explodes several meters above the ground to assure maximum coverage. - Mass = 30 + Mass = 35 OrientToVel = 0.8 RestThreshold = -500 HitsMOs = 1 diff --git a/Base.rte/Devices/Explosives/ClusterMineBomb/ClusterMineBomb.lua b/Base.rte/Devices/Explosives/ClusterMineBomb/ClusterMineBomb.lua index 93e7ae0be..875c5ec8e 100644 --- a/Base.rte/Devices/Explosives/ClusterMineBomb/ClusterMineBomb.lua +++ b/Base.rte/Devices/Explosives/ClusterMineBomb/ClusterMineBomb.lua @@ -34,7 +34,7 @@ function Update(self) for i = 1, self.mineCount do local mine = CreateMOSRotating("Anti Personnel Mine Active"); mine.Pos = self.Pos; - mine.Vel = self.Vel/2 + Vector(self.Vel.X, self.Vel.Y):RadRotate(spread * 0.6 - (spread * (i/self.mineCount)) + RangeRand(-0.1, 0.1)):SetMagnitude(20); + mine.Vel = self.Vel * 0.5 + Vector(self.Vel.X, self.Vel.Y):RadRotate(spread * 0.6 - (spread * (i/self.mineCount)) + RangeRand(-0.1, 0.1)):SetMagnitude(20); mine.Sharpness = self.alliedTeam; MovableMan:AddParticle(mine); self:GibThis(); diff --git a/Base.rte/Devices/Explosives/FragGrenade/FragGrenade.ini b/Base.rte/Devices/Explosives/FragGrenade/FragGrenade.ini index 79a66e6ca..6b9364766 100644 --- a/Base.rte/Devices/Explosives/FragGrenade/FragGrenade.ini +++ b/Base.rte/Devices/Explosives/FragGrenade/FragGrenade.ini @@ -39,8 +39,8 @@ AddDevice = TDExplosive FilePath = Base.rte/Devices/Explosives/FragGrenade/FragGrenade.png FrameCount = 2 SpriteOffset = Vector - X = -2.5 - Y = -3.5 + X = -3 + Y = -4 EntryWound = AEmitter CopyOf = Dent Metal ExitWound = AEmitter @@ -84,6 +84,10 @@ AddDevice = TDExplosive MaxThrowVel = 20 TriggerDelay = 2500 ActivatesWhenReleased = 1 + AddGib = Gib + GibParticle = MOPixel + CopyOf = Glow Explosion Big + MaxVelocity = 1 AddGib = Gib GibParticle = MOSParticle CopyOf = Side Thruster Blast Ball 1 Glow @@ -139,8 +143,8 @@ AddDevice = TDExplosive GibParticle = MOPixel CopyOf = Air Blast Scripted Spread = 0 - MaxVelocity = 80 - MinVelocity = 80 + MaxVelocity = 50 + MinVelocity = 50 InheritsVel = 0 GibImpulseLimit = 50000 GibWoundLimit = 1 \ No newline at end of file diff --git a/Base.rte/Devices/Explosives/NapalmBomb/NapalmBomb.ini b/Base.rte/Devices/Explosives/NapalmBomb/NapalmBomb.ini index 724f1f3b9..cf97d1c76 100644 --- a/Base.rte/Devices/Explosives/NapalmBomb/NapalmBomb.ini +++ b/Base.rte/Devices/Explosives/NapalmBomb/NapalmBomb.ini @@ -129,7 +129,7 @@ AddDevice = TDExplosive AddToGroup = Bombs AddToGroup = Bombs - Payloads Description = Napalm craft-bombardment bomb. ONLY for dropship use. Rain flaming death upon troopers by cooking them with hot napalm ordnance! - Mass = 30 + Mass = 35 OrientToVel = 0.8 RestThreshold = -500 HitsMOs = 1 @@ -144,7 +144,7 @@ AddDevice = TDExplosive CopyOf = Dent Metal ExitWound = AEmitter CopyOf = Dent Metal - GoldValue = 50 + GoldValue = 60 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -196,30 +196,19 @@ AddDevice = TDExplosive AddGib = Gib GibParticle = MOPixel CopyOf = Glow Explosion Huge - Spread = 2.25 - MaxVelocity = 0.1 - MinVelocity = 0 - InheritsVel = 0 - AddGib = Gib - GibParticle = MOPixel - CopyOf = Grenade Fragment Gray - Count = 10 - Spread = 3.1 - MinVelocity = 80 - MaxVelocity = 70 + MaxVelocity = 1 AddGib = Gib GibParticle = MOPixel CopyOf = Grenade Fragment Yellow Count = 20 - Spread = 3.1 - MinVelocity = 80 - MaxVelocity = 70 + MinVelocity = 70 + MaxVelocity = 80 InheritsVel = 0 AddGib = Gib GibParticle = MOPixel CopyOf = Air Blast - Count = 40 - MinVelocity = 50 + Count = 50 + MinVelocity = 40 MaxVelocity = 60 InheritsVel = 0 AddGib = Gib @@ -229,6 +218,13 @@ AddDevice = TDExplosive MinVelocity = 20 MaxVelocity = 40 LifeVariation = 0.50 + AddGib = Gib + GibParticle = MOPixel + CopyOf = Fire Burn Particle + Count = 40 + MinVelocity = 35 + MaxVelocity = 70 + InheritsVel = 0 AddGib = Gib GibParticle = PEmitter CopyOf = Flame 2 Hurt diff --git a/Base.rte/Devices/Explosives/RemoteExplosive/RemoteExplosive.ini b/Base.rte/Devices/Explosives/RemoteExplosive/RemoteExplosive.ini index 6c769cf40..7b81a067b 100644 --- a/Base.rte/Devices/Explosives/RemoteExplosive/RemoteExplosive.ini +++ b/Base.rte/Devices/Explosives/RemoteExplosive/RemoteExplosive.ini @@ -33,9 +33,9 @@ AddAmmo = AEmitter AddEmission = Emission EmittedParticle = MOPixel CopyOf = Air Blast Short - PresetName = Remote Explosive Air Blast + PresetName = Door Breacher Blast LifeTime = 10 - Mass = 20 + Mass = 25 BurstSize = 1 Spread = 0 MaxVelocity = 150 @@ -217,7 +217,7 @@ AddMOSRotating = MOSRotating AddDevice = TDExplosive PresetName = Remote Explosive AddToGroup = Bombs - Description = Manually placed C4 explosives that are automatically set to operate on your team's frequency. Place the explosive against the target surface and detonate using the detonator tool. + Description = Manually placed C4 explosives that are automatically set to operate on your team's frequency. Place the explosive against the target surface and detonate using the detonator tool. Excellent for destroying doors! Mass = 3 HitsMOs = 1 GetsHitByMOs = 1 diff --git a/Base.rte/Devices/Explosives/RemoteExplosive/RemoteExplosiveDeploy.lua b/Base.rte/Devices/Explosives/RemoteExplosive/RemoteExplosiveDeploy.lua index 0efaba849..e1159cbf3 100644 --- a/Base.rte/Devices/Explosives/RemoteExplosive/RemoteExplosiveDeploy.lua +++ b/Base.rte/Devices/Explosives/RemoteExplosive/RemoteExplosiveDeploy.lua @@ -13,7 +13,8 @@ function Update(self) local explosive = CreateMOSRotating(self.PresetName .. " Active"); explosive.Pos = self.Pos; explosive.Vel = self.Vel; - explosive.RotAngle = self.Vel.AbsRadAngle; + explosive.RotAngle = self.Vel.AbsRadAngle + (self.HFlipped and math.pi * self.FlipFactor or 0); + explosive.HFlipped = self.HFlipped; explosive.Sharpness = self.alliedTeam; MovableMan:AddParticle(explosive); diff --git a/Base.rte/Devices/Explosives/StandardBomb/StandardBomb.ini b/Base.rte/Devices/Explosives/StandardBomb/StandardBomb.ini index cf8e1a247..36d62b4e6 100644 --- a/Base.rte/Devices/Explosives/StandardBomb/StandardBomb.ini +++ b/Base.rte/Devices/Explosives/StandardBomb/StandardBomb.ini @@ -7,7 +7,7 @@ AddDevice = TDExplosive AddToGroup = Bombs AddToGroup = Bombs - Payloads Description = Normal craft-bombardment bomb. ONLY for dropship use. Fly high above before dropping these so you won't hit yourself with your own payload! - Mass = 20 + Mass = 25 OrientToVel = 0.8 RestThreshold = -500 HitsMOs = 1 @@ -22,7 +22,7 @@ AddDevice = TDExplosive CopyOf = Dent Metal ExitWound = AEmitter CopyOf = Dent Metal - GoldValue = 30 + GoldValue = 40 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -62,12 +62,12 @@ AddDevice = TDExplosive ActivatesWhenReleased = 1 AddGib = Gib GibParticle = MOSParticle - CopyOf = Gib Metal Grey Tiny A - Count = 5 + CopyOf = Gib Military Tiny A + Count = 2 AddGib = Gib GibParticle = MOSParticle - CopyOf = Gib Metal Grey Micro A - Count = 5 + CopyOf = Gib Military Micro A + Count = 3 AddGib = Gib GibParticle = MOPixel CopyOf = Glow Explosion Huge @@ -108,32 +108,32 @@ AddDevice = TDExplosive GibParticle = MOPixel CopyOf = Grenade Fragment Gray Count = 25 - MinVelocity = 40 - MaxVelocity = 80 + MinVelocity = 50 + MaxVelocity = 100 LifeVariation = 0.20 InheritsVel = 0 AddGib = Gib GibParticle = MOPixel CopyOf = Grenade Fragment Yellow Count = 25 - MinVelocity = 40 - MaxVelocity = 80 + MinVelocity = 50 + MaxVelocity = 100 LifeVariation = 0.20 InheritsVel = 0 AddGib = Gib GibParticle = MOPixel CopyOf = Grenade Fragment Scripted Count = 25 - MinVelocity = 40 - MaxVelocity = 80 + MinVelocity = 50 + MaxVelocity = 100 LifeVariation = 0.20 InheritsVel = 0 AddGib = Gib GibParticle = MOPixel CopyOf = Air Blast - Count = 50 - MinVelocity = 50 - MaxVelocity = 60 + Count = 75 + MinVelocity = 60 + MaxVelocity = 80 InheritsVel = 0 AddGib = Gib GibParticle = MOPixel diff --git a/Base.rte/Devices/Shared/Scripts/AutoReload.lua b/Base.rte/Devices/Shared/Scripts/AutoReload.lua index 13b5fe5ce..2464add96 100644 --- a/Base.rte/Devices/Shared/Scripts/AutoReload.lua +++ b/Base.rte/Devices/Shared/Scripts/AutoReload.lua @@ -1,8 +1,5 @@ function Update(self) - if self.RoundInMagCount == 0 then - local actor = MovableMan:GetMOFromID(self.RootID); - if MovableMan:IsActor(actor) then - self:Reload(); - end + if self.RoundInMagCount == 0 and IsActor(self:GetRootParent()) then + self:Reload(); end end \ No newline at end of file diff --git a/Base.rte/Devices/Shared/Scripts/BurstFire.lua b/Base.rte/Devices/Shared/Scripts/BurstFire.lua index 673239e3f..cc12debdd 100644 --- a/Base.rte/Devices/Shared/Scripts/BurstFire.lua +++ b/Base.rte/Devices/Shared/Scripts/BurstFire.lua @@ -1,5 +1,5 @@ function Create(self) - self.shotsPerBurst = 3; + self.shotsPerBurst = self:NumberValueExists("ShotsPerBurst") and self:GetNumberValue("ShotsPerBurst") or 3; self.coolDownDelay = (60000/self.RateOfFire) + 100; end function Update(self) diff --git a/Base.rte/Devices/Shared/Scripts/RecoilTilt.lua b/Base.rte/Devices/Shared/Scripts/RecoilTilt.lua index 4b939978b..054ba2bf3 100644 --- a/Base.rte/Devices/Shared/Scripts/RecoilTilt.lua +++ b/Base.rte/Devices/Shared/Scripts/RecoilTilt.lua @@ -1,5 +1,5 @@ function Create(self) - self.setRecoilAngle = 0; + self.InheritedRotAngleOffset = 0; self.recoilAngleSize = self:NumberValueExists("RecoilAngleSize") and math.rad(self:GetNumberValue("RecoilAngleSize")) or 0.5/math.sqrt(self.Radius); self.recoilAngleVariation = self:NumberValueExists("RecoilAngleVariation") and 1 - self:GetNumberValue("RecoilAngleVariation") or 0.2; self.recoilRevertSpeed = self:NumberValueExists("RecoilRevertSpeed") and self:GetNumberValue("RecoilRevertSpeed") * 0.01 or 0.01; @@ -11,17 +11,14 @@ function Create(self) DeleteEntity(template); end function Update(self) - if self.setRecoilAngle > 0 then - self.setRecoilAngle = math.max(self.setRecoilAngle - (self.recoilRevertSpeed * (1 + math.sqrt(self.RateOfFire * 0.1) * self.setRecoilAngle)), 0); + if self.InheritedRotAngleOffset > 0 then + self.InheritedRotAngleOffset = math.max(self.InheritedRotAngleOffset - (self.recoilRevertSpeed * (1 + math.sqrt(self.RateOfFire * 0.1) * self.InheritedRotAngleOffset)), 0); end if self.FiredFrame then - self.setRecoilAngle = self.setRecoilAngle + (self.recoilAngleSize * RangeRand(self.recoilAngleVariation, 1))/(1 + self.setRecoilAngle)^2; + self.InheritedRotAngleOffset = self.InheritedRotAngleOffset + (self.recoilAngleSize * RangeRand(self.recoilAngleVariation, 1))/(1 + self.InheritedRotAngleOffset)^2; end - self.RotAngle = self.RotAngle + (self.setRecoilAngle * self.FlipFactor); - local jointOffset = Vector(self.JointOffset.X * self.FlipFactor, self.JointOffset.Y):RadRotate(self.RotAngle); - self.Pos = self.Pos - jointOffset + Vector(jointOffset.X, jointOffset.Y):RadRotate(-self.setRecoilAngle * self.FlipFactor); if self.recoilStanceFactor ~= 0 then - local setStanceAngle = self.setRecoilAngle * self.recoilStanceFactor * 0.5; + local setStanceAngle = self.InheritedRotAngleOffset * self.recoilStanceFactor * 0.5; local xFactor = 1 + setStanceAngle * 0.5; self.StanceOffset = Vector(self.origStanceOffset.X/xFactor, self.origStanceOffset.Y):RadRotate(setStanceAngle); self.SharpStanceOffset = Vector(self.origSharpStanceOffset.X/xFactor, self.origSharpStanceOffset.Y):RadRotate(setStanceAngle); diff --git a/Base.rte/Devices/Shared/Scripts/ToggleDualWield.lua b/Base.rte/Devices/Shared/Scripts/ToggleDualWield.lua index 7df73211f..b76efc198 100644 --- a/Base.rte/Devices/Shared/Scripts/ToggleDualWield.lua +++ b/Base.rte/Devices/Shared/Scripts/ToggleDualWield.lua @@ -1,8 +1,8 @@ function ToggleDualWield(actor) - local gun = ToAHuman(actor).EquippedItem; - if gun and IsHDFirearm(gun) then - local isDualWieldable = ToHDFirearm(gun):IsDualWieldable(); - ToHDFirearm(gun):SetDualWieldable(not isDualWieldable); - ToHDFirearm(gun):SetOneHanded(not isDualWieldable); + local device = ToAHuman(actor).EquippedItem; + if device and IsHeldDevice(device) then + local isDualWieldable = ToHeldDevice(device):IsDualWieldable(); + ToHeldDevice(device):SetDualWieldable(not isDualWieldable); + ToHeldDevice(device):SetOneHanded(not isDualWieldable); end end \ No newline at end of file diff --git a/Base.rte/Devices/Shared/Scripts/TrajectoryGuide.lua b/Base.rte/Devices/Shared/Scripts/TrajectoryGuide.lua index c67968cfb..c027c84ea 100644 --- a/Base.rte/Devices/Shared/Scripts/TrajectoryGuide.lua +++ b/Base.rte/Devices/Shared/Scripts/TrajectoryGuide.lua @@ -95,6 +95,10 @@ function Update(self) end end PrimitiveMan:DrawCirclePrimitive(controller.Player, self.guideTable[#self.guideTable], self.guideRadius, self.guideColor); + --Optional: move view point closer to guide point? + --local viewLength = SceneMan:ShortestDistance(actor.EyePos, actor.ViewPoint, SceneMan.SceneWrapsX).Magnitude; + --local viewPoint = actor.ViewPoint + SceneMan:ShortestDistance(actor.ViewPoint, self.guideTable[#self.guideTable], SceneMan.SceneWrapsX):SetMagnitude(viewLength); + --SceneMan:SetScrollTarget(viewPoint, 0.1, false, ActivityMan:GetActivity():ScreenOfPlayer(controller.Player)); end else self.throwTimer = nil; diff --git a/Base.rte/Devices/Shields/RiotShield/RiotShield.ini b/Base.rte/Devices/Shields/RiotShield/RiotShield.ini index 8e6120dcc..d1d698a15 100644 --- a/Base.rte/Devices/Shields/RiotShield/RiotShield.ini +++ b/Base.rte/Devices/Shields/RiotShield/RiotShield.ini @@ -109,18 +109,19 @@ AddDevice = HeldDevice AtomGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Military Stuff + CopyOf = Armoured Military Stuff Resolution = 4 Depth = 0 DeepGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Military Stuff + CopyOf = Armoured Military Stuff Resolution = 4 Depth = 10 DeepCheck = 0 JointStrength = 300 JointStiffness = 0.5 + GripStrengthMultiplier = 2 JointOffset = Vector X = -2 Y = 1 @@ -137,9 +138,9 @@ Offsets for FG arm */ StanceOffset = Vector X = 8 - Y = 2 + Y = -1 SharpStanceOffset = Vector - X = 10 + X = 9 Y = -2 SupportOffset = Vector X = -5 diff --git a/Base.rte/Devices/Special/Medikit/Medikit.lua b/Base.rte/Devices/Special/Medikit/Medikit.lua index 8f3efd4da..4165eeee2 100644 --- a/Base.rte/Devices/Special/Medikit/Medikit.lua +++ b/Base.rte/Devices/Special/Medikit/Medikit.lua @@ -23,16 +23,16 @@ function Update(self) target.Health = math.min(target.Health + strength, target.MaxHealth); end if target.WoundCount > 0 then - target:RemoveWounds(math.ceil(strength * 0.15)); + target:RemoveWounds(math.ceil(strength * 0.15), true, false, false); end target:FlashWhite(50); AudioMan:PlaySound("Base.rte/Sounds/GUIs/SlicePicked.flac", self.Pos); - local targetSize = math.ceil(5 + target.Radius * 0.5); - for i = 1, targetSize do + local particleCount = math.ceil(1 + target.Radius * 0.5); + for i = 1, particleCount do local part = CreateMOPixel("Heal Glow", "Base.rte"); - local vec = Vector(targetSize * 2, 0):RadRotate(6.28/targetSize * i); - part.Pos = target.Pos + Vector(0, -targetSize * 0.3):RadRotate(target.RotAngle) + vec; + local vec = Vector(particleCount * 2, 0):RadRotate(math.pi * 2 * i/particleCount); + part.Pos = target.Pos + Vector(0, -particleCount * 0.3):RadRotate(target.RotAngle) + vec; part.Vel = target.Vel * 0.5 - Vector(vec.X, vec.Y) * 0.25; MovableMan:AddParticle(part); end diff --git a/Base.rte/Devices/Tools/Constructor/Constructor.ini b/Base.rte/Devices/Tools/Constructor/Constructor.ini index 3369226ae..3caee86db 100644 --- a/Base.rte/Devices/Tools/Constructor/Constructor.ini +++ b/Base.rte/Devices/Tools/Constructor/Constructor.ini @@ -6,8 +6,6 @@ AddEffect = MOSRotating PresetName = Constructor Terrain Clearer PinStrength = 1000 Mass = 1 - HitsMOs = 0 - GetsHitByMOs = 0 SpriteFile = ContentFile FilePath = Base.rte/Devices/Tools/Constructor/Dot.png FrameCount = 1 @@ -80,21 +78,14 @@ AddEffect = MOPixel AddEffect = MOPixel PresetName = Particle Constructor Concrete 1 - Mass = 0.1 - LifeTime = 100 - RestThreshold = 1000 - PinStrength = 1000 - HitsMOs = 0 - GetsHitByMOs = 0 + Mass = 1 Color = Color R = 107 G = 88 B = 77 Atom = Atom Material = Material - CopyOf = Concrete - PresetName = Constructor Concrete - SettleMaterial = 177 + CopyOf = Wet Concrete AddEffect = MOPixel @@ -104,9 +95,6 @@ AddEffect = MOPixel R = 142 G = 139 B = 116 - Atom = Atom - Material = Material - CopyOf = Constructor Concrete AddEffect = MOPixel @@ -344,7 +332,6 @@ AddAmmo = Magazine Y = 1 DrawAfterParent = 0 RoundCount = -1 - RTTRatio = 0 RegularRound = Round CopyOf = Null Round @@ -396,7 +383,6 @@ AddDevice = HDFirearm X = -5 Y = 3 DrawAfterParent = 0 - OneHanded = 0 StanceOffset = Vector X = 7 Y = 7 @@ -436,8 +422,6 @@ AddDevice = HDFirearm SharpShakeRange = 1 NoSupportFactor = 2 ParticleSpreadRange = 70 - ShellSpreadRange = 0 - ShellAngVelRange = 0 AddPieSlice = Slice Description = Cancel Construction Direction = 1 @@ -482,9 +466,6 @@ AddDevice = HDFirearm MuzzleOffset = Vector X = 13 Y = -1 - EjectionOffset = Vector - X = 1 - Y = -1 AddGib = Gib GibParticle = MOPixel CopyOf = Spark Yellow 1 diff --git a/Base.rte/Devices/Tools/Constructor/Constructor.lua b/Base.rte/Devices/Tools/Constructor/Constructor.lua index 7ce079c98..bcd3efea2 100644 --- a/Base.rte/Devices/Tools/Constructor/Constructor.lua +++ b/Base.rte/Devices/Tools/Constructor/Constructor.lua @@ -13,9 +13,9 @@ end function ConstructorWrapPos(checkPos) if SceneMan.SceneWrapsX then if checkPos.X > SceneMan.SceneWidth then - checkPos = Vector(checkPos.X - SceneMan.SceneWidth,checkPos.Y); + checkPos = Vector(checkPos.X - SceneMan.SceneWidth, checkPos.Y); elseif checkPos.X < 0 then - checkPos = Vector(SceneMan.SceneWidth + checkPos.X,checkPos.Y); + checkPos = Vector(SceneMan.SceneWidth + checkPos.X, checkPos.Y); end end return checkPos; @@ -26,35 +26,35 @@ function ConstructorFloodFill(x, y, startnum, maxnum, array, realposition, reals array[x][y] = startnum; if startnum < maxnum then - if array[x+1][y] == -1 or array[x+1][y] > startnum then - local checkPos = ConstructorWrapPos(realposition + Vector(realspacing,0)); - if SceneMan:GetTerrMatter(checkPos.X+(realspacing*0.5),checkPos.Y+(realspacing*0.5)) == rte.airID then - ConstructorFloodFill(x+1, y, startnum+1, maxnum, array, checkPos, realspacing); + if array[x + 1][y] == -1 or array[x + 1][y] > startnum then + local checkPos = ConstructorWrapPos(realposition + Vector(realspacing, 0)); + if SceneMan:GetTerrMatter(checkPos.X + (realspacing * 0.5), checkPos.Y + (realspacing * 0.5)) == rte.airID then + ConstructorFloodFill(x + 1, y, startnum + 1, maxnum, array, checkPos, realspacing); end end - if array[x-1][y] == -1 or array[x-1][y] > startnum then - local checkPos = ConstructorWrapPos(realposition + Vector(-realspacing,0)); - if SceneMan:GetTerrMatter(checkPos.X+(realspacing*0.5),checkPos.Y+(realspacing*0.5)) == rte.airID then - ConstructorFloodFill(x-1, y, startnum+1, maxnum, array, checkPos, realspacing); + if array[x - 1][y] == -1 or array[x - 1][y] > startnum then + local checkPos = ConstructorWrapPos(realposition + Vector(-realspacing, 0)); + if SceneMan:GetTerrMatter(checkPos.X + (realspacing * 0.5), checkPos.Y + (realspacing * 0.5)) == rte.airID then + ConstructorFloodFill(x - 1, y, startnum + 1, maxnum, array, checkPos, realspacing); end end - if array[x][y+1] == -1 or array[x][y+1] > startnum then - local checkPos = ConstructorWrapPos(realposition + Vector(0,realspacing)); - if SceneMan:GetTerrMatter(checkPos.X+(realspacing*0.5),checkPos.Y+(realspacing*0.5)) == rte.airID then - ConstructorFloodFill(x, y+1, startnum+1, maxnum, array, checkPos, realspacing); + if array[x][y + 1] == -1 or array[x][y + 1] > startnum then + local checkPos = ConstructorWrapPos(realposition + Vector(0, realspacing)); + if SceneMan:GetTerrMatter(checkPos.X + (realspacing * 0.5), checkPos.Y + (realspacing * 0.5)) == rte.airID then + ConstructorFloodFill(x, y + 1, startnum + 1, maxnum, array, checkPos, realspacing); end end - if array[x][y-1] == -1 or array[x][y-1] > startnum then - local checkPos = ConstructorWrapPos(realposition + Vector(0,-realspacing)); - if SceneMan:GetTerrMatter(checkPos.X+(realspacing*0.5),checkPos.Y+(realspacing*0.5)) == rte.airID then - ConstructorFloodFill(x, y-1, startnum+1, maxnum, array, checkPos, realspacing); + if array[x][y - 1] == -1 or array[x][y - 1] > startnum then + local checkPos = ConstructorWrapPos(realposition + Vector(0, -realspacing)); + if SceneMan:GetTerrMatter(checkPos.X + (realspacing * 0.5), checkPos.Y + (realspacing * 0.5)) == rte.airID then + ConstructorFloodFill(x, y - 1, startnum + 1, maxnum, array, checkPos, realspacing); end end end end function ConstructorSnapPos(checkPos) - return Vector(math.floor((checkPos.X-12)/24)*24+12,math.floor((checkPos.Y-12)/24)*24+12); + return Vector(math.floor((checkPos.X - 12)/24) * 24 + 12, math.floor((checkPos.Y - 12)/24) * 24 + 12); end function ConstructorTerrainRay(start, trace, skip) @@ -64,30 +64,27 @@ function ConstructorTerrainRay(start, trace, skip) local density = math.ceil(length/skip); - local roughLandPos = start + Vector(length,0):RadRotate(angle); + local roughLandPos = start + Vector(length, 0):RadRotate(angle); for i = 0, density do - local invector = start + Vector(skip*i,0):RadRotate(angle); + local invector = start + Vector(skip * i, 0):RadRotate(angle); local checkPos = ConstructorWrapPos(invector); - local terrCheck = SceneMan:GetTerrMatter(checkPos.X,checkPos.Y); - if terrCheck ~= rte.airID then + if SceneMan:GetTerrMatter(checkPos.X, checkPos.Y) ~= rte.airID then roughLandPos = checkPos; break; end end - local checkRoughLandPos = roughLandPos + Vector(skip*-1,0):RadRotate(angle); + local checkRoughLandPos = roughLandPos + Vector(skip * -1, 0):RadRotate(angle); for i = 0, skip do - local invector = checkRoughLandPos + Vector(i,0):RadRotate(angle); + local invector = checkRoughLandPos + Vector(i, 0):RadRotate(angle); local checkPos = ConstructorWrapPos(invector); - local terrCheck = SceneMan:GetTerrMatter(checkPos.X,checkPos.Y); roughLandPos = checkPos; - if terrCheck ~= rte.airID then + if SceneMan:GetTerrMatter(checkPos.X, checkPos.Y) ~= rte.airID then break; end end return roughLandPos; - end function Create(self) @@ -95,449 +92,441 @@ function Create(self) self.fireTimer = Timer(); self.displayTimer = Timer(); - self.startresource = 3; -- how many blocks of concrete to start with + self.startResource = 3; -- how many blocks of concrete to start with self.buildTimer = Timer(); - self.buildlist = {}; - self.buildcost = 80; -- how much resource is required per one build 2 x 2 px piece + self.buildList = {}; + self.buildCost = 80; -- how much resource is required per one build 2 x 2 px piece - self.fullBlock = 65 * self.buildcost; -- one full block of concrete requires 65 units of resource - self.resource = 1 + self.startresource * self.fullBlock; + self.fullBlock = 65 * self.buildCost; -- one full block of concrete requires 65 units of resource + self.resource = 1 + self.startResource * self.fullBlock; self.tunnelFillTimer = Timer(); self.clearer = CreateMOSRotating("Constructor Terrain Clearer"); - self.digstrength = 210; -- the StructualIntegrity limit the device can harvest + self.digStrength = 210; -- the StructualIntegrity limit the device can harvest - self.diglength = 50; - self.digspersecond = 100; - self.buildspersecond = 100; + self.digLength = 50; + self.digsPerSecond = 100; + self.buildsPerSecond = 100; + self.buildSound = CreateSoundContainer("Geiger Click", "Base.rte"); - self.maxresource = 10 * self.fullBlock; - self.builddistance = 400; -- pixel distance - self.minfilldistance = 5; -- block distance - self.maxfilldistance = 6; -- block distance - self.tunnelfilldelay = 30000; + self.maxResource = 10 * self.fullBlock; + self.buildDistance = 400; -- pixel distance + self.minFillDistance = 5; -- block distance + self.maxFillDistance = 6; -- block distance + self.tunnelFillDelay = 30000; -- don't change these - self.toautobuild = false; - self.aicontrolled = false; - self.displaygrid = true; - self.cursormovespeed = 2; + self.toAutoBuild = false; + self.aiControlled = false; + self.displayGrid = true; + self.cursorMoveSpeed = 2; -- autobuild for standard units - self.autobuildlist = { - Vector(-3,1), - Vector(-2,1), - Vector(-1,1), - Vector(2,1), - Vector(3,1), - Vector(4,1), - - Vector(-4,-2), - Vector(-3,-2), - Vector(0,-2), - Vector(1,-2), - Vector(4,-2), - Vector(5,-2), - - Vector(-3,-3), - Vector(4,-3), - - Vector(-3,-4), - Vector(4,-4), - - Vector(-3,-5), - Vector(-2,-5), - Vector(-1,-5), - Vector(2,-5), - Vector(3,-5), - Vector(4,-5), - - Vector(-3,-8), - Vector(-2,-8), - Vector(-1,-8), - Vector(0,-8), - Vector(1,-8), - Vector(2,-8), - Vector(3,-8), - Vector(4,-8) + self.autoBuildList = { + Vector(-3, 1), + Vector(-2, 1), + Vector(-1, 1), + Vector(2, 1), + Vector(3, 1), + Vector(4, 1), + + Vector(-4, -2), + Vector(-3, -2), + Vector(0, -2), + Vector(1, -2), + Vector(4, -2), + Vector(5, -2), + + Vector(-3, -3), + Vector(4, -3), + + Vector(-3, -4), + Vector(4, -4), + + Vector(-3, -5), + Vector(-2, -5), + Vector(-1, -5), + Vector(2, -5), + Vector(3, -5), + Vector(4, -5), + + Vector(-3, -8), + Vector(-2, -8), + Vector(-1, -8), + Vector(0, -8), + Vector(1, -8), + Vector(2, -8), + Vector(3, -8), + Vector(4, -8) }; -- autobuild for brain units - self.autobuildlistbrain = { - Vector(-2,1), - Vector(-2,0), - Vector(-2,-1), - Vector(-2,-2), - Vector(-1,-2), - Vector(0,-2), - Vector(1,-2), - Vector(2,1), - Vector(2,0), - Vector(2,-1), - Vector(2,-2), - - Vector(-3,0), - Vector(-3,-1), - Vector(-3,-2), - - Vector(-2,-3), - Vector(-1,-3), - Vector(0,-3), - Vector(1,-3), - Vector(2,-3), - - Vector(3,0), - Vector(3,-1), - Vector(3,-2) + self.autoBuildListBrain = { + Vector(-2, 1), + Vector(-2, 0), + Vector(-2, -1), + Vector(-2, -2), + Vector(-1, -2), + Vector(0, -2), + Vector(1, -2), + Vector(2, 1), + Vector(2, 0), + Vector(2, -1), + Vector(2, -2), + + Vector(-3, 0), + Vector(-3, -1), + Vector(-3, -2), + + Vector(-2, -3), + Vector(-1, -3), + Vector(0, -3), + Vector(1, -3), + Vector(2, -3), + + Vector(3, 0), + Vector(3, -1), + Vector(3, -2) }; end function Update(self) - if self.RootID ~= rte.NoMOID then - local actor = MovableMan:GetMOFromID(self.RootID); - if MovableMan:IsActor(actor) then + local actor = self:GetRootParent(); + if actor and IsActor(actor) then + + actor = ToActor(actor); + local ctrl = actor:GetController(); + local screen = ActivityMan:GetActivity():ScreenOfPlayer(ctrl.Player); - actor = ToActor(actor); - local ctrl = actor:GetController(); - local screen = ActivityMan:GetActivity():ScreenOfPlayer(ctrl.Player); - - if self.Magazine then - self.Magazine.RoundCount = self.resource; - end - - if ctrl:IsState(Controller.PIE_MENU_ACTIVE) then - PrimitiveMan:DrawTextPrimitive(screen, actor.AboveHUDPos + Vector(0, 26), "Mode: ".. self:GetStringValue("ConstructorMode"), true, 1); - end - - -- constructor actions if the user is in gold dig mode - if actor.AIMode == Actor.AIMODE_GOLDDIG then - if self.toautobuild == false then - if actor:IsPlayerControlled() == false then - if self:GetStringValue("ConstructorMode") == "Spray" then - self:SetStringValue("ConstructorMode", "Dig"); + if self.Magazine then + self.Magazine.RoundCount = self.resource; + end + + if ctrl:IsState(Controller.PIE_MENU_ACTIVE) then + PrimitiveMan:DrawTextPrimitive(screen, actor.AboveHUDPos + Vector(0, 26), "Mode: ".. self:GetStringValue("ConstructorMode"), true, 1); + end + + -- constructor actions if the user is in gold dig mode + if actor.AIMode == Actor.AIMODE_GOLDDIG then + if self.toAutoBuild == false then + if actor:IsPlayerControlled() == false then + if self:GetStringValue("ConstructorMode") == "Spray" then + self:SetStringValue("ConstructorMode", "Dig"); + end + if ctrl:IsState(Controller.WEAPON_FIRE) and SceneMan:ShortestDistance(actor.Pos, ConstructorTerrainRay(actor.Pos, Vector(0, 50), 3), SceneMan.SceneWrapsX).Magnitude < 30 then + self.tunnelFillTimer:Reset(); + self.aiControlled = true; + self.displayGrid = false; + self.toAutoBuild = true; + self.buildList = {}; + local snappos = ConstructorSnapPos(actor.Pos); + local buildscheme = self.autoBuildList; + if actor:HasObjectInGroup("Brains") then + buildscheme = self.autoBuildListBrain; end - if ctrl:IsState(Controller.WEAPON_FIRE) and SceneMan:ShortestDistance(actor.Pos, ConstructorTerrainRay(actor.Pos,Vector(0,50),3), SceneMan.SceneWrapsX).Magnitude < 30 then - self.tunnelFillTimer:Reset(); - self.aicontrolled = true; - self.displaygrid = false; - self.toautobuild = true; - self.buildlist = {}; - local snappos = ConstructorSnapPos(actor.Pos); - local buildscheme = self.autobuildlist; - if actor:HasObjectInGroup("Brains") then - buildscheme = self.autobuildlistbrain; - end - for i = 1, #buildscheme do - local temppos = snappos + Vector(buildscheme[i].X*24,buildscheme[i].Y*24); - local buildthis = {}; - buildthis[1] = temppos.X; - buildthis[2] = temppos.Y; - buildthis[3] = 0; - self.buildlist[#self.buildlist+1] = buildthis; - end - + for i = 1, #buildscheme do + local temppos = snappos + Vector(buildscheme[i].X * 24, buildscheme[i].Y * 24); + local buildThis = {}; + buildThis[1] = temppos.X; + buildThis[2] = temppos.Y; + buildThis[3] = 0; + self.buildList[#self.buildList + 1] = buildThis; end - else - self.toautobuild = true; + end + else + self.toAutoBuild = true; end + end - -- constructor actions if it's AI controlled - if self.aicontrolled then - if self.tunnelFillTimer:IsPastSimMS(self.tunnelfilldelay) and #self.buildlist == 0 then - self.tunnelFillTimer:Reset(); - - -- create an empty 2D array, call cells having -1 - local floodfilllistx = {}; - for x = 1, (self.maxfilldistance*2)+1 do - floodfilllistx[x] = {}; - for y = 1, (self.maxfilldistance*2)+1 do - floodfilllistx[x][y] = -1; - end + -- constructor actions if it's AI controlled + if self.aiControlled then + if self.tunnelFillTimer:IsPastSimMS(self.tunnelFillDelay) and #self.buildList == 0 then + self.tunnelFillTimer:Reset(); + + -- create an empty 2D array, call cells having -1 + local floodFillListX = {}; + for x = 1, (self.maxFillDistance * 2) + 1 do + floodFillListX[x] = {}; + for y = 1, (self.maxFillDistance * 2) + 1 do + floodFillListX[x][y] = -1; end + end - -- figure out the center of the grid - local center = math.ceil(((self.maxfilldistance*2)+1)/2); - - -- FLOOD FILL! - ConstructorFloodFill(center, center, 0, self.maxfilldistance, floodfilllistx, ConstructorSnapPos(actor.Pos), 24); - - -- dump the correctly numbered cells into the build table - for x = 1, #floodfilllistx do - for y = 1, #floodfilllistx do - if floodfilllistx[x][y] >= self.minfilldistance and floodfilllistx[x][y] <= self.maxfilldistance then - local mapx = ConstructorSnapPos(actor.Pos).X + ((center - x) * -24); - local mapy = ConstructorSnapPos(actor.Pos).Y + ((center - y) * -24); - local freeslot = true; - for i = 1, #self.buildlist do - if self.buildlist[i] ~= nil and self.buildlist[i][1] == mapx and self.buildlist[i][2] == mapy then - freeslot = false; - break; - end - end - if freeslot then - local buildthis = {}; - buildthis[1] = mapx; - buildthis[2] = mapy; - buildthis[3] = 0; - self.buildlist[#self.buildlist+1] = buildthis; + -- figure out the center of the grid + local center = math.ceil(((self.maxFillDistance * 2) + 1) * 0.5); + + -- FLOOD FILL! + ConstructorFloodFill(center, center, 0, self.maxFillDistance, floodFillListX, ConstructorSnapPos(actor.Pos), 24); + + -- dump the correctly numbered cells into the build table + for x = 1, #floodFillListX do + for y = 1, #floodFillListX do + if floodFillListX[x][y] >= self.minFillDistance and floodFillListX[x][y] <= self.maxFillDistance then + local mapX = ConstructorSnapPos(actor.Pos).X + ((center - x) * -24); + local mapY = ConstructorSnapPos(actor.Pos).Y + ((center - y) * -24); + local freeSlot = true; + for i = 1, #self.buildList do + if self.buildList[i] ~= nil and self.buildList[i][1] == mapX and self.buildList[i][2] == mapY then + freeSlot = false; + break; end end + if freeSlot then + local buildThis = {}; + buildThis[1] = mapX; + buildThis[2] = mapY; + buildThis[3] = 0; + self.buildList[#self.buildList + 1] = buildThis; + end end end end end - else - self.toautobuild = false; end - local mode = self:GetNumberValue("BuildMode"); - if mode == 0 then - -- activation - if ctrl:IsState(Controller.WEAPON_FIRE) then + else + self.toAutoBuild = false; + end + local mode = self:GetNumberValue("BuildMode"); + if mode == 0 and not self.cursor then + -- activation + if ctrl:IsState(Controller.WEAPON_FIRE) then - local angle = actor:GetAimAngle(true); - - if self:GetStringValue("ConstructorMode") == "Spray" then - - if self.resource > self.buildcost / 5 then - for i = 1, 4 do - local hue = "Light"; - if math.random() < 0.5 then - hue = "Dark"; - end - local spray = CreateMOPixel("Particle Concrete "..hue); - spray.Pos = self.MuzzlePos; - spray.Vel = self.Vel + Vector(11, 0):RadRotate(angle + RangeRand(-0.1, 0.1)); - spray.Team = self.Team; - spray.IgnoresTeamHits = true; - MovableMan:AddParticle(spray); - end - self.resource = self.resource - self.buildcost / 5; - else - self:Deactivate(); + local angle = actor:GetAimAngle(true); + + if self:GetStringValue("ConstructorMode") == "Spray" then + + if self.resource > self.buildCost * 0.2 then + for i = 1, 4 do + local spray = CreateMOPixel("Particle Concrete " .. (math.random() < 0.5 and "Light" or "Dark")); + spray.Pos = self.MuzzlePos; + spray.Vel = self.Vel + Vector(11, 0):RadRotate(angle + RangeRand(-0.1, 0.1)); + spray.Team = self.Team; + spray.IgnoresTeamHits = true; + MovableMan:AddParticle(spray); end + self.resource = self.resource - self.buildCost * 0.2; else + self:Deactivate(); + end + else + + local digAmount = (self.fireTimer.ElapsedSimTimeMS * 0.001) * self.digsPerSecond; + self.fireTimer:Reset(); + + for i = 1, digAmount do + + local digPos = ConstructorTerrainRay(self.MuzzlePos, Vector(self.digLength, 0):RadRotate(angle + (math.random() * (math.pi/4)) - (math.pi/8)), 1); - local digamount = (self.fireTimer.ElapsedSimTimeMS/1000)*self.digspersecond; - self.fireTimer:Reset(); - - for i = 1, digamount do - - local digpos = ConstructorTerrainRay(self.MuzzlePos, Vector(self.diglength,0):RadRotate(angle + (math.random()*(math.pi/4)) - (math.pi/8)), 1); - - if SceneMan:GetTerrMatter(digpos.X,digpos.Y) ~= 0 then - - local diddig = false; - - for x = 1, 3 do - for y = 1, 3 do - local checkpos = ConstructorWrapPos(Vector(digpos.X-1+x,digpos.Y-1+y)); - if SceneMan:GetTerrMatter(checkpos.X,checkpos.Y) ~= 0 then - if SceneMan:GetTerrMatter(checkpos.X,checkpos.Y) == 2 then - self.clearer.Pos = Vector(checkpos.X,checkpos.Y); - self.clearer:EraseFromTerrain(); - local collectfx2 = CreateMOPixel("Particle Constructor Gather Material Gold"); - collectfx2.Pos = Vector(checkpos.X,checkpos.Y); - collectfx2.Sharpness = self.ID; - MovableMan:AddParticle(collectfx2); - else - local matstrength = SceneMan:CastStrengthSumRay(Vector(checkpos.X,checkpos.Y-1),Vector(checkpos.X,checkpos.Y),0,0); - if matstrength > 0 and matstrength < self.digstrength then - if math.random() > (1/(self.digstrength/matstrength)) then - self.resource = math.min(self.resource + math.ceil(matstrength*0.1), self.maxresource); - self.clearer.Pos = Vector(checkpos.X,checkpos.Y); - self.clearer:EraseFromTerrain(); - diddig = true; - end - else -- deactivate if material is too strong - self:Deactivate(); - break; + if SceneMan:GetTerrMatter(digPos.X, digPos.Y) ~= rte.airID then + + local didDig = false; + + for x = 1, 3 do + for y = 1, 3 do + local checkPos = ConstructorWrapPos(Vector(digPos.X - 1 + x, digPos.Y - 1 + y)); + if SceneMan:GetTerrMatter(checkPos.X, checkPos.Y) ~= rte.airID then + if SceneMan:GetTerrMatter(checkPos.X, checkPos.Y) == rte.goldID then + self.clearer.Pos = Vector(checkPos.X, checkPos.Y); + self.clearer:EraseFromTerrain(); + local collectFX = CreateMOPixel("Particle Constructor Gather Material Gold"); + collectFX.Pos = Vector(checkPos.X, checkPos.Y); + collectFX.Sharpness = self.ID; + MovableMan:AddParticle(collectFX); + else + local matstrength = SceneMan:CastStrengthSumRay(Vector(checkPos.X, checkPos.Y - 1), Vector(checkPos.X, checkPos.Y), 0, 0); + if matstrength > 0 and matstrength < self.digStrength then + if math.random() > 1/(self.digStrength/matstrength) then + self.resource = math.min(self.resource + math.ceil(matstrength * 0.1), self.maxResource); + self.clearer.Pos = Vector(checkPos.X, checkPos.Y); + self.clearer:EraseFromTerrain(); + didDig = true; end + else -- deactivate if material is too strong + self:Deactivate(); + break; end end end end - - if diddig then - local collectfx = CreateMOPixel("Particle Constructor Gather Material"); - collectfx.Pos = Vector(digpos.X,digpos.Y); - collectfx.Sharpness = self.ID; - MovableMan:AddParticle(collectfx); - end - else -- deactivate if digging air - self:Deactivate(); - break; end + if didDig then + local collectFX = CreateMOPixel("Particle Constructor Gather Material"); + collectFX.Pos = Vector(digPos.X, digPos.Y); + collectFX.Sharpness = self.ID; + MovableMan:AddParticle(collectFX); + end + else -- deactivate if digging air + self:Deactivate(); + break; end end - else - self.fireTimer:Reset(); end + else + self.fireTimer:Reset(); + end - elseif mode == 1 then -- cancel - self:RemoveNumberValue("BuildMode"); + elseif mode == 1 then -- cancel + self:RemoveNumberValue("BuildMode"); - self.buildlist = {}; - self.cursor = nil; + self.buildList = {}; + self.cursor = nil; - elseif mode == 2 then -- build - self:RemoveNumberValue("BuildMode"); + elseif mode == 2 then -- build + self:RemoveNumberValue("BuildMode"); - -- constructor build cursor - if actor:IsPlayerControlled() then - self.cursor = Vector(self.MuzzlePos.X, self.MuzzlePos.Y); - end - end - local displayColorBlue = 5; - local displayColorYellow = 120; - local displayColorRed = 13; - local displayColorWhite = 254; - if self.displayTimer:IsPastSimMS(TimerMan.DeltaTimeMS) then - self.displayTimer:Reset(); - -- flickering colors - displayColorBlue = 195; - displayColorYellow = 116; - displayColorRed = 12; - displayColorWhite = 252; + -- constructor build cursor + if actor:IsPlayerControlled() then + self.cursor = Vector(self.MuzzlePos.X, self.MuzzlePos.Y); end + end + local displayColorBlue = 5; + local displayColorYellow = 120; + local displayColorRed = 13; + local displayColorWhite = 254; + if self.displayTimer:IsPastSimMS(TimerMan.DeltaTimeMS) then + self.displayTimer:Reset(); + -- flickering colors + displayColorBlue = 195; + displayColorYellow = 116; + displayColorRed = 12; + displayColorWhite = 252; + end + + if self.cursor then + + actor.ViewPoint = self.cursor; - if self.cursor then + local cursorMovement = Vector(); - actor.ViewPoint = self.cursor; + if ctrl:IsMouseControlled() then + cursorMovement = cursorMovement + ctrl.MouseMovement; + else + if ctrl:IsState(Controller.HOLD_UP) or ctrl:IsState(Controller.BODY_JUMP) then + cursorMovement = cursorMovement + Vector(0, -1); + end + if ctrl:IsState(Controller.HOLD_DOWN) or ctrl:IsState(Controller.BODY_CROUCH) then + cursorMovement = cursorMovement + Vector(0, 1); + end + if ctrl:IsState(Controller.HOLD_LEFT) then + cursorMovement = cursorMovement + Vector(-1, 0); + end + if ctrl:IsState(Controller.HOLD_RIGHT) then + cursorMovement = cursorMovement + Vector(1, 0); + end + end - local cursorMovement = Vector(); - + if cursorMovement.Magnitude > 0 then if ctrl:IsMouseControlled() then - cursorMovement = cursorMovement + ctrl.MouseMovement; + self.cursor = self.cursor + cursorMovement; else - if ctrl:IsState(Controller.HOLD_UP) or ctrl:IsState(Controller.BODY_JUMP) then - cursorMovement = cursorMovement + Vector(0, -1); - end - if ctrl:IsState(Controller.HOLD_DOWN) or ctrl:IsState(Controller.BODY_CROUCH) then - cursorMovement = cursorMovement + Vector(0, 1); - end - if ctrl:IsState(Controller.HOLD_LEFT) then - cursorMovement = cursorMovement + Vector(-1, 0); - end - if ctrl:IsState(Controller.HOLD_RIGHT) then - cursorMovement = cursorMovement + Vector(1, 0); - end + self.cursor = self.cursor + cursorMovement:SetMagnitude(self.cursorMoveSpeed); end + end - if cursorMovement.Magnitude > 0 then - if ctrl:IsMouseControlled() then - self.cursor = self.cursor + cursorMovement; - else - self.cursor = self.cursor + cursorMovement:SetMagnitude(self.cursormovespeed); - end - end + local mapX = math.floor((self.cursor.X - 12)/24) * 24 + 12; + local mapY = math.floor((self.cursor.Y - 12)/24) * 24 + 12; - local mapx = math.floor((self.cursor.X - 12)/24) * 24 + 12; - local mapy = math.floor((self.cursor.Y - 12)/24) * 24 + 12; - - PrimitiveMan:DrawLinePrimitive(screen, self.cursor + Vector(0, 4), self.cursor + Vector(0, -4), displayColorYellow); - PrimitiveMan:DrawLinePrimitive(screen, self.cursor + Vector(4, 0), self.cursor + Vector(-4, 0), displayColorYellow); - PrimitiveMan:DrawBoxPrimitive(screen, Vector(mapx, mapy), Vector(mapx + 23, mapy + 23), displayColorYellow); - - if ctrl:IsState(Controller.PIE_MENU_ACTIVE) then - self.cursor = nil; - elseif actor:IsPlayerControlled() then - -- add blocks to the build queue if the cursor is firing - if ctrl:IsState(Controller.WEAPON_FIRE) then - local freeslot = true; - for i = 1, #self.buildlist do - if self.buildlist[i] ~= nil and self.buildlist[i][1] == mapx and self.buildlist[i][2] == mapy then - freeslot = false; - break; - end - end - if freeslot then - local buildthis = {}; - buildthis[1] = mapx; - buildthis[2] = mapy; - buildthis[3] = 0; - self.buildlist[#self.buildlist+1] = buildthis; + PrimitiveMan:DrawLinePrimitive(screen, self.cursor + Vector(0, 4), self.cursor + Vector(0, -4), displayColorYellow); + PrimitiveMan:DrawLinePrimitive(screen, self.cursor + Vector(4, 0), self.cursor + Vector(-4, 0), displayColorYellow); + PrimitiveMan:DrawBoxPrimitive(screen, Vector(mapX, mapY), Vector(mapX + 23, mapY + 23), displayColorYellow); + + if ctrl:IsState(Controller.PIE_MENU_ACTIVE) or ctrl:IsState(Controller.ACTOR_NEXT_PREP) or ctrl:IsState(Controller.ACTOR_PREV_PREP) then + self.cursor = nil; + elseif actor:IsPlayerControlled() then + -- add blocks to the build queue if the cursor is firing + if ctrl:IsState(Controller.WEAPON_FIRE) then + local freeSlot = true; + for i = 1, #self.buildList do + if self.buildList[i] ~= nil and self.buildList[i][1] == mapX and self.buildList[i][2] == mapY then + freeSlot = false; + break; end end - for state = 0, 40 do -- go through and disable all 41 controller states when moving the build cursor - ctrl:SetState(state, false); + if freeSlot then + local buildThis = {}; + buildThis[1] = mapX; + buildThis[2] = mapY; + buildThis[3] = 0; + self.buildList[#self.buildList + 1] = buildThis; end - else - self.cursor = nil; end + for state = 0, 40 do -- go through and disable all 41 controller states when moving the build cursor + ctrl:SetState(state, false); + end + else + self.cursor = nil; end - -- clean up the build list of nil slots and draw the squares to show the build layout - local templist = {}; - for i = 1, #self.buildlist do - if self.buildlist[i] ~= nil then - templist[#templist+1] = self.buildlist[i]; - if self.displaygrid then - if SceneMan:ShortestDistance(actor.Pos, Vector(self.buildlist[i][1],self.buildlist[i][2]), SceneMan.SceneWrapsX).Magnitude < self.builddistance then - PrimitiveMan:DrawBoxPrimitive(screen, Vector(self.buildlist[i][1],self.buildlist[i][2]), Vector(self.buildlist[i][1]+23,self.buildlist[i][2]+23), displayColorBlue); - else - PrimitiveMan:DrawBoxPrimitive(screen, Vector(self.buildlist[i][1],self.buildlist[i][2]), Vector(self.buildlist[i][1]+23,self.buildlist[i][2]+23), displayColorRed); - end + end + -- clean up the build list of nil slots and draw the squares to show the build layout + local tempList = {}; + for i = 1, #self.buildList do + if self.buildList[i] ~= nil then + tempList[#tempList + 1] = self.buildList[i]; + if self.displayGrid then + if SceneMan:ShortestDistance(actor.Pos, Vector(self.buildList[i][1], self.buildList[i][2]), SceneMan.SceneWrapsX).Magnitude < self.buildDistance then + PrimitiveMan:DrawBoxPrimitive(screen, Vector(self.buildList[i][1], self.buildList[i][2]), Vector(self.buildList[i][1] + 23, self.buildList[i][2] + 23), displayColorBlue); + else + PrimitiveMan:DrawBoxPrimitive(screen, Vector(self.buildList[i][1], self.buildList[i][2]), Vector(self.buildList[i][1] + 23, self.buildList[i][2] + 23), displayColorRed); end end end - self.buildlist = templist; - - -- building up the first block in the build queue - local buildamount = (self.buildTimer.ElapsedSimTimeMS/1000)*self.buildspersecond; - self.buildTimer:Reset(); - for i = 1, buildamount do - if self.resource > self.buildcost then - if self.buildlist[1] then - - if SceneMan:ShortestDistance(actor.Pos, Vector(self.buildlist[1][1],self.buildlist[1][2]), SceneMan.SceneWrapsX).Magnitude < self.builddistance then - - self.resource = self.resource - self.buildcost; - if self.buildlist[1][3] < 64 then - local by = math.floor(self.buildlist[1][3]/8); - local bx = self.buildlist[1][3]-(by*8); - by = by*3-1; - bx = bx*3-1; - - local bpos = self.Pos + SceneMan:ShortestDistance(self.Pos, Vector(bx+self.buildlist[1][1]+2,by+self.buildlist[1][2]+2), SceneMan.SceneWrapsX); - PrimitiveMan:DrawLinePrimitive(screen, self.Pos, bpos, displayColorBlue); - PrimitiveMan:DrawBoxFillPrimitive(screen, Vector(bx+self.buildlist[1][1]+1,by+self.buildlist[1][2]+1),Vector(bx+self.buildlist[1][1]+3,by+self.buildlist[1][2]+3), displayColorWhite); - - for x = 1, 3 do - for y = 1, 3 do - local name = ""; - if bx+x == 0 or bx+x == 23 or by+y == 0 or by+y == 23 then - name = "Particle Constructor Concrete Border "..math.random(4); - else - name = "Particle Constructor Concrete "..math.random(13); - end - local terrainpar = CreateMOPixel(name); - terrainpar.Pos = ConstructorWrapPos(Vector(bx+self.buildlist[1][1]+x,by+self.buildlist[1][2]+y)); - MovableMan:AddParticle(terrainpar); - terrainpar.ToSettle = true; + end + self.buildList = tempList; + + -- building up the first block in the build queue + if self.resource > self.buildCost then + if self.buildList[1] then + + if SceneMan:ShortestDistance(actor.Pos, Vector(self.buildList[1][1], self.buildList[1][2]), SceneMan.SceneWrapsX).Magnitude < self.buildDistance then + + if self.buildList[1][3] < 64 then + local by = math.floor(self.buildList[1][3]/8); + local bx = self.buildList[1][3] - (by * 8); + by = by * 3 - 1; + bx = bx * 3 - 1; + + local bpos = self.Pos + SceneMan:ShortestDistance(self.Pos, Vector(bx + self.buildList[1][1] + 2, by + self.buildList[1][2] + 2), SceneMan.SceneWrapsX); + PrimitiveMan:DrawLinePrimitive(screen, self.Pos, bpos, displayColorBlue); + PrimitiveMan:DrawBoxFillPrimitive(screen, Vector(bx + self.buildList[1][1] + 1, by + self.buildList[1][2] + 1), Vector(bx + self.buildList[1][1] + 3, by + self.buildList[1][2] + 3), displayColorWhite); + + self.buildList[1][3] = self.buildList[1][3] + 1; + for x = 1, 3 do + for y = 1, 3 do + local pos = ConstructorWrapPos(Vector(bx + self.buildList[1][1] + x, by + self.buildList[1][2] + y)); + if SceneMan:GetTerrMatter(pos.X, pos.Y) == rte.airID then + local name = ""; + if bx + x == 0 or bx + x == 23 or by + y == 0 or by + y == 23 then + name = "Base.rte/Particle Constructor Concrete Border " .. math.random(4); + else + name = "Base.rte/Particle Constructor Concrete " .. math.random(13); end + local terrainPar = CreateMOPixel(name); + terrainPar.Pos = pos; + MovableMan:AddParticle(terrainPar); + terrainPar.ToSettle = true; end - AudioMan:PlaySound("Base.rte/Sounds/Geiger".. math.random(3) ..".flac", bpos); - self.buildlist[1][3] = self.buildlist[1][3] + 1; - else - self.buildlist[1] = nil; end - - else - self.buildlist[#self.buildlist+1] = self.buildlist[1]; - self.buildlist[1] = nil; end + self.buildSound:Play(bpos); + self.resource = self.resource - self.buildCost; + else + self.buildList[1] = nil; end + else + self.buildList[#self.buildList + 1] = self.buildList[1]; + self.buildList[1] = nil; end end - if display then - self.displayTimer:Reset(); - end - elseif self.cursor then - self.cursor = nil; end + if display then + self.displayTimer:Reset(); + end + elseif self.cursor then + self.cursor = nil; end end \ No newline at end of file diff --git a/Base.rte/Devices/Tools/Constructor/ConstructorMag.lua b/Base.rte/Devices/Tools/Constructor/ConstructorMag.lua index 3352ca0b6..ab87ca23a 100644 --- a/Base.rte/Devices/Tools/Constructor/ConstructorMag.lua +++ b/Base.rte/Devices/Tools/Constructor/ConstructorMag.lua @@ -6,7 +6,7 @@ function Update(self) self.Mass = 1 + self.RoundCount/(self.maxresource * 0.005); --Full mag is 51kg self.Scale = 0.5 + (self.RoundCount/self.maxresource) * 0.5; - local parent = MovableMan:GetMOFromID(self:GetParent().RootID); + local parent = self:GetRootParent(); if parent and IsActor(parent) then local parentWidth = ToMOSprite(parent):GetSpriteWidth(); local parentHeight = ToMOSprite(parent):GetSpriteHeight(); diff --git a/Base.rte/Devices/Tools/Digger/Digger.ini b/Base.rte/Devices/Tools/Digger/Digger.ini index f31c1f74b..8c99ff15a 100644 --- a/Base.rte/Devices/Tools/Digger/Digger.ini +++ b/Base.rte/Devices/Tools/Digger/Digger.ini @@ -32,15 +32,16 @@ AddEffect = MOSRotating AddAmmo = Round PresetName = Round Light Blast - ParticleCount = 6 + ParticleCount = 5 Particle = MOPixel PresetName = Particle Light Digger Mass = 0.05 RestThreshold = 500 LifeTime = 15 Sharpness = 15 - HitsMOs = 1 + HitsMOs = 0 GetsHitByMOs = 0 + GlobalAccScalar = 0 RemoveOrphanTerrainRadius = 5 RemoveOrphanTerrainMaxArea = 16 RemoveOrphanTerrainRate = 0.8 @@ -55,22 +56,29 @@ AddAmmo = Round R = 255 G = 127 B = 127 - TrailLength = 11 + TrailLength = 13 + TrailLengthVariation = 0.8 FireVelocity = 100 - Separation = 12 + Separation = 8 + Shell = MOPixel + CopyOf = Particle Light Digger + PresetName = Particle Light Digger Damage + HitsMOs = 1 + ShellVelocity = 100 AddAmmo = Round PresetName = Round Medium Blast - ParticleCount = 5 + ParticleCount = 4 Particle = MOPixel PresetName = Particle Medium Digger - Mass = 0.07 + Mass = 0.075 RestThreshold = 500 LifeTime = 15 Sharpness = 20 - HitsMOs = 1 + HitsMOs = 0 GetsHitByMOs = 0 + GlobalAccScalar = 0 RemoveOrphanTerrainRadius = 7 RemoveOrphanTerrainMaxArea = 32 RemoveOrphanTerrainRate = 0.8 @@ -85,22 +93,29 @@ AddAmmo = Round R = 255 G = 255 B = 159 - TrailLength = 12 + TrailLength = 14 + TrailLengthVariation = 0.7 FireVelocity = 95 - Separation = 9 + Separation = 6 + Shell = MOPixel + CopyOf = Particle Medium Digger + PresetName = Particle Medium Digger Damage + HitsMOs = 1 + ShellVelocity = 95 AddAmmo = Round PresetName = Round Heavy Blast - ParticleCount = 4 + ParticleCount = 3 Particle = MOPixel PresetName = Particle Heavy Digger - Mass = 0.09 + Mass = 0.1 RestThreshold = 500 LifeTime = 15 Sharpness = 25 - HitsMOs = 1 + HitsMOs = 0 GetsHitByMOs = 0 + GlobalAccScalar = 0 RemoveOrphanTerrainRadius = 9 RemoveOrphanTerrainMaxArea = 42 RemoveOrphanTerrainRate = 0.8 @@ -115,22 +130,29 @@ AddAmmo = Round R = 204 G = 234 B = 234 - TrailLength = 13 + TrailLength = 15 + TrailLengthVariation = 0.6 FireVelocity = 90 - Separation = 6 + Separation = 4 + Shell = MOPixel + CopyOf = Particle Heavy Digger + PresetName = Particle Heavy Digger Damage + HitsMOs = 1 + ShellVelocity = 90 AddAmmo = Round PresetName = Round Very Heavy Blast - ParticleCount = 3 + ParticleCount = 2 Particle = MOPixel PresetName = Particle Very Heavy Digger - Mass = 0.12 + Mass = 0.125 RestThreshold = 500 LifeTime = 15 Sharpness = 40 - HitsMOs = 1 + HitsMOs = 0 GetsHitByMOs = 0 + GlobalAccScalar = 0 RemoveOrphanTerrainRadius = 9 RemoveOrphanTerrainMaxArea = 50 RemoveOrphanTerrainRate = 0.8 @@ -145,9 +167,15 @@ AddAmmo = Round R = 220 G = 249 B = 242 - TrailLength = 14 + TrailLength = 16 + TrailLengthVariation = 0.5 FireVelocity = 85 - Separation = 3 + Separation = 2 + Shell = MOPixel + CopyOf = Particle Very Heavy Digger + PresetName = Particle Very Heavy Digger Damage + HitsMOs = 1 + ShellVelocity = 85 //////////////////////////////////////////////////////////////////////// @@ -156,7 +184,7 @@ AddAmmo = Round AddAmmo = Magazine PresetName = Magazine Light Digger - Mass = 5 + Mass = 4 HitsMOs = 0 GetsHitByMOs = 0 CollidesWithTerrainWhileAttached = 1 @@ -199,7 +227,7 @@ AddAmmo = Magazine AddAmmo = Magazine PresetName = Magazine Medium Digger - Mass = 5 + Mass = 4.5 HitsMOs = 0 GetsHitByMOs = 0 CollidesWithTerrainWhileAttached = 1 @@ -291,7 +319,7 @@ AddDevice = HDFirearm PresetName = Light Digger AddToGroup = Tools AddToGroup = Tools - Diggers - Description = Lightest in the digger family. Cheapest of them all and works as a nice melee weapon on soft targets. + Description = Lightest and cheapest in the digger family. Works well as a melee weapon against soft targets. Mass = 5 HitsMOs = 0 GetsHitByMOs = 1 @@ -330,9 +358,9 @@ AddDevice = HDFirearm Y = 5 SharpStanceOffset = Vector X = 10 - Y = -5 + Y = -2 SupportOffset = Vector - X = 3 + X = 2 Y = 4 SharpLength = 20 Magazine = Magazine @@ -341,7 +369,7 @@ AddDevice = HDFirearm X = -1 Y = -1 Flash = Attachable - CopyOf = Muzzle Flash SMG + CopyOf = Muzzle Flash Digger FireSound = SoundContainer AddSound = ContentFile FilePath = Base.rte/Devices/Tools/Digger/Sounds/DiggerActive.flac @@ -364,9 +392,14 @@ AddDevice = HDFirearm SharpShakeRange = 1 NoSupportFactor = 2 ParticleSpreadRange = 50 + ShellEjectAngle = 0 + ShellSpreadRange = 40 MuzzleOffset = Vector X = 8 Y = 0 + EjectionOffset = Vector + X = 8 + Y = 0 AddGib = Gib GibParticle = MOPixel CopyOf = Spark Yellow 1 @@ -423,7 +456,7 @@ AddDevice = HDFirearm PresetName = Medium Digger AddToGroup = Tools AddToGroup = Tools - Diggers - Description = Stronger digger. This one can pierce rocks with some effort and dig impressive tunnels and its melee weapon capabilities are much greater. + Description = Stronger digger. This one can pierce rocks with ease and dig impressive tunnels. Mass = 8 HitsMOs = 0 GetsHitByMOs = 1 @@ -458,19 +491,19 @@ AddDevice = HDFirearm Y = 3 DrawAfterParent = 0 StanceOffset = Vector - X = 6 + X = 7 Y = 5 SharpStanceOffset = Vector X = 9 - Y = -5 + Y = -2 SupportOffset = Vector - X = 6 + X = 4 Y = 3 SharpLength = 20 Magazine = Magazine CopyOf = Magazine Medium Digger Flash = Attachable - CopyOf = Muzzle Flash SMG + CopyOf = Muzzle Flash Digger FireSound = SoundContainer AttenuationStartDistance = 150 AddSound = ContentFile @@ -496,9 +529,14 @@ AddDevice = HDFirearm SharpShakeRange = 1 NoSupportFactor = 2 ParticleSpreadRange = 50 + ShellEjectAngle = 0 + ShellSpreadRange = 40 MuzzleOffset = Vector X = 9 Y = -1 + EjectionOffset = Vector + X = 9 + Y = -1 AddGib = Gib GibParticle = MOPixel CopyOf = Spark Yellow 1 @@ -555,7 +593,7 @@ AddDevice = HDFirearm PresetName = Heavy Digger AddToGroup = Tools AddToGroup = Tools - Diggers - Description = Heaviest and the most powerful of them all. Eats concrete with great hunger and even allows you to penetrate bunker walls reinforced with metal. Shreds anyone unfortunate who stand in its way. + Description = Heaviest and the most powerful of them all. Eats concrete with great hunger and allows you to penetrate bunker doors and walls. Mass = 10 HitsMOs = 0 GetsHitByMOs = 1 @@ -593,8 +631,8 @@ AddDevice = HDFirearm X = 6 Y = 5 SharpStanceOffset = Vector - X = 10 - Y = -2 + X = 9 + Y = -1 SupportOffset = Vector X = 3 Y = 4 @@ -602,7 +640,7 @@ AddDevice = HDFirearm Magazine = Magazine CopyOf = Magazine Heavy Digger Flash = Attachable - CopyOf = Muzzle Flash SMG + CopyOf = Muzzle Flash Digger PresetName = Muzzle Flash Heavy Digger ScreenEffect = ContentFile FilePath = Base.rte/Effects/Glows/BlueSmall.png @@ -628,9 +666,14 @@ AddDevice = HDFirearm SharpShakeRange = 1 NoSupportFactor = 2 ParticleSpreadRange = 50 + ShellEjectAngle = 0 + ShellSpreadRange = 40 MuzzleOffset = Vector X = 10 Y = 0 + EjectionOffset = Vector + X = 10 + Y = 0 AddGib = Gib GibParticle = MOPixel CopyOf = Spark Yellow 1 diff --git a/Base.rte/Devices/Tools/GrappleGun/Grapple.lua b/Base.rte/Devices/Tools/GrappleGun/Grapple.lua index d1be27268..5ed5b795e 100644 --- a/Base.rte/Devices/Tools/GrappleGun/Grapple.lua +++ b/Base.rte/Devices/Tools/GrappleGun/Grapple.lua @@ -29,6 +29,10 @@ function Create(self) self.autoClimbIntervalA = 4.0; -- How many pixels the rope retracts / extends at a time when auto-climbing (fast) self.autoClimbIntervalB = 2.0; -- How many pixels the rope retracts / extends at a time when auto-climbing (slow) + self.stickSound = CreateSoundContainer("Grapple Gun Claw Stick", "Base.rte"); + self.clickSound = CreateSoundContainer("Grapple Gun Click", "Base.rte"); + self.returnSound = CreateSoundContainer("Grapple Gun Return", "Base.rte"); + for i = 1, MovableMan:GetMOIDCount() - 1 do local gun = MovableMan:GetMOFromID(i); if gun and gun.ClassName == "HDFirearm" and gun.PresetName == "Grapple Gun" and SceneMan:ShortestDistance(self.Pos, ToHDFirearm(gun).MuzzlePos, self.mapWrapsX).Magnitude < 5 then @@ -178,7 +182,7 @@ function Update(self) end end if self.actionMode > 1 then - AudioMan:PlaySound("Base.rte/Devices/Tools/GrappleGun/Sounds/ClawStick.flac", self.Pos); + self.stickSound:Play(self.Pos); self.setLineLength = math.floor(self.lineLength); self.Vel = Vector(); self.PinStrength = 1000; @@ -188,7 +192,7 @@ function Update(self) if self.lineLength > self.maxLineLength then if self.limitReached == false then self.limitReached = true; - AudioMan:PlaySound("Base.rte/Devices/Tools/GrappleGun/Sounds/Click.flac", startPos); + self.clickSound:Play(startPos); end local movetopos = self.parent.Pos + (self.lineVec):SetMagnitude(self.maxLineLength); if self.mapWrapsX == true then @@ -373,7 +377,7 @@ function Update(self) local jointStiffness; local target = self.target; if target.ID ~= target.RootID then - local mo = MovableMan:GetMOFromID(target.RootID); + local mo = target:GetRootParent(); if mo.ID ~= rte.NoMOID and IsAttachable(target) then -- It's best to apply all the forces to the parent instead of utilizing JointStiffness target = mo; @@ -444,14 +448,14 @@ function Update(self) -- Fine tuning: take the seam into account when drawing the rope local drawPos = self.parent.Pos + self.lineVec:SetMagnitude(self.lineLength); if self.ToDelete == true then - drawPos = self.parent.Pos + (self.lineVec/2); + drawPos = self.parent.Pos + (self.lineVec * 0.5); if self.parentGun and self.parentGun.Magazine then -- Show the magazine as if the hook is being retracted self.parentGun.Magazine.Pos = drawPos; self.parentGun.Magazine.Scale = 1; self.parentGun.Magazine.Frame = 0; end - AudioMan:PlaySound("Base.rte/Devices/Tools/GrappleGun/Sounds/Return.flac", drawPos); + self.returnSound:Play(drawPos); end PrimitiveMan:DrawLinePrimitive(startPos, drawPos, 249); elseif self.parentGun and IsHDFirearm(self.parentGun) then diff --git a/Base.rte/Devices/Tools/GrappleGun/GrappleGun.ini b/Base.rte/Devices/Tools/GrappleGun/GrappleGun.ini index a9891a4bc..63ae1b95b 100644 --- a/Base.rte/Devices/Tools/GrappleGun/GrappleGun.ini +++ b/Base.rte/Devices/Tools/GrappleGun/GrappleGun.ini @@ -1,3 +1,36 @@ +/////////////////////////////////////////////////////////////////////// +// Grapple Gun Sounds + + +AddSoundContainer = SoundContainer + PresetName = Grapple Gun Claw Stick + AddSound = ContentFile + FilePath = Base.rte/Devices/Tools/GrappleGun/Sounds/ClawStick.flac + AttenuationStartDistance = 140 + + +AddSoundContainer = SoundContainer + PresetName = Grapple Gun Click + AddSound = ContentFile + FilePath = Base.rte/Devices/Tools/GrappleGun/Sounds/Click.flac + AttenuationStartDistance = 110 + + +AddSoundContainer = SoundContainer + PresetName = Grapple Gun Crank + AddSound = ContentFile + FilePath = Base.rte/Devices/Tools/GrappleGun/Sounds/Crank.flac + AttenuationStartDistance = 140 + LoopSetting = -1 + + +AddSoundContainer = SoundContainer + PresetName = Grapple Gun Return + AddSound = ContentFile + FilePath = Base.rte/Devices/Tools/GrappleGun/Sounds/Return.flac + AttenuationStartDistance = 125 + + /////////////////////////////////////////////////////////////////////// // Grapple Gun @@ -47,10 +80,7 @@ AddEffect = AEmitter JointStiffness = 1 DrawAfterParent = 1 EmissionSound = SoundContainer - AttenuationStartDistance = 140 - AddSound = ContentFile - FilePath = Base.rte/Devices/Tools/GrappleGun/Sounds/Crank.flac - LoopSetting = -1 + CopyOf = Grapple Gun Crank BurstTriggered = 1 EmissionEnabled = 1 diff --git a/Base.rte/Devices/Weapons/SMG/SMG.ini b/Base.rte/Devices/Weapons/SMG/SMG.ini index 9b8e25385..fc8fd8070 100644 --- a/Base.rte/Devices/Weapons/SMG/SMG.ini +++ b/Base.rte/Devices/Weapons/SMG/SMG.ini @@ -38,7 +38,7 @@ AddAmmo = Magazine Y = -3 ParentOffset = Vector X = 1 - Y = 0 + Y = 1 DrawAfterParent = 0 RoundCount = 30 RTTRatio = 4 @@ -109,14 +109,11 @@ AddDevice = HDFirearm X = 6 Y = -1 SupportOffset = Vector - X = 5 - Y = 4 + X = 4 + Y = 3 SharpLength = 165 Magazine = Magazine CopyOf = Magazine SMG - ParentOffset = Vector - X = 3 - Y = 1 Flash = Attachable CopyOf = Muzzle Flash SMG FireSound = SoundContainer diff --git a/Base.rte/Devices/Weapons/SMG/SMG000.png b/Base.rte/Devices/Weapons/SMG/SMG000.png index e2a82bd3b..f4b546ee4 100644 Binary files a/Base.rte/Devices/Weapons/SMG/SMG000.png and b/Base.rte/Devices/Weapons/SMG/SMG000.png differ diff --git a/Base.rte/Devices/Weapons/SMG/SMG001.png b/Base.rte/Devices/Weapons/SMG/SMG001.png index f0cd8bda1..2c88035d7 100644 Binary files a/Base.rte/Devices/Weapons/SMG/SMG001.png and b/Base.rte/Devices/Weapons/SMG/SMG001.png differ diff --git a/Base.rte/Devices/Weapons/SMG/SMGMagazine.png b/Base.rte/Devices/Weapons/SMG/SMGMagazine.png index 2bcf1c629..1129e31f4 100644 Binary files a/Base.rte/Devices/Weapons/SMG/SMGMagazine.png and b/Base.rte/Devices/Weapons/SMG/SMGMagazine.png differ diff --git a/Base.rte/Devices/Weapons/Shotgun/Shotgun.lua b/Base.rte/Devices/Weapons/Shotgun/Shotgun.lua index a728b0608..7bdd130ed 100644 --- a/Base.rte/Devices/Weapons/Shotgun/Shotgun.lua +++ b/Base.rte/Devices/Weapons/Shotgun/Shotgun.lua @@ -16,7 +16,6 @@ function Update(self) self.rotFactor = math.pi; end if parent and not self.loaded and self.RoundInMagCount > 0 and not self.reloadCycle then - self:Deactivate(); if self.pullTimer:IsPastSimMS(15000/self.RateOfFire) then if not self.playedSound then AudioMan:PlaySound("Base.rte/Sounds/Devices/ChamberRound.flac", self.Pos); diff --git a/Base.rte/Effects.ini b/Base.rte/Effects.ini index f256f489b..c42d831c8 100644 --- a/Base.rte/Effects.ini +++ b/Base.rte/Effects.ini @@ -163,9 +163,9 @@ AddEffect = MOPixel PresetName = Grenade Fragment Gray Mass = 0.15 LifeTime = 250 - Sharpness = 20 + Sharpness = 15 AirResistance = 0.05 - WoundDamageMultiplier = 1.2 + WoundDamageMultiplier = 1.3 HitsMOs = 1 GetsHitByMOs = 0 Color = Color @@ -188,7 +188,7 @@ AddEffect = MOPixel LifeTime = 200 Sharpness = 30 AirResistance = 0.075 - WoundDamageMultiplier = 1.1 + WoundDamageMultiplier = 1.15 HitsMOs = 1 GetsHitByMOs = 0 Color = Color @@ -230,6 +230,18 @@ AddEffect = MOPixel TrailLength = 6 +AddEffect = MOPixel + CopyOf = Grenade Fragment Gray + PresetName = Grenade Fragment Gray Short + LifeTime = 170 + + +AddEffect = MOPixel + CopyOf = Grenade Fragment Yellow + PresetName = Grenade Fragment Yellow Short + LifeTime = 100 + + AddEffect = MOPixel PresetName = Air Blast Mass = 3 @@ -298,6 +310,7 @@ AddEffect = MOPixel HitsMOs = 0 GetsHitByMOs = 0 AirResistance = 0.1 + AirThreshold = 3 Color = Color R = 249 G = 249 @@ -321,6 +334,7 @@ AddEffect = MOPixel HitsMOs = 0 GetsHitByMOs = 0 AirResistance = 0.05 + AirThreshold = 4 Color = Color R = 249 G = 243 @@ -335,6 +349,30 @@ AddEffect = MOPixel TrailLength = 5 +AddEffect = MOPixel + PresetName = Spark Blue 1 + Mass = 0.001 + LifeTime = 100 + HitsMOs = 0 + GetsHitByMOs = 0 + AirResistance = 0.1 + AirThreshold = 3.5 + Color = Color + R = 204 + G = 234 + B = 234 + Atom = Atom + Material = Material + CopyOf = Air + TrailColor = Color + R = 204 + G = 234 + B = 234 + TrailLength = 6 + ScreenEffect = ContentFile + FilePath = Base.rte/Effects/Glows/BlueTiny.png + + AddEffect = MOPixel PresetName = Fire Burn Particle Mass = 0.01 @@ -459,9 +497,9 @@ AddEffect = MOPixel AddEffect = MOPixel PresetName = Jet Air Blast - Mass = 15 + Mass = 7.5 LifeTime = 45 - Sharpness = 0.2 + Sharpness = 0.4 HitsMOs = 1 GetsHitByMOs = 0 Color = Color @@ -482,7 +520,7 @@ AddEffect = MOPixel CopyOf = Jet Air Blast PresetName = Jet Air Blast 2 LifeTime = 90 - Sharpness = 0.1 + Sharpness = 0.2 AddEffect = MOPixel diff --git a/Base.rte/Effects/Gibs.ini b/Base.rte/Effects/Gibs.ini index 29da3857d..366bb4966 100644 --- a/Base.rte/Effects/Gibs.ini +++ b/Base.rte/Effects/Gibs.ini @@ -1908,7 +1908,7 @@ AddEffect = MOSRotating FrameCount = 1 SpriteOffset = Vector X = -4 - Y = -2 + Y = -3 AngularVel = 6 AtomGroup = AtomGroup AutoGenerate = 1 @@ -3005,6 +3005,7 @@ AddEffect = MOSRotating AddEffect = MOSParticle PresetName = Gib Flesh Micro A Mass = 0.92 + Sharpness = 0 HitsMOs = 1 GetsHitByMOs = 0 SpriteFile = ContentFile @@ -3027,6 +3028,7 @@ AddEffect = MOSParticle AddEffect = MOSParticle PresetName = Gib Bone Micro A Mass = 0.92 + Sharpness = 0.5 HitsMOs = 1 GetsHitByMOs = 0 SpriteFile = ContentFile @@ -3181,6 +3183,7 @@ AddEffect = MOSParticle AddEffect = MOSParticle PresetName = Gib Military Micro A Mass = 0.92 + Sharpness = 0.5 HitsMOs = 1 GetsHitByMOs = 0 SpriteFile = ContentFile @@ -3247,6 +3250,7 @@ AddEffect = MOSParticle AddEffect = MOSParticle PresetName = Gib Flesh Tiny A Mass = 1.79 + Sharpness = 0 HitsMOs = 1 GetsHitByMOs = 0 SpriteFile = ContentFile @@ -3269,6 +3273,7 @@ AddEffect = MOSParticle AddEffect = MOSParticle PresetName = Gib Bone Tiny A Mass = 3.00 + Sharpness = 0.5 HitsMOs = 1 GetsHitByMOs = 0 SpriteFile = ContentFile @@ -3423,6 +3428,7 @@ AddEffect = MOSParticle AddEffect = MOSParticle PresetName = Gib Military Tiny A Mass = 1.79 + Sharpness = 0.5 HitsMOs = 1 GetsHitByMOs = 0 SpriteFile = ContentFile diff --git a/Base.rte/Effects/Glows/ExplosionBig.png b/Base.rte/Effects/Glows/ExplosionBig.png new file mode 100644 index 000000000..6d625722a Binary files /dev/null and b/Base.rte/Effects/Glows/ExplosionBig.png differ diff --git a/Base.rte/Effects/Pyro.ini b/Base.rte/Effects/Pyro.ini index 584638cde..995acf383 100644 --- a/Base.rte/Effects/Pyro.ini +++ b/Base.rte/Effects/Pyro.ini @@ -32,6 +32,44 @@ AddEffect = Attachable FilePath = Base.rte/Effects/Glows/YellowSmall.png DrawAfterParent = 0 +//To-do: finish AEmitter variants of muzzle flashes +AddEffect = AEmitter + PresetName = Muzzle Flash Pistol + Mass = 0 + SpriteFile = ContentFile + FilePath = Base.rte/Effects/Pyro/Flashes/MuzzleFlash02.png + FrameCount = 3 + SpriteOffset = Vector + X = -2 + Y = -6 + AtomGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Air + Resolution = 2 + Depth = 100 + DeepGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Air + Resolution = 3 + Depth = 100 + DeepCheck = 0 + JointStrength = 10000 + JointStiffness = 1 + ScreenEffect = ContentFile + FilePath = Base.rte/Effects/Glows/YellowSmall.png + DrawAfterParent = 0 + AddEmission = Emission + EmittedParticle = MOPixel + CopyOf = Spark Yellow 1 + BurstSize = 5 + Spread = 0.3 + MaxVelocity = 10 + MinVelocity = 1 + PushesEmitter = 0 + ParticlesPerMinute = 0 + AddEffect = Attachable PresetName = Muzzle Flash SMG @@ -95,6 +133,37 @@ AddEffect = Attachable DrawAfterParent = 1 +AddEffect = Attachable + PresetName = Muzzle Flash Digger + Mass = 0.0001 + HitsMOs = 0 + GetsHitByMOs = 0 + SpriteFile = ContentFile + FilePath = Base.rte/Effects/Pyro/Flashes/MuzzleFlash04.png + FrameCount = 3 + SpriteOffset = Vector + X = -1 + Y = -8 + AtomGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Air + Resolution = 2 + Depth = 100 + DeepGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Air + Resolution = 3 + Depth = 100 + DeepCheck = 0 + JointStrength = 10000 + JointStiffness = 1 + ScreenEffect = ContentFile + FilePath = Base.rte/Effects/Glows/YellowSmall.png + DrawAfterParent = 0 + + AddEffect = Attachable PresetName = Jet Flame A Mass = 0 @@ -325,14 +394,42 @@ AddEffect = MOPixel EffectStopStrength = 0.0 +AddEffect = MOPixel + PresetName = Glow Explosion Big + Mass = 0.98 + LifeTime = 75 + AirResistance = 0.2 + AirThreshold = 1 + HitsMOs = 0 + GetsHitByMOs = 0 + Color = Color + R = 255 + G = 255 + B = 187 + Atom = Atom + Material = Material + CopyOf = Air + TrailColor = Color + R = 255 + G = 255 + B = 159 + TrailLength = 3 + ScreenEffect = ContentFile + FilePath = Base.rte/Effects/Glows/ExplosionBig.png + EffectAlwaysShows = 1 + EffectStartTime = 0 + EffectStopTime = 75 + EffectStartStrength = 1.0 + EffectStopStrength = 0.0 + + AddEffect = MOPixel PresetName = Glow Explosion Huge Mass = 0.98 LifeTime = 100 - AirResistance = 0.1 + AirResistance = 0.2 AirThreshold = 1 - Sharpness = 0.3 - HitsMOs = 1 + HitsMOs = 0 GetsHitByMOs = 0 Color = Color R = 255 @@ -974,15 +1071,15 @@ AddEffect = MOSParticle FilePath = Base.rte/Effects/Pyro/FireBlastSmallB.png Mass = 0.49 LifeTime = 800 - AirResistance = 0.05 + AirResistance = 0.03 AirThreshold = 3 AddEffect = MOSParticle CopyOf = Flame Smoke 2 PresetName = Flame Smoke 2 Glow - LifeTime = 700 - AirResistance = 0.037 + LifeTime = 900 + AirResistance = 0.02 AirThreshold = 2 ScreenEffect = ContentFile FilePath = Base.rte/Effects/Glows/FireGlow1.png @@ -997,15 +1094,16 @@ AddEffect = MOSParticle PresetName = Flame Smoke 1 Micro Mass = 0.5 RestThreshold = -1 - GlobalAccScalar = -0.2 - AirResistance = 0.25 - LifeTime = 110 + GlobalAccScalar = -0.1 + AirResistance = 0.05 + AirThreshold = 1 + LifeTime = 250 Sharpness = 0.1 HitsMOs = 0 GetsHitByMOs = 0 SpriteFile = ContentFile FilePath = Base.rte/Effects/Pyro/MicroSmokeA.png - FrameCount = 6 + FrameCount = 8 SpriteAnimMode = 7 SpriteOffset = Vector X = -2 @@ -1018,8 +1116,8 @@ AddEffect = MOSParticle ScreenEffect = ContentFile FilePath = Base.rte/Effects/Glows/FireGlowSmaller.png EffectStartTime = 0 - EffectStopTime = 100 - EffectStartStrength = 0.5 + EffectStopTime = 60 + EffectStartStrength = 0.3 EffectStopStrength = 0.0 @@ -1168,7 +1266,7 @@ AddAmmo = MOSRotating AddEffect = MOSParticle PresetName = Flame 1 Hurt GlobalAccScalar = 0.9 - AirResistance = 0.04 + AirResistance = 0.03 AirThreshold = 1 RestThreshold = -1 Mass = 0.98 @@ -1231,7 +1329,7 @@ AddEffect = MOSParticle AddEffect = PEmitter PresetName = Flame 1 Hurt GlobalAccScalar = 0.9 - AirResistance = 0.04 + AirResistance = 0.03 AirThreshold = 1 RestThreshold = -1 Mass = 0.98 diff --git a/Base.rte/Effects/Pyro/FireBlastA002.png b/Base.rte/Effects/Pyro/FireBlastA002.png index 84b0e8fe3..991ed9f02 100644 Binary files a/Base.rte/Effects/Pyro/FireBlastA002.png and b/Base.rte/Effects/Pyro/FireBlastA002.png differ diff --git a/Base.rte/Effects/Pyro/FireBlastB001.png b/Base.rte/Effects/Pyro/FireBlastB001.png index 25b337e9b..1aee68165 100644 Binary files a/Base.rte/Effects/Pyro/FireBlastB001.png and b/Base.rte/Effects/Pyro/FireBlastB001.png differ diff --git a/Base.rte/Effects/Pyro/Flame/Flame.lua b/Base.rte/Effects/Pyro/Flame/Flame.lua index dc291e9e4..677fb1b40 100644 --- a/Base.rte/Effects/Pyro/Flame/Flame.lua +++ b/Base.rte/Effects/Pyro/Flame/Flame.lua @@ -6,8 +6,9 @@ function Create(self) self.notSticky = true; elseif string.find(self.PresetName, "Short") then self.isShort = true; - self.deleteDelay = self.Lifetime * RangeRand(0.05, 0.15); + self.deleteDelay = self.Lifetime * RangeRand(0.1, 0.2); end + self.shortFlame = CreatePEmitter("Flame Hurt Short Float", "Base.rte"); end function Update(self) self.ToSettle = false; @@ -29,23 +30,26 @@ function Update(self) if self.checkTimer:IsPastSimMS(self.checkDelay) then self.checkTimer:Reset(); self.checkDelay = math.floor(self.checkDelay * 1.05 + 3); --Gradually extend the delay for optimization reasons - local checkPos = Vector(self.Pos.X, self.Pos.Y - 1) + self.Vel * rte.PxTravelledPerFrame * math.random(); - local moCheck = SceneMan:GetMOIDPixel(checkPos.X, checkPos.Y); - if moCheck ~= rte.NoMOID then - local mo = MovableMan:GetMOFromID(moCheck); - if mo and (self.Team == Activity.NOTEAM or mo.Team ~= self.Team) then - self.target = ToMOSRotating(mo); + if self.Vel.Magnitude > 1 then + local checkPos = Vector(self.Pos.X, self.Pos.Y - 1) + self.Vel * rte.PxTravelledPerFrame * math.random(); + local moCheck = SceneMan:GetMOIDPixel(checkPos.X, checkPos.Y); + if moCheck ~= rte.NoMOID then + local mo = MovableMan:GetMOFromID(moCheck); + if mo and (self.Team == Activity.NOTEAM or mo.Team ~= self.Team) then + self.target = ToMOSRotating(mo); - self.isShort = true; - self.deleteDelay = math.random(self.Lifetime); - self.GlobalAccScalar = 0.9; - - self.targetStickAngle = mo.RotAngle; - self.stickPos = SceneMan:ShortestDistance(mo.Pos, self.Pos, SceneMan.SceneWrapsX) * 0.8; + self.isShort = true; + self.deleteDelay = math.random(self.Lifetime); + self.GlobalAccScalar = 0.9; + + self.targetStickAngle = mo.RotAngle; + self.stickPos = SceneMan:ShortestDistance(mo.Pos, self.Pos, SceneMan.SceneWrapsX) * 0.8; + end end - elseif not self.isShort and math.random() < 0.1 then + end + if not self.isShort and math.random() < 0.1 then --Spawn another, shorter flame particle occasionally - local particle = CreatePEmitter("Flame Hurt Short Float"); + local particle = self.shortFlame:Clone(); particle.Lifetime = particle.Lifetime * RangeRand(0.6, 0.9); particle.Vel = self.Vel + Vector(0, -3) + Vector(math.random(), 0):RadRotate(math.random() * math.pi * 2); particle.Pos = Vector(self.Pos.X, self.Pos.Y - 1); diff --git a/Base.rte/Effects/Pyro/Flame/Flame001.png b/Base.rte/Effects/Pyro/Flame/Flame001.png index 301d0e03c..290a53d54 100644 Binary files a/Base.rte/Effects/Pyro/Flame/Flame001.png and b/Base.rte/Effects/Pyro/Flame/Flame001.png differ diff --git a/Base.rte/Effects/Pyro/Flame/Flame002.png b/Base.rte/Effects/Pyro/Flame/Flame002.png index 45ad55d02..0ffcc0986 100644 Binary files a/Base.rte/Effects/Pyro/Flame/Flame002.png and b/Base.rte/Effects/Pyro/Flame/Flame002.png differ diff --git a/Base.rte/Effects/Pyro/Flame/Flame003.png b/Base.rte/Effects/Pyro/Flame/Flame003.png index 8ee527247..06956b129 100644 Binary files a/Base.rte/Effects/Pyro/Flame/Flame003.png and b/Base.rte/Effects/Pyro/Flame/Flame003.png differ diff --git a/Base.rte/Effects/Pyro/Flame/Flame004.png b/Base.rte/Effects/Pyro/Flame/Flame004.png index 99354627a..fdaa110ba 100644 Binary files a/Base.rte/Effects/Pyro/Flame/Flame004.png and b/Base.rte/Effects/Pyro/Flame/Flame004.png differ diff --git a/Base.rte/Effects/Pyro/Flashes/MuzzleFlash04000.png b/Base.rte/Effects/Pyro/Flashes/MuzzleFlash04000.png new file mode 100644 index 000000000..ffb787697 Binary files /dev/null and b/Base.rte/Effects/Pyro/Flashes/MuzzleFlash04000.png differ diff --git a/Base.rte/Effects/Pyro/Flashes/MuzzleFlash04001.png b/Base.rte/Effects/Pyro/Flashes/MuzzleFlash04001.png new file mode 100644 index 000000000..10fa57492 Binary files /dev/null and b/Base.rte/Effects/Pyro/Flashes/MuzzleFlash04001.png differ diff --git a/Base.rte/Effects/Pyro/Flashes/MuzzleFlash04002.png b/Base.rte/Effects/Pyro/Flashes/MuzzleFlash04002.png new file mode 100644 index 000000000..114f3a0ff Binary files /dev/null and b/Base.rte/Effects/Pyro/Flashes/MuzzleFlash04002.png differ diff --git a/Base.rte/Effects/Pyro/MicroSmokeA000.png b/Base.rte/Effects/Pyro/MicroSmokeA000.png index 4f7523029..54e089c1e 100644 Binary files a/Base.rte/Effects/Pyro/MicroSmokeA000.png and b/Base.rte/Effects/Pyro/MicroSmokeA000.png differ diff --git a/Base.rte/Effects/Pyro/MicroSmokeA001.png b/Base.rte/Effects/Pyro/MicroSmokeA001.png index fb2eaf65e..a7d5f4092 100644 Binary files a/Base.rte/Effects/Pyro/MicroSmokeA001.png and b/Base.rte/Effects/Pyro/MicroSmokeA001.png differ diff --git a/Base.rte/Effects/Pyro/MicroSmokeA002.png b/Base.rte/Effects/Pyro/MicroSmokeA002.png index c6ebc85c6..4f7523029 100644 Binary files a/Base.rte/Effects/Pyro/MicroSmokeA002.png and b/Base.rte/Effects/Pyro/MicroSmokeA002.png differ diff --git a/Base.rte/Effects/Pyro/MicroSmokeA003.png b/Base.rte/Effects/Pyro/MicroSmokeA003.png index 2ead4023d..fb2eaf65e 100644 Binary files a/Base.rte/Effects/Pyro/MicroSmokeA003.png and b/Base.rte/Effects/Pyro/MicroSmokeA003.png differ diff --git a/Base.rte/Effects/Pyro/MicroSmokeA004.png b/Base.rte/Effects/Pyro/MicroSmokeA004.png index 6e6d93de0..c6ebc85c6 100644 Binary files a/Base.rte/Effects/Pyro/MicroSmokeA004.png and b/Base.rte/Effects/Pyro/MicroSmokeA004.png differ diff --git a/Base.rte/Effects/Pyro/MicroSmokeA005.png b/Base.rte/Effects/Pyro/MicroSmokeA005.png index 31ca4f107..2ead4023d 100644 Binary files a/Base.rte/Effects/Pyro/MicroSmokeA005.png and b/Base.rte/Effects/Pyro/MicroSmokeA005.png differ diff --git a/Base.rte/Effects/Pyro/MicroSmokeA006.png b/Base.rte/Effects/Pyro/MicroSmokeA006.png new file mode 100644 index 000000000..6e6d93de0 Binary files /dev/null and b/Base.rte/Effects/Pyro/MicroSmokeA006.png differ diff --git a/Base.rte/Effects/Pyro/MicroSmokeA007.png b/Base.rte/Effects/Pyro/MicroSmokeA007.png new file mode 100644 index 000000000..7e5dc0c28 Binary files /dev/null and b/Base.rte/Effects/Pyro/MicroSmokeA007.png differ diff --git a/Base.rte/Effects/Wounds.ini b/Base.rte/Effects/Wounds.ini index 3fad38d40..aaff38bf0 100644 --- a/Base.rte/Effects/Wounds.ini +++ b/Base.rte/Effects/Wounds.ini @@ -820,7 +820,7 @@ AddEffect = AEmitter MaxVelocity = 6 MinVelocity = 3 EmissionCountLimit = 240 - EmissionDamage = 0.08 + EmissionDamage = 0.1 BurstDamage = 3 @@ -908,6 +908,7 @@ AddEffect = AEmitter PresetName = Dent Metal Chest Plate BurstSound = SoundContainer CopyOf = Chest Plate Impact + BurstDamage = 0.3 AddEffect = AEmitter diff --git a/Base.rte/GUIs/Skins/Base/fatfont.png b/Base.rte/GUIs/Skins/Base/fatfont.png index d70274bc8..0f11b9fc4 100644 Binary files a/Base.rte/GUIs/Skins/Base/fatfont.png and b/Base.rte/GUIs/Skins/Base/fatfont.png differ diff --git a/Base.rte/GUIs/Skins/MainMenu/fatfont.png b/Base.rte/GUIs/Skins/MainMenu/fatfont.png index 2416892f6..6637601b0 100644 Binary files a/Base.rte/GUIs/Skins/MainMenu/fatfont.png and b/Base.rte/GUIs/Skins/MainMenu/fatfont.png differ diff --git a/Base.rte/Materials.ini b/Base.rte/Materials.ini index bf7747d78..7eeb12fa8 100644 --- a/Base.rte/Materials.ini +++ b/Base.rte/Materials.ini @@ -116,7 +116,7 @@ AddMaterial = Material PresetName = Xenocronium Bounce = 0.1 Friction = 0.85 - StructuralIntegrity = 35 + StructuralIntegrity = 1000 DensityKGPerVolumeL = 0.4 GibImpulseLimitPerVolumeL = 15 GibWoundLimitPerVolumeL = 0.1 @@ -898,7 +898,7 @@ AddMaterial = Material PresetName = Mangled Metal Bounce = 0.1 Friction = 0.95 - StructuralIntegrity = 50 + StructuralIntegrity = 120 DensityKGPerVolumeL = 4.5 GibImpulseLimitPerVolumeL = 8 GibWoundLimitPerVolumeL = 0.1 @@ -915,11 +915,12 @@ AddMaterial = Material PresetName = Door Metal Bounce = 0.1 Friction = 0.9 - StructuralIntegrity = 300 + StructuralIntegrity = 220 DensityKGPerVolumeL = 8.5 GibImpulseLimitPerVolumeL = 15 GibWoundLimitPerVolumeL = 0.1 Priority = 10 + SettleMaterial = 180 Color = Color R = 185 G = 195 @@ -1015,7 +1016,22 @@ AddMaterial = Material G = 170 B = 145 -// Index 195 is undefined. +AddMaterial = Material + Index = 195 + PresetName = Bouncy Stuff + Bounce = 1.3 + Friction = 0.3 + StructuralIntegrity = 80 + DensityKGPerVolumeL = 3 + GibImpulseLimitPerVolumeL = 50 + GibWoundLimitPerVolumeL = 0.5 + Priority = 1000 + SettleMaterial = 182 + Color = Color + R = 145 + G = 160 + B = 150 + // Index 196 is undefined. // Index 197 is undefined. // Index 198 is undefined. diff --git a/Base.rte/Scenes/Alezer Canyon.ini b/Base.rte/Scenes/Alezer Canyon.ini index 583c99b1a..37ada11f0 100644 --- a/Base.rte/Scenes/Alezer Canyon.ini +++ b/Base.rte/Scenes/Alezer Canyon.ini @@ -8,7 +8,7 @@ AddScene = Scene LocationOnPlanet = Vector X = 101 Y = 22 - MetagamePlayable = 1 + MetagamePlayable = 0 PreviewBitmapFile = ContentFile FilePath = Base.rte/Scenes/Alezer Canyon.preview.png AutoDesigned = 1 diff --git a/Base.rte/Scenes/Bessor Split.ini b/Base.rte/Scenes/Bessor Split.ini index f1b0668eb..ca13bdd22 100644 --- a/Base.rte/Scenes/Bessor Split.ini +++ b/Base.rte/Scenes/Bessor Split.ini @@ -8,7 +8,7 @@ AddScene = Scene LocationOnPlanet = Vector X = -147 Y = 40 - MetagamePlayable = 1 + MetagamePlayable = 0 PreviewBitmapFile = ContentFile FilePath = Base.rte/Scenes/Bessor Split.preview.png AutoDesigned = 1 diff --git a/Base.rte/Scenes/Buskur Slates.ini b/Base.rte/Scenes/Buskur Slates.ini index fb4011606..8b73aae6e 100644 --- a/Base.rte/Scenes/Buskur Slates.ini +++ b/Base.rte/Scenes/Buskur Slates.ini @@ -8,7 +8,7 @@ AddScene = Scene LocationOnPlanet = Vector X = -10 Y = -75 - MetagamePlayable = 1 + MetagamePlayable = 0 PreviewBitmapFile = ContentFile FilePath = Base.rte/Scenes/Buskur Slates.preview.png AutoDesigned = 1 diff --git a/Base.rte/Scenes/Croco Cave.ini b/Base.rte/Scenes/Croco Cave.ini index 606db0c8b..ed83b51a9 100644 --- a/Base.rte/Scenes/Croco Cave.ini +++ b/Base.rte/Scenes/Croco Cave.ini @@ -8,7 +8,7 @@ AddScene = Scene LocationOnPlanet = Vector X = -33 Y = -39 - MetagamePlayable = 1 + MetagamePlayable = 0 PreviewBitmapFile = ContentFile FilePath = Base.rte/Scenes/Croco Cave.preview.png AutoDesigned = 1 diff --git a/Base.rte/Scenes/Eleann Forest.ini b/Base.rte/Scenes/Eleann Forest.ini index ad61743fa..7f9338b39 100644 --- a/Base.rte/Scenes/Eleann Forest.ini +++ b/Base.rte/Scenes/Eleann Forest.ini @@ -8,7 +8,7 @@ AddScene = Scene LocationOnPlanet = Vector X = -59 Y = 49 - MetagamePlayable = 1 + MetagamePlayable = 0 PreviewBitmapFile = ContentFile FilePath = Base.rte/Scenes/Eleann Forest.preview.png AutoDesigned = 1 diff --git a/Base.rte/Scenes/Grasslands.ini b/Base.rte/Scenes/Grasslands.ini index 8e0d58e1e..f6905e900 100644 --- a/Base.rte/Scenes/Grasslands.ini +++ b/Base.rte/Scenes/Grasslands.ini @@ -25,6 +25,7 @@ AddScene = Scene CopyOf = Clouds Layer A AddBackgroundLayer = SceneLayer CopyOf = Default Sky Layer +/* To-do: Bunker version? AddArea = Area AddBox = Box Corner = Vector @@ -184,4 +185,5 @@ AddScene = Scene Y = 773.801 Width = 58 Height = 41 - Name = Light2 \ No newline at end of file + Name = Light2 +*/ \ No newline at end of file diff --git a/Base.rte/Scenes/Irthan Bridge Pass.ini b/Base.rte/Scenes/Irthan Bridge Pass.ini index 4fa770ba7..f00f3f0bc 100644 --- a/Base.rte/Scenes/Irthan Bridge Pass.ini +++ b/Base.rte/Scenes/Irthan Bridge Pass.ini @@ -8,7 +8,7 @@ AddScene = Scene LocationOnPlanet = Vector X = 1 Y = 126 - MetagamePlayable = 1 + MetagamePlayable = 0 PreviewBitmapFile = ContentFile FilePath = Base.rte/Scenes/Irthan Bridge Pass.preview.png AutoDesigned = 1 diff --git a/Base.rte/Scenes/Isoun Sand Caves.ini b/Base.rte/Scenes/Isoun Sand Caves.ini index 12cb243f1..77a9a1697 100644 --- a/Base.rte/Scenes/Isoun Sand Caves.ini +++ b/Base.rte/Scenes/Isoun Sand Caves.ini @@ -8,7 +8,7 @@ AddScene = Scene LocationOnPlanet = Vector X = -172 Y = -60 - MetagamePlayable = 1 + MetagamePlayable = 0 PreviewBitmapFile = ContentFile FilePath = Base.rte/Scenes/Isoun Sand Caves.preview.png AutoDesigned = 1 diff --git a/Base.rte/Scenes/Kyndal Canyon.ini b/Base.rte/Scenes/Kyndal Canyon.ini index fbc60e74c..9de8c4975 100644 --- a/Base.rte/Scenes/Kyndal Canyon.ini +++ b/Base.rte/Scenes/Kyndal Canyon.ini @@ -8,7 +8,7 @@ AddScene = Scene LocationOnPlanet = Vector X = -3 Y = 63 - MetagamePlayable = 1 + MetagamePlayable = 0 PreviewBitmapFile = ContentFile FilePath = Base.rte/Scenes/Kyndal Canyon.preview.png AutoDesigned = 1 diff --git a/Base.rte/Scenes/Metra Plains.ini b/Base.rte/Scenes/Metra Plains.ini index 864e22725..1147cbe00 100644 --- a/Base.rte/Scenes/Metra Plains.ini +++ b/Base.rte/Scenes/Metra Plains.ini @@ -8,7 +8,7 @@ AddScene = Scene LocationOnPlanet = Vector X = 8 Y = 25 - MetagamePlayable = 1 + MetagamePlayable = 0 PreviewBitmapFile = ContentFile FilePath = Base.rte/Scenes/Metra Plains.preview.png AutoDesigned = 1 diff --git a/Base.rte/Scenes/Monsual Richlands.ini b/Base.rte/Scenes/Monsual Richlands.ini index a85f70f91..31a6d6b17 100644 --- a/Base.rte/Scenes/Monsual Richlands.ini +++ b/Base.rte/Scenes/Monsual Richlands.ini @@ -8,7 +8,7 @@ AddScene = Scene LocationOnPlanet = Vector X = -86 Y = -102 - MetagamePlayable = 1 + MetagamePlayable = 0 PreviewBitmapFile = ContentFile FilePath = Base.rte/Scenes/Monsual Richlands.preview.png AutoDesigned = 1 diff --git a/Base.rte/Scenes/Mount Zyss.ini b/Base.rte/Scenes/Mount Zyss.ini index 2d5688e1b..3e3476082 100644 --- a/Base.rte/Scenes/Mount Zyss.ini +++ b/Base.rte/Scenes/Mount Zyss.ini @@ -8,7 +8,7 @@ AddScene = Scene LocationOnPlanet = Vector X = 58 Y = -220 - MetagamePlayable = 1 + MetagamePlayable = 0 PreviewBitmapFile = ContentFile FilePath = Base.rte/Scenes/Mount Zyss.preview.png AutoDesigned = 1 diff --git a/Base.rte/Scenes/Niylar Den.ini b/Base.rte/Scenes/Niylar Den.ini index 535bf6a28..b4db915dc 100644 --- a/Base.rte/Scenes/Niylar Den.ini +++ b/Base.rte/Scenes/Niylar Den.ini @@ -8,7 +8,7 @@ AddScene = Scene LocationOnPlanet = Vector X = -201 Y = 35 - MetagamePlayable = 1 + MetagamePlayable = 0 PreviewBitmapFile = ContentFile FilePath = Base.rte/Scenes/Niylar Den.preview.png AutoDesigned = 1 diff --git a/Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/Spikes.ini b/Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/Spikes.ini index 0d290a524..f54e891eb 100644 --- a/Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/Spikes.ini +++ b/Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/Spikes.ini @@ -20,11 +20,6 @@ AddEffect = MOPixel Atom = Atom Material = Material CopyOf = Air Blast - TrailColor = Color - R = 37 - G = 43 - B = 50 - TrailLength = 0 AddTerrainObject = TerrainObject @@ -51,7 +46,6 @@ AddTerrainObject = TerrainObject ScriptPath = Base.rte/Scenes/Objects/Bunkers/BunkerBits/Spikes/SpikeEmitter.lua SpriteFile = ContentFile FilePath = Base.rte/Null.png - FrameCount = 1 AtomGroup = AtomGroup CopyOf = Null AtomGroup GibSound = SoundContainer diff --git a/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Docks/Docks.ini b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Docks/Docks.ini index 7bb5d0ff7..f53c3f583 100644 --- a/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Docks/Docks.ini +++ b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Docks/Docks.ini @@ -96,7 +96,7 @@ AddActor = MOSRotating AutoGenerate = 1 Material = Material CopyOf = Armoured Military Stuff - Resolution = 1 + Resolution = 3 Depth = 0 DeepGroup = AtomGroup AutoGenerate = 1 @@ -121,6 +121,7 @@ AddActor = MOSRotating GibParticle = MOPixel CopyOf = Spark Yellow 1 Count = 15 + Spread = 3.14 MaxVelocity = 20 MinVelocity = 8 Offset = Vector @@ -130,6 +131,7 @@ AddActor = MOSRotating GibParticle = MOPixel CopyOf = Spark Yellow 1 Count = 15 + Spread = 3.14 MaxVelocity = 20 MinVelocity = 8 Offset = Vector @@ -139,6 +141,7 @@ AddActor = MOSRotating GibParticle = MOPixel CopyOf = Drop Oil Count = 8 + Spread = 3.14 MaxVelocity = 10 MinVelocity = 1 Offset = Vector @@ -148,6 +151,7 @@ AddActor = MOSRotating GibParticle = MOPixel CopyOf = Drop Oil Count = 8 + Spread = 3.14 MaxVelocity = 10 MinVelocity = 1 Offset = Vector @@ -157,6 +161,7 @@ AddActor = MOSRotating GibParticle = MOSParticle CopyOf = Gib Metal Grey Tiny A Count = 4 + Spread = 3.14 MaxVelocity = 15 MinVelocity = 5 Offset = Vector @@ -166,6 +171,7 @@ AddActor = MOSRotating GibParticle = MOSParticle CopyOf = Gib Metal Grey Tiny A Count = 4 + Spread = 3.14 MaxVelocity = 15 MinVelocity = 5 Offset = Vector @@ -201,7 +207,7 @@ AddActor = MOSRotating AutoGenerate = 1 Material = Material CopyOf = Armoured Military Stuff - Resolution = 1 + Resolution = 3 Depth = 0 DeepGroup = AtomGroup AutoGenerate = 1 @@ -226,6 +232,7 @@ AddActor = MOSRotating GibParticle = MOPixel CopyOf = Spark Yellow 1 Count = 15 + Spread = 3.14 MaxVelocity = 20 MinVelocity = 8 Offset = Vector @@ -235,6 +242,7 @@ AddActor = MOSRotating GibParticle = MOPixel CopyOf = Spark Yellow 1 Count = 15 + Spread = 3.14 MaxVelocity = 20 MinVelocity = 8 Offset = Vector @@ -244,6 +252,7 @@ AddActor = MOSRotating GibParticle = MOPixel CopyOf = Drop Oil Count = 5 + Spread = 3.14 MaxVelocity = 10 MinVelocity = 1 Offset = Vector @@ -253,6 +262,7 @@ AddActor = MOSRotating GibParticle = MOPixel CopyOf = Drop Oil Count = 5 + Spread = 3.14 MaxVelocity = 10 MinVelocity = 1 Offset = Vector @@ -262,6 +272,7 @@ AddActor = MOSRotating GibParticle = MOSParticle CopyOf = Gib Metal Grey Tiny A Count = 3 + Spread = 3.14 MaxVelocity = 15 MinVelocity = 5 Offset = Vector @@ -271,6 +282,7 @@ AddActor = MOSRotating GibParticle = MOSParticle CopyOf = Gib Metal Grey Tiny A Count = 3 + Spread = 3.14 MaxVelocity = 15 MinVelocity = 5 Offset = Vector diff --git a/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Docks/DropshipDock.lua b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Docks/DropshipDock.lua index 4caf45db4..344f8b7d1 100644 --- a/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Docks/DropshipDock.lua +++ b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Docks/DropshipDock.lua @@ -13,8 +13,8 @@ function Update(self) --Disable collisions with the ship self.craft:SetWhichMOToNotHit(self, 100); --Pin the ship and pull it nicely into the docking unit. - local dist = SceneMan:ShortestDistance(self.craft.Pos, self.Pos + Vector(0, self.craft.Radius / 2), SceneMan.SceneWrapsX); - self.craft.Vel = self.craft.Vel * 0.9 + dist / (3 + self.craft.Vel.Magnitude); + local dist = SceneMan:ShortestDistance(self.craft.Pos, self.Pos + Vector(0, ToMOSprite(self.craft):GetSpriteHeight() * 0.5), SceneMan.SceneWrapsX); + self.craft.Vel = self.craft.Vel * 0.9 + dist/(3 + self.craft.Vel.Magnitude); self.craft.AngularVel = self.craft.AngularVel * 0.9 - self.craft.RotAngle * 3; if self.craft.Status < Actor.DYING then @@ -24,7 +24,7 @@ function Update(self) if self.healTimer:IsPastSimMS(self.craft.Mass) then self.healTimer:Reset(); if self.craft.WoundCount > 0 then - self.craft.Health = math.min(self.craft.Health + self.craft:RemoveWounds(1), self.craft.MaxHealth); + self.craft:RemoveWounds(1); elseif self.craft.Health < self.craft.MaxHealth then self.craft.Health = math.min(self.craft.Health + 1, self.craft.MaxHealth); end diff --git a/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Docks/RocketDock.lua b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Docks/RocketDock.lua index 313c247b5..5093c7d7f 100644 --- a/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Docks/RocketDock.lua +++ b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Docks/RocketDock.lua @@ -13,8 +13,8 @@ function Update(self) --Disable collisions with the ship self.craft:SetWhichMOToNotHit(self, 100); --Pin the ship and pull it nicely into the docking unit. - local dist = SceneMan:ShortestDistance(self.craft.Pos, self.Pos + Vector(0, -self.craft.Radius / 2), SceneMan.SceneWrapsX); - self.craft.Vel = self.craft.Vel * 0.9 + dist / (3 + self.craft.Vel.Magnitude); + local dist = SceneMan:ShortestDistance(self.craft.Pos, self.Pos + Vector(0, -self.craft.Radius * 0.5), SceneMan.SceneWrapsX); + self.craft.Vel = self.craft.Vel * 0.9 + dist/(3 + self.craft.Vel.Magnitude); self.craft.AngularVel = self.craft.AngularVel * 0.9 - self.craft.RotAngle * 3; if self.craft.Status < Actor.DYING then @@ -24,7 +24,7 @@ function Update(self) if self.healTimer:IsPastSimMS(self.craft.Mass) then self.healTimer:Reset(); if self.craft.WoundCount > 0 then - self.craft.Health = math.min(self.craft.Health + self.craft:RemoveWounds(1), self.craft.MaxHealth); + self.craft:RemoveWounds(1); elseif self.craft.Health < self.craft.MaxHealth then self.craft.Health = math.min(self.craft.Health + 1, self.craft.MaxHealth); end diff --git a/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Doors/Doors.ini b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Doors/Doors.ini index 2168bcc85..63870365b 100644 --- a/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Doors/Doors.ini +++ b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Doors/Doors.ini @@ -17,7 +17,7 @@ AddEffect = MOSRotating AtomGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Mangled Metal + CopyOf = Door Metal Resolution = 4 Depth = 0 DeepCheck = 0 @@ -38,7 +38,7 @@ AddEffect = MOSRotating AtomGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Mangled Metal + CopyOf = Door Metal Resolution = 4 Depth = 0 DeepCheck = 0 @@ -59,7 +59,7 @@ AddEffect = MOSRotating AtomGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Mangled Metal + CopyOf = Door Metal Resolution = 4 Depth = 0 DeepCheck = 0 @@ -80,7 +80,7 @@ AddEffect = MOSRotating AtomGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Mangled Metal + CopyOf = Door Metal Resolution = 4 Depth = 0 DeepCheck = 0 @@ -101,7 +101,7 @@ AddEffect = MOSRotating AtomGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Mangled Metal + CopyOf = Door Metal Resolution = 4 Depth = 0 DeepCheck = 0 @@ -122,7 +122,7 @@ AddEffect = MOSRotating AtomGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Mangled Metal + CopyOf = Door Metal Resolution = 4 Depth = 0 DeepCheck = 0 @@ -143,7 +143,7 @@ AddEffect = MOSRotating AtomGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Mangled Metal + CopyOf = Door Metal Resolution = 4 Depth = 0 DeepCheck = 0 @@ -164,7 +164,7 @@ AddEffect = MOSRotating AtomGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Mangled Metal + CopyOf = Door Metal Resolution = 4 Depth = 0 DeepCheck = 0 @@ -185,7 +185,7 @@ AddEffect = MOSRotating AtomGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Mangled Metal + CopyOf = Door Metal Resolution = 4 Depth = 0 DeepCheck = 0 @@ -206,7 +206,7 @@ AddEffect = MOSRotating AtomGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Mangled Metal + CopyOf = Door Metal Resolution = 4 Depth = 0 DeepCheck = 0 @@ -227,7 +227,7 @@ AddEffect = MOSRotating AtomGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Mangled Metal + CopyOf = Door Metal Resolution = 4 Depth = 0 DeepCheck = 0 @@ -248,7 +248,7 @@ AddEffect = MOSRotating AtomGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Mangled Metal + CopyOf = Door Metal Resolution = 4 Depth = 0 DeepCheck = 0 @@ -293,7 +293,7 @@ AddEffect = Attachable Y = 0 DrawAfterParent = 1 GibImpulseLimit = 9000 - GibWoundLimit = 200 + GibWoundLimit = 250 GibSound = SoundContainer CopyOf = Metal Door Gib AddGib = Gib @@ -448,7 +448,7 @@ AddEffect = Attachable Y = 0 DrawAfterParent = 0 GibImpulseLimit = 12000 - GibWoundLimit = 200 + GibWoundLimit = 250 GibSound = SoundContainer CopyOf = Metal Door Gib AddGib = Gib @@ -592,7 +592,7 @@ AddEffect = Attachable Y = 0 DrawAfterParent = 0 GibImpulseLimit = 14000 - GibWoundLimit = 400 + GibWoundLimit = 450 GibSound = SoundContainer CopyOf = Metal Door Gib AddGib = Gib @@ -745,7 +745,7 @@ AddEffect = Attachable Y = 0 DrawAfterParent = 0 GibImpulseLimit = 18000 - GibWoundLimit = 400 + GibWoundLimit = 450 GibSound = SoundContainer CopyOf = Metal Door Gib AddGib = Gib @@ -937,7 +937,7 @@ AddEffect = ADoor AddSound = ContentFile FilePath = Base.rte/Sounds/DoorChangeDirection.flac GibImpulseLimit = 5000 - GibWoundLimit = 50 + GibWoundLimit = 30 GibBlastStrength = 50 GibSound = SoundContainer CopyOf = Metal Penetration Hit diff --git a/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderNode.lua b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderNode.lua index a39a3324c..a4c98da4f 100644 --- a/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderNode.lua +++ b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderNode.lua @@ -1,8 +1,8 @@ function Create(self) self.checkTimer = Timer(); self.checkTimer:SetSimTimeLimitMS(51); - self.width = (ToMOSprite(self):GetSpriteWidth()/2) - 1; - self.height = (ToMOSprite(self):GetSpriteHeight()/2) - 1; + self.width = (ToMOSprite(self):GetSpriteWidth() * 0.5) - 1; + self.height = (ToMOSprite(self):GetSpriteHeight() * 0.5) - 1; end function Update(self) if self.PinStrength > 0 and self.checkTimer:IsPastSimTimeLimit() then @@ -21,12 +21,13 @@ function Update(self) actor.Vel = actor.Vel * (1 - 1/velFactor); if controller:IsState(Controller.MOVE_LEFT) or controller:IsState(Controller.MOVE_RIGHT) then local speed = actor:GetLimbPathSpeed(1)/velFactor; - actor.Vel = actor.Vel + Vector(speed/2, 0):RadRotate(actor:GetAimAngle(true)) - Vector(0, speed); + actor.Vel = actor.Vel + Vector(speed * 0.5, 0):RadRotate(actor:GetAimAngle(true)) - Vector(0, speed); elseif controller:IsState(Controller.BODY_CROUCH) then - actor.Vel = actor.Vel/2; - end - end - end - end - end + actor.Vel = actor.Vel * 0.5; + end + self.Frame = (self.Frame + 1) % self.FrameCount; + end + end + end + end end \ No newline at end of file diff --git a/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderNode.png b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderNode000.png similarity index 100% rename from Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderNode.png rename to Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderNode000.png diff --git a/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderNode001.png b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderNode001.png new file mode 100644 index 000000000..8d2a3677c Binary files /dev/null and b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderNode001.png differ diff --git a/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderNode002.png b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderNode002.png new file mode 100644 index 000000000..fc1be9f61 Binary files /dev/null and b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderNode002.png differ diff --git a/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/Ladders.ini b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/Ladders.ini index e43dd9746..7d0abb4a3 100644 --- a/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/Ladders.ini +++ b/Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/Ladders.ini @@ -33,7 +33,7 @@ AddActor = MOSRotating GetsHitByMOs = 1 SpriteFile = ContentFile FilePath = Base.rte/Scenes/Objects/Bunkers/BunkerSystems/Ladders/LadderNode.png - FrameCount = 1 + FrameCount = 3 SpriteOffset = Vector X = -12 Y = -12 diff --git a/Base.rte/Scenes/Oshqi Pillars.ini b/Base.rte/Scenes/Oshqi Pillars.ini index 26492d5c9..38532be96 100644 --- a/Base.rte/Scenes/Oshqi Pillars.ini +++ b/Base.rte/Scenes/Oshqi Pillars.ini @@ -8,7 +8,7 @@ AddScene = Scene LocationOnPlanet = Vector X = -224 Y = 19 - MetagamePlayable = 1 + MetagamePlayable = 0 PreviewBitmapFile = ContentFile FilePath = Base.rte/Scenes/Oshqi Pillars.preview.png AutoDesigned = 1 diff --git a/Base.rte/Scenes/Paeterra Ice Caves.ini b/Base.rte/Scenes/Paeterra Ice Caves.ini index 99abd5f6f..b43604fc3 100644 --- a/Base.rte/Scenes/Paeterra Ice Caves.ini +++ b/Base.rte/Scenes/Paeterra Ice Caves.ini @@ -8,7 +8,7 @@ AddScene = Scene LocationOnPlanet = Vector X = -60 Y = 209 - MetagamePlayable = 1 + MetagamePlayable = 0 PreviewBitmapFile = ContentFile FilePath = Base.rte/Scenes/Paeterra Ice Caves.preview.png AutoDesigned = 1 diff --git a/Base.rte/Scenes/Prom Grounds.ini b/Base.rte/Scenes/Prom Grounds.ini index e880c5e0b..78b123510 100644 --- a/Base.rte/Scenes/Prom Grounds.ini +++ b/Base.rte/Scenes/Prom Grounds.ini @@ -8,7 +8,7 @@ AddScene = Scene LocationOnPlanet = Vector X = -118 Y = -4 - MetagamePlayable = 1 + MetagamePlayable = 0 PreviewBitmapFile = ContentFile FilePath = Base.rte/Scenes/Prom Grounds.preview.png AutoDesigned = 1 diff --git a/Base.rte/Scenes/Rackur Lake.ini b/Base.rte/Scenes/Rackur Lake.ini index 3286c6999..c97d23749 100644 --- a/Base.rte/Scenes/Rackur Lake.ini +++ b/Base.rte/Scenes/Rackur Lake.ini @@ -8,7 +8,7 @@ AddScene = Scene LocationOnPlanet = Vector X = -85 Y = -217 - MetagamePlayable = 1 + MetagamePlayable = 0 PreviewBitmapFile = ContentFile FilePath = Base.rte/Scenes/Rackur Lake.preview.png AutoDesigned = 1 diff --git a/Base.rte/Scenes/Rock Valley.ini b/Base.rte/Scenes/Rock Valley.ini index 8ff2d79dd..a171d40a6 100644 --- a/Base.rte/Scenes/Rock Valley.ini +++ b/Base.rte/Scenes/Rock Valley.ini @@ -8,7 +8,7 @@ AddScene = Scene LocationOnPlanet = Vector X = 158 Y = 120 - MetagamePlayable = 1 + MetagamePlayable = 0 PreviewBitmapFile = ContentFile FilePath = Base.rte/Scenes/Rock Valley.preview.png AutoDesigned = 1 diff --git a/Base.rte/Scenes/Stromatolites.ini b/Base.rte/Scenes/Stromatolites.ini index acaa8841d..57258fe4c 100644 --- a/Base.rte/Scenes/Stromatolites.ini +++ b/Base.rte/Scenes/Stromatolites.ini @@ -8,7 +8,7 @@ AddScene = Scene LocationOnPlanet = Vector X = -181 Y = -12 - MetagamePlayable = 1 + MetagamePlayable = 0 PreviewBitmapFile = ContentFile FilePath = Base.rte/Scenes/Stromatolites.preview.png AutoDesigned = 1 diff --git a/Base.rte/Scenes/Terrains/RayvordTundra.png b/Base.rte/Scenes/Terrains/RayvordTundra.png index 4254752ba..95143ab22 100644 Binary files a/Base.rte/Scenes/Terrains/RayvordTundra.png and b/Base.rte/Scenes/Terrains/RayvordTundra.png differ diff --git a/Base.rte/Scenes/Terrains/SlodranWilderness.png b/Base.rte/Scenes/Terrains/SlodranWilderness.png index b91404305..4209a386f 100644 Binary files a/Base.rte/Scenes/Terrains/SlodranWilderness.png and b/Base.rte/Scenes/Terrains/SlodranWilderness.png differ diff --git a/Base.rte/Scenes/Terrains/Terrains.ini b/Base.rte/Scenes/Terrains/Terrains.ini index 12b39e0e6..4d67569b3 100644 --- a/Base.rte/Scenes/Terrains/Terrains.ini +++ b/Base.rte/Scenes/Terrains/Terrains.ini @@ -149,6 +149,14 @@ Terrain = SLTerrain Y = -1 BackgroundTexture = ContentFile FilePath = Base.rte/Scenes/Textures/DirtDark.png + AddTerrainFrosting = TerrainFrosting + TargetMaterial = Material + CopyOf = Sand + FrostingMaterial = Material + CopyOf = Sand + MinThickness = 2 + MaxThickness = 2 + InAirOnly = 1 AddTerrainDebris = TerrainDebris CopyOf = Cacti AddTerrainDebris = TerrainDebris @@ -1287,11 +1295,11 @@ Terrain = SLTerrain FilePath = Base.rte/Scenes/Textures/DirtDark.png AddTerrainFrosting = TerrainFrosting TargetMaterial = Material - CopyOf = Topsoil + CopyOf = Snow FrostingMaterial = Material - CopyOf = Grass - MinThickness = 1 - MaxThickness = 4 + CopyOf = Snow + MinThickness = 10 + MaxThickness = 10 InAirOnly = 1 AddTerrainDebris = TerrainDebris CopyOf = Gold @@ -1325,8 +1333,8 @@ Terrain = SLTerrain CopyOf = Topsoil FrostingMaterial = Material CopyOf = Grass - MinThickness = 4 - MaxThickness = 10 + MinThickness = 6 + MaxThickness = 12 InAirOnly = 1 AddTerrainDebris = TerrainDebris CopyOf = Plants @@ -1408,11 +1416,11 @@ Terrain = SLTerrain FilePath = Base.rte/Scenes/Textures/DirtDark.png AddTerrainFrosting = TerrainFrosting TargetMaterial = Material - CopyOf = Topsoil + CopyOf = Snow FrostingMaterial = Material - CopyOf = Grass - MinThickness = 1 - MaxThickness = 4 + CopyOf = Snow + MinThickness = 8 + MaxThickness = 8 InAirOnly = 1 AddTerrainDebris = TerrainDebris CopyOf = Gold diff --git a/Base.rte/Scenes/Tithur Cave Cliffs.ini b/Base.rte/Scenes/Tithur Cave Cliffs.ini index 4476df67c..8c606b0b3 100644 --- a/Base.rte/Scenes/Tithur Cave Cliffs.ini +++ b/Base.rte/Scenes/Tithur Cave Cliffs.ini @@ -8,7 +8,7 @@ AddScene = Scene LocationOnPlanet = Vector X = -20 Y = -92 - MetagamePlayable = 1 + MetagamePlayable = 0 PreviewBitmapFile = ContentFile FilePath = Base.rte/Scenes/Tithur Cave Cliffs.preview.png AutoDesigned = 1 diff --git a/Base.rte/Scenes/Treadur Forest.ini b/Base.rte/Scenes/Treadur Forest.ini index 289791f10..ce21996fc 100644 --- a/Base.rte/Scenes/Treadur Forest.ini +++ b/Base.rte/Scenes/Treadur Forest.ini @@ -8,7 +8,7 @@ AddScene = Scene LocationOnPlanet = Vector X = -112 Y = -76 - MetagamePlayable = 1 + MetagamePlayable = 0 PreviewBitmapFile = ContentFile FilePath = Base.rte/Scenes/Treadur Forest.preview.png AutoDesigned = 1 diff --git a/Base.rte/Scenes/Turon Heights.ini b/Base.rte/Scenes/Turon Heights.ini index 868a18071..0df4fbb33 100644 --- a/Base.rte/Scenes/Turon Heights.ini +++ b/Base.rte/Scenes/Turon Heights.ini @@ -8,7 +8,7 @@ AddScene = Scene LocationOnPlanet = Vector X = 140 Y = 153 - MetagamePlayable = 1 + MetagamePlayable = 0 PreviewBitmapFile = ContentFile FilePath = Base.rte/Scenes/Turon Heights.preview.png AutoDesigned = 1 diff --git a/Base.rte/Scenes/Volar Crystal Caves.ini b/Base.rte/Scenes/Volar Crystal Caves.ini index f32aeb30e..46f7171dc 100644 --- a/Base.rte/Scenes/Volar Crystal Caves.ini +++ b/Base.rte/Scenes/Volar Crystal Caves.ini @@ -8,7 +8,7 @@ AddScene = Scene LocationOnPlanet = Vector X = 11 Y = 232 - MetagamePlayable = 1 + MetagamePlayable = 0 PreviewBitmapFile = ContentFile FilePath = Base.rte/Scenes/Volar Crystal Caves.preview.png AutoDesigned = 1 diff --git a/Base.rte/Scripts/Global/AllUnitsAreBrains.lua b/Base.rte/Scripts/Global/AllUnitsAreBrains.lua index 1afec3921..a9f27e961 100644 --- a/Base.rte/Scripts/Global/AllUnitsAreBrains.lua +++ b/Base.rte/Scripts/Global/AllUnitsAreBrains.lua @@ -3,12 +3,10 @@ function AllUnitsAreBrainsScript:UpdateScript() if (IsAHuman(actor) or IsACrab(actor)) and not actor:IsInGroup("Brains") then actor:AddToGroup("Brains"); else - for i = 1, actor.InventorySize do - local item = actor:Inventory(); + for item in actor.Inventory do if (IsAHuman(item) or IsACrab(item)) and not item:IsInGroup("Brains") then ToActor(item):AddToGroup("Brains"); end - actor:SwapNextInventory(item, true); end end end diff --git a/Base.rte/Scripts/Global/BiggerJetpacks.lua b/Base.rte/Scripts/Global/BiggerJetpacks.lua index 807ff17ab..acb063023 100644 --- a/Base.rte/Scripts/Global/BiggerJetpacks.lua +++ b/Base.rte/Scripts/Global/BiggerJetpacks.lua @@ -5,10 +5,8 @@ function BiggerJetpacksScript:UpdateScript() for actor in MovableMan.AddedActors do if not actor:NumberValueExists("BiggerJetpacksScript") then self:BuffJetpack(actor); - for i = 1, actor.InventorySize do - local item = actor:Inventory(); + for item in actor.Inventory do self:BuffJetpack(item); - actor:SwapNextInventory(item, true); end end end diff --git a/Base.rte/Scripts/Global/ConstantGoldIncome.lua b/Base.rte/Scripts/Global/ConstantGoldIncome.lua index a6f93a599..faa9b4916 100644 --- a/Base.rte/Scripts/Global/ConstantGoldIncome.lua +++ b/Base.rte/Scripts/Global/ConstantGoldIncome.lua @@ -2,15 +2,13 @@ function ConstantGoldIncomeScript:StartScript() self.updateTimer = Timer(); self.updateInterval = 50; self.goldPerSecond = 10; + self.activity = ActivityMan:GetActivity(); end function ConstantGoldIncomeScript:UpdateScript() - if self.updateTimer:IsPastSimMS(self.updateInterval) then + if self.activity.ActivityState ~= Activity.EDITING and self.updateTimer:IsPastSimMS(self.updateInterval) then for team = Activity.TEAM_1, Activity.MAXTEAMCOUNT - 1 do - local activity = ActivityMan:GetActivity(); - if activity then - if activity:IsHumanTeam(team) then - activity:SetTeamFunds(activity:GetTeamFunds(team) + (self.updateInterval / 1000 * self.goldPerSecond), team); - end + if self.activity:IsHumanTeam(team) then + self.activity:SetTeamFunds(self.activity:GetTeamFunds(team) + (self.updateInterval / 1000 * self.goldPerSecond), team); end end self.updateTimer:Reset(); diff --git a/Base.rte/Scripts/Global/EnableFriendlyFire.lua b/Base.rte/Scripts/Global/EnableFriendlyFire.lua index b059c3ce6..2a40db98c 100644 --- a/Base.rte/Scripts/Global/EnableFriendlyFire.lua +++ b/Base.rte/Scripts/Global/EnableFriendlyFire.lua @@ -8,7 +8,7 @@ function FriendlyFireScript:UpdateScript() if self.updateTimer:IsPastSimTimeLimit() then for part in MovableMan.Particles do if part.HitsMOs and part.Team ~= -1 then - if (part.Age * GetPPM() * part.Vel.Magnitude) / 1000 > self.safeDist then + if (part.Age * GetPPM() * part.Vel.Magnitude) * 0.001 > self.safeDist then part.Team = -1; part.IgnoresTeamHits = false; end diff --git a/Base.rte/Scripts/Global/FasterWalking.lua b/Base.rte/Scripts/Global/FasterWalking.lua index 377fb9fe8..c75d452c0 100644 --- a/Base.rte/Scripts/Global/FasterWalking.lua +++ b/Base.rte/Scripts/Global/FasterWalking.lua @@ -6,10 +6,8 @@ function FasterWalkingScript:UpdateScript() for actor in MovableMan.AddedActors do if not actor:NumberValueExists("FasterWalkingScript") then self:BoostWalkSpeed(actor); - for i = 1, actor.InventorySize do - local item = actor:Inventory(); + for item in actor.Inventory do self:BoostWalkSpeed(item); - actor:SwapNextInventory(item, true); end end end diff --git a/Base.rte/Scripts/Global/FragileUnits.lua b/Base.rte/Scripts/Global/FragileUnits.lua index aa8749cbf..c9c03e743 100644 --- a/Base.rte/Scripts/Global/FragileUnits.lua +++ b/Base.rte/Scripts/Global/FragileUnits.lua @@ -2,10 +2,8 @@ function FragileUnitsScript:UpdateScript() for actor in MovableMan.AddedActors do if not actor:NumberValueExists("FragileUnitsScript") then self:MakeFragile(actor); - for i = 1, actor.InventorySize do - local item = actor:Inventory(); + for item in actor.Inventory do self:MakeFragile(item); - actor:SwapNextInventory(item, true); end end end diff --git a/Base.rte/Scripts/Global/InfiniteAmmo.lua b/Base.rte/Scripts/Global/InfiniteAmmo.lua index cea82bf31..42ae11b3b 100644 --- a/Base.rte/Scripts/Global/InfiniteAmmo.lua +++ b/Base.rte/Scripts/Global/InfiniteAmmo.lua @@ -8,7 +8,7 @@ function InfiniteAmmo:UpdateScript() if IsHDFirearm(item) then table.insert(items, ToHDFirearm(item)); elseif IsTDExplosive(item) then - -- Add a new grenade to the inventory every time one is thrown + --Add a new grenade to the inventory every time one is thrown local grenade = ToTDExplosive(item); if actor:GetController():IsState(Controller.WEAPON_FIRE) then local count = 0; @@ -36,7 +36,7 @@ function InfiniteAmmo:UpdateScript() end end end - -- Run this script for rogue weapons as well + --Run this script for rogue weapons as well for item in MovableMan.Items do if IsHDFirearm(item) then table.insert(items, ToHDFirearm(item)); @@ -45,7 +45,7 @@ function InfiniteAmmo:UpdateScript() for i = 1, #items do local weapon = items[i]; if weapon and weapon.Magazine then - -- Stop weapons like Dihelical Cannon from misbehaving + --Stop weapons like Dihelical Cannon from misbehaving if weapon.ActivationDelay > 0 and weapon:IsActivated() and weapon.Magazine.Capacity == 1 and weapon.Magazine.RoundCount == 0 then weapon:Deactivate(); end diff --git a/Base.rte/Scripts/Global/InstakillHeadshots.lua b/Base.rte/Scripts/Global/InstakillHeadshots.lua index 198915a4c..4ff16bdaa 100644 --- a/Base.rte/Scripts/Global/InstakillHeadshots.lua +++ b/Base.rte/Scripts/Global/InstakillHeadshots.lua @@ -2,29 +2,27 @@ function InstakillHeadshotsScript:UpdateScript() for actor in MovableMan.AddedActors do if not actor:NumberValueExists("InstakillHeadshotsScript") then self:WeakenHead(actor); - for i = 1, actor.InventorySize do - local item = actor:Inventory(); + for item in actor.Inventory do if IsActor(item) then self:WeakenHead(ToActor(item)); end - actor:SwapNextInventory(item, true); end end end end function InstakillHeadshotsScript:WeakenHead(actor) - actor:SetNumberValue("InstakillHeadshotsScript", 1) + actor:SetNumberValue("InstakillHeadshotsScript", 1); if IsAHuman(actor) then - local human = ToAHuman(actor) + local human = ToAHuman(actor); if human.Head then - human.Head.GibWoundLimit = 1 - human.Head.DamageMultiplier = human.MaxHealth + human.Head.GibWoundLimit = 1; + human.Head.DamageMultiplier = human.MaxHealth; end elseif IsACrab(actor) then - local crab = ToACrab(actor) + local crab = ToACrab(actor); if crab.Turret then - crab.Turret.GibWoundLimit = 1 - crab.Turret.DamageMultiplier = crab.MaxHealth + crab.Turret.GibWoundLimit = 1; + crab.Turret.DamageMultiplier = crab.MaxHealth; end end end \ No newline at end of file diff --git a/Base.rte/Scripts/Global/InvincibleCraft.lua b/Base.rte/Scripts/Global/InvincibleCraft.lua index 2ff670104..69df34d8d 100644 --- a/Base.rte/Scripts/Global/InvincibleCraft.lua +++ b/Base.rte/Scripts/Global/InvincibleCraft.lua @@ -1,7 +1,7 @@ function InvincibleCraftScript:UpdateScript() for actor in MovableMan.AddedActors do if not actor:NumberValueExists("InvincibleCraftScript") then - actor:SetNumberValue("InvincibleCraftScript", 1) + actor:SetNumberValue("InvincibleCraftScript", 1); if IsACDropShip(actor) or IsACRocket(actor) then actor.HitsMOs = false; actor.GetsHitByMOs = false; diff --git a/Base.rte/Scripts/Global/StrongerJetpacks.lua b/Base.rte/Scripts/Global/StrongerJetpacks.lua index a37f9016d..22c16d7ee 100644 --- a/Base.rte/Scripts/Global/StrongerJetpacks.lua +++ b/Base.rte/Scripts/Global/StrongerJetpacks.lua @@ -5,10 +5,8 @@ function StrongerJetpacksScript:UpdateScript() for actor in MovableMan.AddedActors do if not actor:NumberValueExists("StrongerJetpacksScript") then self:BuffJetpack(actor); - for i = 1, actor.InventorySize do - local item = actor:Inventory(); + for item in actor.Inventory do self:BuffJetpack(item); - actor:SwapNextInventory(item, true); end end end diff --git a/Base.rte/Scripts/Global/ToughUnits.lua b/Base.rte/Scripts/Global/ToughUnits.lua index a13d14d80..075903535 100644 --- a/Base.rte/Scripts/Global/ToughUnits.lua +++ b/Base.rte/Scripts/Global/ToughUnits.lua @@ -7,12 +7,10 @@ function ToughUnitsScript:UpdateScript() if IsAHuman(actor) or IsACrab(actor) then self:Buff(actor); else - for i = 1, actor.InventorySize do - local item = actor:Inventory(); + for item in actor.Inventory do if IsActor(item) then self:Buff(ToActor(item)); end - actor:SwapNextInventory(item, true); end end end diff --git a/Base.rte/Scripts/Shared/SmokeTrail.lua b/Base.rte/Scripts/Shared/SmokeTrail.lua index 52fe8690e..782fbba71 100644 --- a/Base.rte/Scripts/Shared/SmokeTrail.lua +++ b/Base.rte/Scripts/Shared/SmokeTrail.lua @@ -5,27 +5,24 @@ function Create(self) self.smokeTwirlCounter = math.random() < 0.5 and math.pi or 0; end function Update(self) - local effect; local offset = self.Vel * rte.PxTravelledPerFrame; --The effect will be created the next frame so move it one frame backwards towards the barrel local trailLength = math.floor(offset.Magnitude * 0.5 - 1); for i = 1, trailLength do local effect = CreateMOSParticle("Tiny Smoke Trail 1", "Base.rte"); - if effect then - effect.Pos = self.Pos - (offset * i/trailLength) + Vector(RangeRand(-1, 1), RangeRand(-1, 1)) * self.smokeTrailRadius; - effect.Vel = self.Vel * RangeRand(0.75, 1); - effect.Lifetime = self.smokeTrailLifeTime * RangeRand(0.5, 1); - - if self.smokeTrailTwirl > 0 then - effect.AirResistance = effect.AirResistance * RangeRand(0.9, 1); - effect.GlobalAccScalar = effect.GlobalAccScalar * math.random(); + effect.Pos = self.Pos - (offset * i/trailLength) + Vector(RangeRand(-1, 1), RangeRand(-1, 1)) * self.smokeTrailRadius; + effect.Vel = self.Vel * RangeRand(0.75, 1); + effect.Lifetime = self.smokeTrailLifeTime * RangeRand(0.5, 1); + + if self.smokeTrailTwirl > 0 then + effect.AirResistance = effect.AirResistance * RangeRand(0.9, 1); + effect.GlobalAccScalar = effect.GlobalAccScalar * math.random(); - effect.Pos = self.Pos - offset + (offset * i/trailLength); - effect.Vel = self.Vel + Vector(0, math.sin(self.smokeTwirlCounter) * self.smokeTrailTwirl + RangeRand(-0.1, 0.1)):RadRotate(self.Vel.AbsRadAngle); - - self.smokeTwirlCounter = self.smokeTwirlCounter + RangeRand(-0.2, 0.4); - end - MovableMan:AddParticle(effect); + effect.Pos = self.Pos - offset + (offset * i/trailLength); + effect.Vel = self.Vel + Vector(0, math.sin(self.smokeTwirlCounter) * self.smokeTrailTwirl + RangeRand(-0.1, 0.1)):RadRotate(self.Vel.AbsRadAngle); + + self.smokeTwirlCounter = self.smokeTwirlCounter + RangeRand(-0.2, 0.4); end + MovableMan:AddParticle(effect); end end \ No newline at end of file diff --git a/Base.rte/Sounds.ini b/Base.rte/Sounds.ini index b19b7f8a6..6484cce69 100644 --- a/Base.rte/Sounds.ini +++ b/Base.rte/Sounds.ini @@ -13,6 +13,17 @@ AddSoundContainer = SoundContainer FilePath = Base.rte/Sounds/Plopp3.flac +AddSoundContainer = SoundContainer + PresetName = Geiger Click + AttenuationStartDistance = 120 + AddSound = ContentFile + FilePath = Base.rte/Sounds/Geiger1.flac + AddSound = ContentFile + FilePath = Base.rte/Sounds/Geiger2.flac + AddSound = ContentFile + FilePath = Base.rte/Sounds/Geiger3.flac + + AddSoundContainer = SoundContainer PresetName = Null @@ -96,17 +107,17 @@ AddSoundContainer = SoundContainer PresetName = Flesh Body Blunt Hit AttenuationStartDistance = 130 AddSound = ContentFile - FilePath = Base.rte/Sounds/Physics/Human/Impact1.wav + FilePath = Base.rte/Sounds/Physics/Human/Impact1.flac AddSound = ContentFile - FilePath = Base.rte/Sounds/Physics/Human/Impact2.wav + FilePath = Base.rte/Sounds/Physics/Human/Impact2.flac AddSound = ContentFile - FilePath = Base.rte/Sounds/Physics/Human/Impact3.wav + FilePath = Base.rte/Sounds/Physics/Human/Impact3.flac AddSound = ContentFile - FilePath = Base.rte/Sounds/Physics/Human/Impact4.wav + FilePath = Base.rte/Sounds/Physics/Human/Impact4.flac AddSound = ContentFile - FilePath = Base.rte/Sounds/Physics/Human/Impact5.wav + FilePath = Base.rte/Sounds/Physics/Human/Impact5.flac AddSound = ContentFile - FilePath = Base.rte/Sounds/Physics/Human/Impact6.wav + FilePath = Base.rte/Sounds/Physics/Human/Impact6.flac AddSound = ContentFile FilePath = Base.rte/Sounds/Physics/Duns.flac AddSound = ContentFile @@ -132,6 +143,8 @@ AddSoundContainer = SoundContainer FilePath = Base.rte/Sounds/Actors/HumanPain3.flac AddSound = ContentFile FilePath = Base.rte/Sounds/Actors/HumanPain4.flac + AddSound = ContentFile + FilePath = Base.rte/Sounds/Actors/HumanPain5.flac AddSound = ContentFile FilePath = Base.rte/Sounds/Actors/ThudUrgh.flac @@ -177,22 +190,22 @@ AddSoundContainer = SoundContainer PresetName = Metal Body Blunt Hit Light AttenuationStartDistance = 135 AddSound = ContentFile - FilePath = Base.rte/Sounds/Physics/RobotLight/Impact1.wav + FilePath = Base.rte/Sounds/Physics/RobotLight/Impact1.flac AddSound = ContentFile - FilePath = Base.rte/Sounds/Physics/RobotLight/Impact2.wav + FilePath = Base.rte/Sounds/Physics/RobotLight/Impact2.flac AddSound = ContentFile - FilePath = Base.rte/Sounds/Physics/RobotLight/Impact3.wav + FilePath = Base.rte/Sounds/Physics/RobotLight/Impact3.flac AddSoundContainer = SoundContainer PresetName = Metal Body Blunt Hit Medium AttenuationStartDistance = 140 AddSound = ContentFile - FilePath = Base.rte/Sounds/Physics/RobotHeavy/Impact1.wav + FilePath = Base.rte/Sounds/Physics/RobotHeavy/Impact1.flac AddSound = ContentFile - FilePath = Base.rte/Sounds/Physics/RobotHeavy/Impact2.wav + FilePath = Base.rte/Sounds/Physics/RobotHeavy/Impact2.flac AddSound = ContentFile - FilePath = Base.rte/Sounds/Physics/RobotHeavy/Impact3.wav + FilePath = Base.rte/Sounds/Physics/RobotHeavy/Impact3.flac AddSound = ContentFile FilePath = Base.rte/Sounds/Physics/ClankCrash.flac AddSound = ContentFile @@ -251,7 +264,11 @@ AddSoundContainer = SoundContainer FilePath = Base.rte/Sounds/Actors/RobotStep1.flac AddSound = ContentFile FilePath = Base.rte/Sounds/Actors/RobotStep2.flac -/* + + +AddSoundContainer = SoundContainer + PresetName = Servo Sound + AttenuationStartDistance = 110 AddSound = ContentFile FilePath = Base.rte/Sounds/Actors/ServoStep1.flac AddSound = ContentFile @@ -264,7 +281,7 @@ AddSoundContainer = SoundContainer FilePath = Base.rte/Sounds/Actors/ServoStep5.flac AddSound = ContentFile FilePath = Base.rte/Sounds/Actors/ServoStep6.flac -*/ + AddSoundContainer = SoundContainer PresetName = Device Switch @@ -317,18 +334,18 @@ AddSoundContainer = SoundContainer AddSoundContainer = SoundContainer - PresetName = Riccochet + PresetName = Ricochet AttenuationStartDistance = 130 AddSound = ContentFile - FilePath = Base.rte/Sounds/Penetration/Riccochet1.flac + FilePath = Base.rte/Sounds/Penetration/Ricochet1.flac AddSound = ContentFile - FilePath = Base.rte/Sounds/Penetration/Riccochet2.flac + FilePath = Base.rte/Sounds/Penetration/Ricochet2.flac AddSound = ContentFile - FilePath = Base.rte/Sounds/Penetration/Riccochet3.flac + FilePath = Base.rte/Sounds/Penetration/Ricochet3.flac AddSound = ContentFile - FilePath = Base.rte/Sounds/Penetration/Riccochet4.flac + FilePath = Base.rte/Sounds/Penetration/Ricochet4.flac AddSound = ContentFile - FilePath = Base.rte/Sounds/Penetration/Riccochet5.flac + FilePath = Base.rte/Sounds/Penetration/Ricochet5.flac /////////////////////////////////////////////////////////////////////// diff --git a/Base.rte/Sounds/Actors/HumanPain5.flac b/Base.rte/Sounds/Actors/HumanPain5.flac new file mode 100644 index 000000000..304c1a5b5 Binary files /dev/null and b/Base.rte/Sounds/Actors/HumanPain5.flac differ diff --git a/Base.rte/Sounds/Craft/HatchOpen.flac b/Base.rte/Sounds/Craft/HatchOpen1.flac similarity index 100% rename from Base.rte/Sounds/Craft/HatchOpen.flac rename to Base.rte/Sounds/Craft/HatchOpen1.flac diff --git a/Base.rte/Sounds/Craft/HatchOpen2.flac b/Base.rte/Sounds/Craft/HatchOpen2.flac new file mode 100644 index 000000000..843b8b65e Binary files /dev/null and b/Base.rte/Sounds/Craft/HatchOpen2.flac differ diff --git a/Base.rte/Sounds/Penetration/Riccochet1.flac b/Base.rte/Sounds/Penetration/Ricochet1.flac similarity index 100% rename from Base.rte/Sounds/Penetration/Riccochet1.flac rename to Base.rte/Sounds/Penetration/Ricochet1.flac diff --git a/Base.rte/Sounds/Penetration/Riccochet2.flac b/Base.rte/Sounds/Penetration/Ricochet2.flac similarity index 100% rename from Base.rte/Sounds/Penetration/Riccochet2.flac rename to Base.rte/Sounds/Penetration/Ricochet2.flac diff --git a/Base.rte/Sounds/Penetration/Riccochet3.flac b/Base.rte/Sounds/Penetration/Ricochet3.flac similarity index 100% rename from Base.rte/Sounds/Penetration/Riccochet3.flac rename to Base.rte/Sounds/Penetration/Ricochet3.flac diff --git a/Base.rte/Sounds/Penetration/Riccochet4.flac b/Base.rte/Sounds/Penetration/Ricochet4.flac similarity index 100% rename from Base.rte/Sounds/Penetration/Riccochet4.flac rename to Base.rte/Sounds/Penetration/Ricochet4.flac diff --git a/Base.rte/Sounds/Penetration/Riccochet5.flac b/Base.rte/Sounds/Penetration/Ricochet5.flac similarity index 100% rename from Base.rte/Sounds/Penetration/Riccochet5.flac rename to Base.rte/Sounds/Penetration/Ricochet5.flac diff --git a/Base.rte/Sounds/Physics/Human/Impact1.flac b/Base.rte/Sounds/Physics/Human/Impact1.flac new file mode 100644 index 000000000..12ae9e3cd Binary files /dev/null and b/Base.rte/Sounds/Physics/Human/Impact1.flac differ diff --git a/Base.rte/Sounds/Physics/Human/Impact1.wav b/Base.rte/Sounds/Physics/Human/Impact1.wav deleted file mode 100644 index d9268615f..000000000 Binary files a/Base.rte/Sounds/Physics/Human/Impact1.wav and /dev/null differ diff --git a/Base.rte/Sounds/Physics/Human/Impact2.flac b/Base.rte/Sounds/Physics/Human/Impact2.flac new file mode 100644 index 000000000..045322763 Binary files /dev/null and b/Base.rte/Sounds/Physics/Human/Impact2.flac differ diff --git a/Base.rte/Sounds/Physics/Human/Impact2.wav b/Base.rte/Sounds/Physics/Human/Impact2.wav deleted file mode 100644 index f1f87d677..000000000 Binary files a/Base.rte/Sounds/Physics/Human/Impact2.wav and /dev/null differ diff --git a/Base.rte/Sounds/Physics/Human/Impact3.flac b/Base.rte/Sounds/Physics/Human/Impact3.flac new file mode 100644 index 000000000..a8290bcb4 Binary files /dev/null and b/Base.rte/Sounds/Physics/Human/Impact3.flac differ diff --git a/Base.rte/Sounds/Physics/Human/Impact3.wav b/Base.rte/Sounds/Physics/Human/Impact3.wav deleted file mode 100644 index c7bae93bb..000000000 Binary files a/Base.rte/Sounds/Physics/Human/Impact3.wav and /dev/null differ diff --git a/Base.rte/Sounds/Physics/Human/Impact4.flac b/Base.rte/Sounds/Physics/Human/Impact4.flac new file mode 100644 index 000000000..06ec0b86d Binary files /dev/null and b/Base.rte/Sounds/Physics/Human/Impact4.flac differ diff --git a/Base.rte/Sounds/Physics/Human/Impact4.wav b/Base.rte/Sounds/Physics/Human/Impact4.wav deleted file mode 100644 index 2970c3f55..000000000 Binary files a/Base.rte/Sounds/Physics/Human/Impact4.wav and /dev/null differ diff --git a/Base.rte/Sounds/Physics/Human/Impact5.flac b/Base.rte/Sounds/Physics/Human/Impact5.flac new file mode 100644 index 000000000..ec44493a5 Binary files /dev/null and b/Base.rte/Sounds/Physics/Human/Impact5.flac differ diff --git a/Base.rte/Sounds/Physics/Human/Impact5.wav b/Base.rte/Sounds/Physics/Human/Impact5.wav deleted file mode 100644 index 03f1a19d6..000000000 Binary files a/Base.rte/Sounds/Physics/Human/Impact5.wav and /dev/null differ diff --git a/Base.rte/Sounds/Physics/Human/Impact6.flac b/Base.rte/Sounds/Physics/Human/Impact6.flac new file mode 100644 index 000000000..a41de9dd4 Binary files /dev/null and b/Base.rte/Sounds/Physics/Human/Impact6.flac differ diff --git a/Base.rte/Sounds/Physics/Human/Impact6.wav b/Base.rte/Sounds/Physics/Human/Impact6.wav deleted file mode 100644 index 862073998..000000000 Binary files a/Base.rte/Sounds/Physics/Human/Impact6.wav and /dev/null differ diff --git a/Base.rte/Sounds/Physics/RobotHeavy/Impact1.flac b/Base.rte/Sounds/Physics/RobotHeavy/Impact1.flac new file mode 100644 index 000000000..a68f53420 Binary files /dev/null and b/Base.rte/Sounds/Physics/RobotHeavy/Impact1.flac differ diff --git a/Base.rte/Sounds/Physics/RobotHeavy/Impact1.wav b/Base.rte/Sounds/Physics/RobotHeavy/Impact1.wav deleted file mode 100644 index b7d20078d..000000000 Binary files a/Base.rte/Sounds/Physics/RobotHeavy/Impact1.wav and /dev/null differ diff --git a/Base.rte/Sounds/Physics/RobotHeavy/Impact2.flac b/Base.rte/Sounds/Physics/RobotHeavy/Impact2.flac new file mode 100644 index 000000000..7676ab2a6 Binary files /dev/null and b/Base.rte/Sounds/Physics/RobotHeavy/Impact2.flac differ diff --git a/Base.rte/Sounds/Physics/RobotHeavy/Impact2.wav b/Base.rte/Sounds/Physics/RobotHeavy/Impact2.wav deleted file mode 100644 index 2fc16536b..000000000 Binary files a/Base.rte/Sounds/Physics/RobotHeavy/Impact2.wav and /dev/null differ diff --git a/Base.rte/Sounds/Physics/RobotHeavy/Impact3.flac b/Base.rte/Sounds/Physics/RobotHeavy/Impact3.flac new file mode 100644 index 000000000..2b2f15309 Binary files /dev/null and b/Base.rte/Sounds/Physics/RobotHeavy/Impact3.flac differ diff --git a/Base.rte/Sounds/Physics/RobotHeavy/Impact3.wav b/Base.rte/Sounds/Physics/RobotHeavy/Impact3.wav deleted file mode 100644 index b1b50f767..000000000 Binary files a/Base.rte/Sounds/Physics/RobotHeavy/Impact3.wav and /dev/null differ diff --git a/Base.rte/Sounds/Physics/RobotLight/Impact1.flac b/Base.rte/Sounds/Physics/RobotLight/Impact1.flac new file mode 100644 index 000000000..a3f494fd9 Binary files /dev/null and b/Base.rte/Sounds/Physics/RobotLight/Impact1.flac differ diff --git a/Base.rte/Sounds/Physics/RobotLight/Impact1.wav b/Base.rte/Sounds/Physics/RobotLight/Impact1.wav deleted file mode 100644 index 102c9b104..000000000 Binary files a/Base.rte/Sounds/Physics/RobotLight/Impact1.wav and /dev/null differ diff --git a/Base.rte/Sounds/Physics/RobotLight/Impact2.flac b/Base.rte/Sounds/Physics/RobotLight/Impact2.flac new file mode 100644 index 000000000..f8a3e30b4 Binary files /dev/null and b/Base.rte/Sounds/Physics/RobotLight/Impact2.flac differ diff --git a/Base.rte/Sounds/Physics/RobotLight/Impact2.wav b/Base.rte/Sounds/Physics/RobotLight/Impact2.wav deleted file mode 100644 index bea10020e..000000000 Binary files a/Base.rte/Sounds/Physics/RobotLight/Impact2.wav and /dev/null differ diff --git a/Base.rte/Sounds/Physics/RobotLight/Impact3.flac b/Base.rte/Sounds/Physics/RobotLight/Impact3.flac new file mode 100644 index 000000000..59d47275f Binary files /dev/null and b/Base.rte/Sounds/Physics/RobotLight/Impact3.flac differ diff --git a/Base.rte/Sounds/Physics/RobotLight/Impact3.wav b/Base.rte/Sounds/Physics/RobotLight/Impact3.wav deleted file mode 100644 index 4aa3450cd..000000000 Binary files a/Base.rte/Sounds/Physics/RobotLight/Impact3.wav and /dev/null differ diff --git a/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/BrowncoatHeavy.ini b/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/BrowncoatHeavy.ini index 1bef8178e..d599a4440 100644 --- a/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/BrowncoatHeavy.ini +++ b/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/BrowncoatHeavy.ini @@ -205,7 +205,7 @@ AddEffect = Attachable AddGib = Gib GibParticle = MOPixel CopyOf = Drop Blood - Count = 100 + Count = 50 Spread = 2.25 MaxVelocity = 10 MinVelocity = 1 @@ -573,7 +573,7 @@ AddActor = Leg JointOffset = Vector X = -5 Y = 2 - DrawAfterParent = 0 + DrawAfterParent = 1 Foot = Attachable CopyOf = Browncoat Heavy Foot FG ParentOffset = Vector @@ -711,6 +711,7 @@ AddActor = AHuman ParentOffset = Vector X = 2 Y = -13 + LookToAimRatio = 0.4 AddAttachable = Attachable CopyOf = Browncoat Heavy Misc Part A ParentOffset = Vector @@ -760,8 +761,13 @@ AddActor = AHuman CopyOf = Browncoat Stand Path BG WalkLimbPath = LimbPath CopyOf = Browncoat Walk Path + NormalTravelSpeed = 3 + WalkRotAngleTarget = -0.15 CrouchLimbPath = LimbPath - CopyOf = Browncoat Crouch Path + CopyOf = Human Crouch Path + CrouchLimbPathBG = LimbPath + CopyOf = Human Crouch Path BG + CrouchRotAngleTarget = -0.6 CrawlLimbPath = LimbPath CopyOf = Browncoat Crawl Path ArmCrawlLimbPath = LimbPath diff --git a/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootBGB000.png b/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootBGB000.png index 559996440..bafcbb01c 100644 Binary files a/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootBGB000.png and b/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootBGB000.png differ diff --git a/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootBGB001.png b/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootBGB001.png index ea7eafc88..5c2fea337 100644 Binary files a/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootBGB001.png and b/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootBGB001.png differ diff --git a/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootBGB002.png b/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootBGB002.png index 06637df03..07a089bf7 100644 Binary files a/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootBGB002.png and b/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootBGB002.png differ diff --git a/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootBGB003.png b/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootBGB003.png index 6fff2147b..81117192e 100644 Binary files a/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootBGB003.png and b/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootBGB003.png differ diff --git a/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootFGB000.png b/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootFGB000.png index 4d22a116a..a850b3b07 100644 Binary files a/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootFGB000.png and b/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootFGB000.png differ diff --git a/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootFGB001.png b/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootFGB001.png index 59ec0fb94..12fde866c 100644 Binary files a/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootFGB001.png and b/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootFGB001.png differ diff --git a/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootFGB002.png b/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootFGB002.png index d6777bcab..2e036a9c3 100644 Binary files a/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootFGB002.png and b/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootFGB002.png differ diff --git a/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootFGB003.png b/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootFGB003.png index 8eac64438..088cb481e 100644 Binary files a/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootFGB003.png and b/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/FootFGB003.png differ diff --git a/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/HeadB000.png b/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/HeadB000.png index 391a2f2b9..0877c740e 100644 Binary files a/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/HeadB000.png and b/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/HeadB000.png differ diff --git a/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/HeadB001.png b/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/HeadB001.png index 4ffe54e47..fd7426180 100644 Binary files a/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/HeadB001.png and b/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/HeadB001.png differ diff --git a/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/TorsoB.png b/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/TorsoB.png index c7efa684e..1cf3e4db0 100644 Binary files a/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/TorsoB.png and b/Browncoats.rte/Actors/Infantry/BrowncoatHeavy/TorsoB.png differ diff --git a/Browncoats.rte/Actors/Infantry/BrowncoatLight/BrowncoatLight.ini b/Browncoats.rte/Actors/Infantry/BrowncoatLight/BrowncoatLight.ini index ee819c9a9..59417b094 100644 --- a/Browncoats.rte/Actors/Infantry/BrowncoatLight/BrowncoatLight.ini +++ b/Browncoats.rte/Actors/Infantry/BrowncoatLight/BrowncoatLight.ini @@ -183,33 +183,7 @@ AddEffect = Attachable AddGib = Gib GibParticle = MOSParticle CopyOf = Small Smoke Ball 1 - Offset = Vector - X = 0 - Y = 0 - AddGib = Gib - GibParticle = MOSParticle - CopyOf = Small Smoke Ball 1 - Offset = Vector - X = 0 - Y = 0 - AddGib = Gib - GibParticle = MOSParticle - CopyOf = Small Smoke Ball 1 - Offset = Vector - X = 0 - Y = 0 - AddGib = Gib - GibParticle = MOSParticle - CopyOf = Small Smoke Ball 1 - Offset = Vector - X = 0 - Y = 0 - AddGib = Gib - GibParticle = MOSParticle - CopyOf = Small Smoke Ball 1 - Offset = Vector - X = 0 - Y = 0 + Count = 5 AddEffect = Attachable @@ -554,7 +528,7 @@ AddActor = Leg JointOffset = Vector X = -5 Y = 2 - DrawAfterParent = 0 + DrawAfterParent = 1 Foot = Attachable CopyOf = Browncoat Light Foot FG ParentOffset = Vector @@ -748,55 +722,21 @@ AddActor = AHuman X = 7 Y = 16 WalkLimbPath = LimbPath + CopyOf = Human Walk Path PresetName = Browncoat Walk Path StartOffset = Vector X = 10 - Y = -2 - StartSegCount = 3 - AddSegment = Vector - X = 0 - Y = 2 - AddSegment = Vector - X = 0 - Y = 2 - AddSegment = Vector - X = 0 - Y = 5 - AddSegment = Vector - X = 0 - Y = 5 - AddSegment = Vector - X = -6 - Y = 4 - AddSegment = Vector - X = -4 - Y = 0 - AddSegment = Vector - X = -4 - Y = 0 - AddSegment = Vector - X = -4 - Y = 1 - AddSegment = Vector - X = -3 - Y = 1 - AddSegment = Vector - X = 0 - Y = -2 + Y = -1 SlowTravelSpeed = 1.9 NormalTravelSpeed = 3.2 FastTravelSpeed = 4.5 PushForce = 8000 + WalkRotAngleTarget = -0.2 CrouchLimbPath = LimbPath - PresetName = Browncoat Crouch Path - StartOffset = Vector - X = 10 - Y = 3 - StartSegCount = 0 - SlowTravelSpeed = 0.1 - NormalTravelSpeed = 0.5 - FastTravelSpeed = 1.5 - PushForce = 8000 + CopyOf = Human Crouch Path + CrouchLimbPathBG = LimbPath + CopyOf = Human Crouch Path BG + CrouchRotAngleTarget = -0.7 CrawlLimbPath = LimbPath PresetName = Browncoat Crawl Path StartOffset = Vector diff --git a/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootBGA000.png b/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootBGA000.png index a3946536d..abb1575bc 100644 Binary files a/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootBGA000.png and b/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootBGA000.png differ diff --git a/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootBGA001.png b/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootBGA001.png index bdd5fb7c4..8d069315a 100644 Binary files a/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootBGA001.png and b/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootBGA001.png differ diff --git a/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootBGA002.png b/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootBGA002.png index dae22d5d5..0a540cd0d 100644 Binary files a/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootBGA002.png and b/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootBGA002.png differ diff --git a/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootBGA003.png b/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootBGA003.png index e9abe7c1b..d68144136 100644 Binary files a/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootBGA003.png and b/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootBGA003.png differ diff --git a/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootFGA000.png b/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootFGA000.png index 4c20513c6..0d7c6fb45 100644 Binary files a/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootFGA000.png and b/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootFGA000.png differ diff --git a/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootFGA001.png b/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootFGA001.png index 6fe4f6c39..b57b280dc 100644 Binary files a/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootFGA001.png and b/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootFGA001.png differ diff --git a/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootFGA002.png b/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootFGA002.png index 6d8010d99..9b6b28f55 100644 Binary files a/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootFGA002.png and b/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootFGA002.png differ diff --git a/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootFGA003.png b/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootFGA003.png index e6931cf78..595619338 100644 Binary files a/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootFGA003.png and b/Browncoats.rte/Actors/Infantry/BrowncoatLight/FootFGA003.png differ diff --git a/Browncoats.rte/Devices.ini b/Browncoats.rte/Devices.ini index 6d8931804..3952ea8f8 100644 --- a/Browncoats.rte/Devices.ini +++ b/Browncoats.rte/Devices.ini @@ -19,10 +19,15 @@ IncludeFile = Browncoats.rte/Devices/Explosives/FuelBomb/FuelBomb.ini IncludeFile = Browncoats.rte/Devices/Weapons/Stinger/Stinger.ini IncludeFile = Browncoats.rte/Devices/Weapons/Hammerfist/Hammerfist.ini -IncludeFile = Browncoats.rte/Devices/Weapons/Trailblazer/Trailblazer.ini IncludeFile = Browncoats.rte/Devices/Weapons/Backblast/Backblast.ini IncludeFile = Browncoats.rte/Devices/Weapons/Longshot/Longshot.ini +IncludeFile = Browncoats.rte/Devices/Weapons/Trailblazer/Trailblazer.ini IncludeFile = Browncoats.rte/Devices/Weapons/Heatlance/Heatlance.ini IncludeFile = Browncoats.rte/Devices/Weapons/Magmaul/Magmaul.ini IncludeFile = Browncoats.rte/Devices/Weapons/Flash/Flash.ini -IncludeFile = Browncoats.rte/Devices/Weapons/Firestorm/Firestorm.ini \ No newline at end of file +IncludeFile = Browncoats.rte/Devices/Weapons/Firestorm/Firestorm.ini + + +// Tools + +IncludeFile = Browncoats.rte/Devices/Tools/Blowtorch/Blowtorch.ini \ No newline at end of file diff --git a/Browncoats.rte/Devices/Explosives/FuelBomb/FuelBomb.lua b/Browncoats.rte/Devices/Explosives/FuelBomb/FuelBomb.lua index c5ad44bce..64345064a 100644 --- a/Browncoats.rte/Devices/Explosives/FuelBomb/FuelBomb.lua +++ b/Browncoats.rte/Devices/Explosives/FuelBomb/FuelBomb.lua @@ -3,7 +3,7 @@ function Create(self) self.explodeTimer = Timer(); self.partList = {}; - self.explodeTime = 2000; + self.explodeTime = 1500; self.numOfParticles = 40; self.particlesPerOil = 5; diff --git a/Browncoats.rte/Devices/Shared.ini b/Browncoats.rte/Devices/Shared.ini index a78501b54..4bf29fe4a 100644 --- a/Browncoats.rte/Devices/Shared.ini +++ b/Browncoats.rte/Devices/Shared.ini @@ -5,70 +5,28 @@ AddEffect = MOSParticle CopyOf = Flame Smoke 2 Glow PresetName = Flame Smoke 2 Glow B + LifeTime = 1000 + AirResistance = 0.025 + AirThreshold = 2.5 ScreenEffect = ContentFile FilePath = Base.rte/Effects/Glows/FireGlow2.png + EffectStopTime = 250 EffectStartStrength = 0.1 EffectStopStrength = 0.0 AddEffect = MOPixel CopyOf = Glow Explosion Huge - PresetName = Incendiary Bullet Trail Glow 1 + PresetName = Incendiary Bullet Trail Glow Light PinStrength = 1 - LifeTime = 40 + LifeTime = 1000 Color = Color R = 249 G = 248 B = 144 - ScreenEffect = ContentFile - FilePath = Browncoats.rte/Devices/Shared/Glows/TrailGlow1.png - EffectStartTime = 1 - EffectStopTime = 40 - EffectStartStrength = 0.5 - EffectStopStrength = 0.0 - RandomizeEffectRotAngle = 1 - - -AddEffect = MOPixel - CopyOf = Incendiary Bullet Trail Glow 1 - PresetName = Incendiary Bullet Trail Glow 2 - ScreenEffect = ContentFile - FilePath = Browncoats.rte/Devices/Shared/Glows/TrailGlow2.png - - -AddEffect = MOPixel - CopyOf = Incendiary Bullet Trail Glow 1 - PresetName = Incendiary Bullet Trail Glow 3 - ScreenEffect = ContentFile - FilePath = Browncoats.rte/Devices/Shared/Glows/TrailGlow3.png - - -AddEffect = MOPixel - CopyOf = Incendiary Bullet Trail Glow 1 - PresetName = Incendiary Bullet Trail Glow 4 - LifeTime = 60 - ScreenEffect = ContentFile - FilePath = Browncoats.rte/Devices/Shared/Glows/TrailGlow4.png - EffectStopTime = 60 - EffectStartStrength = 0.3 - - -AddEffect = MOPixel - CopyOf = Incendiary Bullet Trail Glow 1 - PresetName = Incendiary Bullet Trail Glow 0 - ScreenEffect = ContentFile - FilePath = Browncoats.rte/Devices/Shared/Glows/TrailGlow1.png - EffectStartTime = 0 - - -AddEffect = MOPixel - CopyOf = Incendiary Bullet Trail Glow 0 - PresetName = Incendiary Bullet Trail Glow Light - LifeTime = 1000 ScreenEffect = ContentFile FilePath = Base.rte/Effects/Glows/FireGlow2.png EffectAlwaysShows = 0 EffectStopTime = 1000 EffectStartStrength = 0.1 - EffectStopStrength = 0.0 - RandomizeEffectRotAngle = 0 \ No newline at end of file + EffectStopStrength = 0.0 \ No newline at end of file diff --git a/Browncoats.rte/Devices/Shared/Glows/TrailGlow1.png b/Browncoats.rte/Devices/Shared/Glows/TrailGlow1.png deleted file mode 100644 index 44c355662..000000000 Binary files a/Browncoats.rte/Devices/Shared/Glows/TrailGlow1.png and /dev/null differ diff --git a/Browncoats.rte/Devices/Shared/Glows/TrailGlow2.png b/Browncoats.rte/Devices/Shared/Glows/TrailGlow2.png deleted file mode 100644 index daa482bf8..000000000 Binary files a/Browncoats.rte/Devices/Shared/Glows/TrailGlow2.png and /dev/null differ diff --git a/Browncoats.rte/Devices/Shared/Glows/TrailGlow3.png b/Browncoats.rte/Devices/Shared/Glows/TrailGlow3.png deleted file mode 100644 index 18c6ba417..000000000 Binary files a/Browncoats.rte/Devices/Shared/Glows/TrailGlow3.png and /dev/null differ diff --git a/Browncoats.rte/Devices/Shared/Glows/TrailGlow4.png b/Browncoats.rte/Devices/Shared/Glows/TrailGlow4.png deleted file mode 100644 index ac65aac37..000000000 Binary files a/Browncoats.rte/Devices/Shared/Glows/TrailGlow4.png and /dev/null differ diff --git a/Browncoats.rte/Devices/Shared/IncendiaryBulletHeavy.lua b/Browncoats.rte/Devices/Shared/IncendiaryBulletHeavy.lua index 297af9bfe..4d966c3da 100644 --- a/Browncoats.rte/Devices/Shared/IncendiaryBulletHeavy.lua +++ b/Browncoats.rte/Devices/Shared/IncendiaryBulletHeavy.lua @@ -1,30 +1,34 @@ function Create(self) - self.trailLength = 50; - local trail = CreateMOPixel("Incendiary Bullet Trail Glow 0"); - trail.Pos = self.Pos - Vector(self.Vel.X, self.Vel.Y) * rte.PxTravelledPerFrame * 0.5; - trail.EffectRotAngle = self.Vel.AbsRadAngle; - MovableMan:AddParticle(trail); - self.fire = CreatePEmitter("Flame Hurt Short"); + self.smokeTwirlCounter = math.random() < 0.5 and math.pi or 0; end function Update(self) local velFactor = math.floor(1 + math.sqrt(self.Vel.Magnitude)/(1 + self.Age * 0.01)); - for i = 1, velFactor do - local particle = i == 1 and CreateMOPixel("Ground Fire Burn Particle") or CreateMOSParticle("Flame Smoke 1 Micro"); - particle.Pos = Vector(self.Pos.X, self.Pos.Y) - Vector(self.Vel.X, self.Vel.Y) * rte.PxTravelledPerFrame * (i/velFactor); - particle.Vel = self.Vel * 0.5 + Vector(math.random(5, 10)/velFactor, 0):RadRotate(math.random() * 6.28); - particle.Lifetime = particle.Lifetime * RangeRand(0.7, math.sqrt(velFactor)); - particle.Sharpness = particle.Sharpness/i; - particle.GlobalAccScalar = -math.random(); - particle.Team = self.Team; - particle.IgnoresTeamHits = true; - MovableMan:AddParticle(particle); + + local particle = CreateMOPixel("Fire Burn Particle"); + particle.Pos = Vector(self.Pos.X, self.Pos.Y) - Vector(self.Vel.X, self.Vel.Y) * rte.PxTravelledPerFrame * 0.5; + particle.Vel = self.Vel * 0.5 + Vector(math.random(5, 10)/velFactor, 0):RadRotate(math.random() * math.pi * 2); + particle.Lifetime = particle.Lifetime * RangeRand(0.3, 0.5); + particle.GlobalAccScalar = -math.random(); + particle.Team = self.Team; + particle.IgnoresTeamHits = true; + MovableMan:AddParticle(particle); + + local offset = self.Vel * rte.PxTravelledPerFrame; + local trailLength = math.floor(offset.Magnitude * 0.5 - 1); + for i = 1, trailLength do + local effect = CreateMOSParticle("Flame Smoke 1 Micro", "Base.rte"); + effect.Lifetime = effect.Lifetime * RangeRand(0.5, 1); + + effect.AirResistance = effect.AirResistance * RangeRand(0.9, 1); + effect.GlobalAccScalar = effect.GlobalAccScalar * math.random(); + + effect.Pos = self.Pos - offset + (offset * i/trailLength); + effect.Vel = self.Vel * 0.1 + Vector(1, math.sin(self.smokeTwirlCounter) + RangeRand(-0.1, 0.1)):RadRotate(self.Vel.AbsRadAngle); + + self.smokeTwirlCounter = self.smokeTwirlCounter + RangeRand(-0.2, 0.4); + MovableMan:AddParticle(effect); end - local glowNumber = self.Vel.Magnitude > 60 and 1 or (self.Vel.Magnitude > 40 and 2 or (self.Vel.Magnitude > 20 and 3 or 4)); - local trail = CreateMOPixel("Incendiary Bullet Trail Glow ".. glowNumber); - trail.Pos = self.Pos - Vector(self.Vel.X, self.Vel.Y):SetMagnitude(math.min(self.Vel.Magnitude * rte.PxTravelledPerFrame, self.trailLength) * 0.5); - trail.EffectRotAngle = self.Vel.AbsRadAngle; - MovableMan:AddParticle(trail); if self.ToDelete then if self.Age < self.Lifetime then @@ -37,12 +41,6 @@ function Update(self) self.fire.Vel = Vector(self.Vel.X, self.Vel.Y):SetMagnitude(skipPx); MovableMan:AddParticle(self.fire); end - else - local smoke = CreateMOSParticle("Flame Smoke 1"); - smoke.Pos = Vector(self.Pos.X, self.Pos.Y); - smoke.Vel = Vector(self.Vel.X, self.Vel.Y) * 0.5; - smoke.Lifetime = math.random(250, 500); - MovableMan:AddParticle(smoke); end end end \ No newline at end of file diff --git a/Browncoats.rte/Devices/Shared/IncendiaryBulletLight.lua b/Browncoats.rte/Devices/Shared/IncendiaryBulletLight.lua index 1694a54ea..0390c87b6 100644 --- a/Browncoats.rte/Devices/Shared/IncendiaryBulletLight.lua +++ b/Browncoats.rte/Devices/Shared/IncendiaryBulletLight.lua @@ -17,7 +17,7 @@ function Update(self) if math.random() < 0.5 then local particle = CreateMOPixel("Ground Fire Burn Particle"); particle.Pos = Vector(self.Pos.X, self.Pos.Y) - Vector(self.Vel.X, self.Vel.Y) * rte.PxTravelledPerFrame * math.random(); - particle.Vel = self.Vel * RangeRand(0.5, 1.0) + Vector(math.random(10), 0):RadRotate(math.random() * 6.28); + particle.Vel = self.Vel * RangeRand(0.5, 1.0) + Vector(math.random(10), 0):RadRotate(math.random() * math.pi * 2); particle.Lifetime = particle.Lifetime * RangeRand(0.5, 1.0); particle.Sharpness = particle.Sharpness * RangeRand(0.1, 1.0); particle.Team = self.Team; diff --git a/Browncoats.rte/Devices/Tools/Blowtorch/Blowtorch.ini b/Browncoats.rte/Devices/Tools/Blowtorch/Blowtorch.ini new file mode 100644 index 000000000..c90f9788a --- /dev/null +++ b/Browncoats.rte/Devices/Tools/Blowtorch/Blowtorch.ini @@ -0,0 +1,252 @@ +/////////////////////////////////////////////////////////////////////// +// Blowtorch Sounds + +AddSoundContainer = SoundContainer + PresetName = Blowtorch Fire Sound Start + AddSound = ContentFile + FilePath = Browncoats.rte/Devices/Tools/Blowtorch/Sounds/Start.flac + AttenuationStartDistance = 150 + + +AddSoundContainer = SoundContainer + PresetName = Blowtorch Fire Sound End + AddSound = ContentFile + FilePath = Browncoats.rte/Devices/Tools/Blowtorch/Sounds/End.flac + AttenuationStartDistance = 150 + +/////////////////////////////////////////////////////////////////////// +// Blowtorch Ammo + + +AddAmmo = Round + PresetName = Round DG-1000 + ParticleCount = 2 + Particle = MOSParticle + CopyOf = Flame Smoke 1 + PresetName = Particle DG-1000 + Sharpness = 9 + LifeTime = 320 + HitsMOs = 0 + AirThreshold = 1 + ScreenEffect = ContentFile + FilePath = Base.rte/Effects/Glows/FireGlowSmall.png + EffectStopTime = 240 + EffectStartStrength = 0.5 + EffectStopStrength = 0.0 + FireVelocity = 25 + Separation = 6 + Shell = MOPixel + CopyOf = Particle Very Heavy Digger Damage + ShellVelocity = 45 + + +AddAmmo = Round + CopyOf = Round DG-1000 + PresetName = Tracer DG-1000 + ParticleCount = 2 + Particle = MOSParticle + CopyOf = Particle DG-1000 + PresetName = Tracer DG-1000 + LifeTime = 250 + HitsMOs = 1 + AirResistance = 0.2 + AirThreshold = 1 + ScreenEffect = ContentFile + FilePath = Base.rte/Effects/Glows/FireGlow1.png + EffectStopTime = 200 + EffectStartStrength = 0.3 + EffectStopStrength = 0.0 + FireVelocity = 30 + Separation = 9 + Shell = MOPixel + CopyOf = Particle Very Heavy Digger Damage + ShellVelocity = 80 + + +AddAmmo = Magazine + PresetName = Magazine DG-1000 + Mass = 4.5 + HitsMOs = 0 + GetsHitByMOs = 0 + CollidesWithTerrainWhileAttached = 1 + SpriteFile = ContentFile + FilePath = Browncoats.rte/Devices/Tools/Blowtorch/BlowtorchMagazine.png + FrameCount = 1 + SpriteOffset = Vector + X = -2 + Y = -4 + EntryWound = AEmitter + CopyOf = Dent Metal + ExitWound = AEmitter + CopyOf = Dent Metal + AtomGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Bullet Metal + Resolution = 2 + Depth = 0 + DeepGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Bullet Metal + Resolution = 3 + Depth = 1 + DeepCheck = 0 + JointStrength = 200 + JointStiffness = 1 + JointOffset = Vector + X = 0 + Y = -3 + ParentOffset = Vector + X = 1 + Y = 2 + DrawAfterParent = 1 + RoundCount = 1000 + RTTRatio = 3 + RegularRound = Round + CopyOf = Round DG-1000 + TracerRound = Round + CopyOf = Tracer DG-1000 + + +/////////////////////////////////////////////////////////////////////// +// Blowtorch + + +AddDevice = HDFirearm + PresetName = DG-1000 Blowtorch + AddToGroup = Tools + AddToGroup = Tools - Diggers + Description = Incredibly light but powerful digging device. Not the best at collecting gold, but excellent for breaching bunkers. + Mass = 4.5 + HitsMOs = 0 + GetsHitByMOs = 1 + ScriptPath = Browncoats.rte/Devices/Tools/Blowtorch/Blowtorch.lua + SpriteFile = ContentFile + FilePath = Browncoats.rte/Devices/Tools/Blowtorch/Blowtorch.png + FrameCount = 2 + SpriteOffset = Vector + X = -6 + Y = -4 + EntryWound = AEmitter + CopyOf = Dent Metal + ExitWound = AEmitter + CopyOf = Dent Metal + GoldValue = 60 + AtomGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Military Stuff + Resolution = 4 + Depth = 0 + DeepGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Military Stuff + Resolution = 4 + Depth = 10 + DeepCheck = 0 + JointStrength = 100 + JointStiffness = 0.5 + JointOffset = Vector + X = -2 + Y = 3 + DrawAfterParent = 0 + OneHanded = 1 + StanceOffset = Vector + X = 10 + Y = 3 + SharpStanceOffset = Vector + X = 13 + Y = -1 + SupportOffset = Vector + X = -2 + Y = 5 + SharpLength = 25 + Magazine = Magazine + CopyOf = Magazine DG-1000 + Flash = Attachable + CopyOf = Jet Flame B + FireSound = SoundContainer //To-do: add custom sounds + AttenuationStartDistance = 150 + AddSound = ContentFile + FilePath = Browncoats.rte/Devices/Tools/Blowtorch/Sounds/Loop.flac + LoopSetting = -1 + EmptySound = SoundContainer + AddSound = ContentFile + FilePath = Base.rte/Sounds/Devices/EmptyClick1.flac + ReloadStartSound = SoundContainer + AttenuationStartDistance = 100 + AddSound = ContentFile + FilePath = Browncoats.rte/Devices/Tools/Blowtorch/Sounds/ReloadStart.flac + ReloadEndSound = SoundContainer + AttenuationStartDistance = 110 + AddSound = ContentFile + FilePath = Browncoats.rte/Devices/Tools/Blowtorch/Sounds/ReloadEnd.flac + RecoilTransmission = 0.5 + RateOfFire = 4000 + ReloadTime = 1800 + FullAuto = 1 + FireIgnoresThis = 1 + ShakeRange = 2 + SharpShakeRange = 1 + NoSupportFactor = 2 + ParticleSpreadRange = 30 + ShellEjectAngle = 0 + ShellSpreadRange = 15 + MuzzleOffset = Vector + X = 7 + Y = -1 + EjectionOffset = Vector + X = 7 + Y = -1 + AddGib = Gib + GibParticle = MOPixel + CopyOf = Spark Yellow 1 + Count = 4 + Spread = 2.25 + MaxVelocity = 20 + MinVelocity = 8 + AddGib = Gib + GibParticle = MOPixel + CopyOf = Spark Yellow 2 + Count = 5 + Spread = 2.25 + MaxVelocity = 20 + MinVelocity = 8 + AddGib = Gib + GibParticle = MOPixel + CopyOf = Drop Oil + Count = 4 + Spread = 2.25 + MaxVelocity = 10 + MinVelocity = 1 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Rust Micro A + Count = 5 + Spread = 2.25 + MaxVelocity = 15 + MinVelocity = 5 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Grey Micro A + Count = 4 + Spread = 2.25 + MaxVelocity = 15 + MinVelocity = 5 + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Gib Device Small I + Count = 1 + Spread = 2.25 + MaxVelocity = 10 + MinVelocity = 1 + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Gib Device Small M + Count = 1 + Spread = 2.25 + MaxVelocity = 10 + MinVelocity = 1 + GibWoundLimit = 6 \ No newline at end of file diff --git a/Browncoats.rte/Devices/Tools/Blowtorch/Blowtorch.lua b/Browncoats.rte/Devices/Tools/Blowtorch/Blowtorch.lua new file mode 100644 index 000000000..027059019 --- /dev/null +++ b/Browncoats.rte/Devices/Tools/Blowtorch/Blowtorch.lua @@ -0,0 +1,17 @@ +function Create(self) + self.startSound = CreateSoundContainer("Blowtorch Fire Sound Start", "Browncoats.rte"); + self.endSound = CreateSoundContainer("Blowtorch Fire Sound End", "Browncoats.rte"); +end +function Update(self) + if self:IsActivated() and self.RoundInMagCount ~= 0 then + if not self.triggerPulled then + self.startSound:Play(self.MuzzlePos); + end + self.triggerPulled = true; + else + if self.triggerPulled then + self.endSound:Play(self.MuzzlePos); + end + self.triggerPulled = false; + end +end \ No newline at end of file diff --git a/Browncoats.rte/Devices/Tools/Blowtorch/Blowtorch000.png b/Browncoats.rte/Devices/Tools/Blowtorch/Blowtorch000.png new file mode 100644 index 000000000..d9815c0a7 Binary files /dev/null and b/Browncoats.rte/Devices/Tools/Blowtorch/Blowtorch000.png differ diff --git a/Browncoats.rte/Devices/Tools/Blowtorch/Blowtorch001.png b/Browncoats.rte/Devices/Tools/Blowtorch/Blowtorch001.png new file mode 100644 index 000000000..4e8e96c2e Binary files /dev/null and b/Browncoats.rte/Devices/Tools/Blowtorch/Blowtorch001.png differ diff --git a/Browncoats.rte/Devices/Tools/Blowtorch/BlowtorchMagazine.png b/Browncoats.rte/Devices/Tools/Blowtorch/BlowtorchMagazine.png new file mode 100644 index 000000000..292d06da3 Binary files /dev/null and b/Browncoats.rte/Devices/Tools/Blowtorch/BlowtorchMagazine.png differ diff --git a/Browncoats.rte/Devices/Tools/Blowtorch/Sounds/End.flac b/Browncoats.rte/Devices/Tools/Blowtorch/Sounds/End.flac new file mode 100644 index 000000000..6b9cb32b4 Binary files /dev/null and b/Browncoats.rte/Devices/Tools/Blowtorch/Sounds/End.flac differ diff --git a/Browncoats.rte/Devices/Tools/Blowtorch/Sounds/Loop.flac b/Browncoats.rte/Devices/Tools/Blowtorch/Sounds/Loop.flac new file mode 100644 index 000000000..c06972302 Binary files /dev/null and b/Browncoats.rte/Devices/Tools/Blowtorch/Sounds/Loop.flac differ diff --git a/Browncoats.rte/Devices/Tools/Blowtorch/Sounds/ReloadEnd.flac b/Browncoats.rte/Devices/Tools/Blowtorch/Sounds/ReloadEnd.flac new file mode 100644 index 000000000..44ab9c07c Binary files /dev/null and b/Browncoats.rte/Devices/Tools/Blowtorch/Sounds/ReloadEnd.flac differ diff --git a/Browncoats.rte/Devices/Tools/Blowtorch/Sounds/ReloadStart.flac b/Browncoats.rte/Devices/Tools/Blowtorch/Sounds/ReloadStart.flac new file mode 100644 index 000000000..901055e3e Binary files /dev/null and b/Browncoats.rte/Devices/Tools/Blowtorch/Sounds/ReloadStart.flac differ diff --git a/Browncoats.rte/Devices/Tools/Blowtorch/Sounds/Start.flac b/Browncoats.rte/Devices/Tools/Blowtorch/Sounds/Start.flac new file mode 100644 index 000000000..420e16549 Binary files /dev/null and b/Browncoats.rte/Devices/Tools/Blowtorch/Sounds/Start.flac differ diff --git a/Browncoats.rte/Devices/Weapons/Backblast/Backblast.ini b/Browncoats.rte/Devices/Weapons/Backblast/Backblast.ini index b3cf01212..2e28f84d9 100644 --- a/Browncoats.rte/Devices/Weapons/Backblast/Backblast.ini +++ b/Browncoats.rte/Devices/Weapons/Backblast/Backblast.ini @@ -106,9 +106,35 @@ AddAmmo = Round Separation = 1 +AddEffect = MOSRotating + PresetName = IN-2 Magazine Gib + Mass = 1 + HitsMOs = 0 + GetsHitByMOs = 0 + SpriteFile = ContentFile + FilePath = Browncoats.rte/Devices/Weapons/Backblast/Gibs/BackblastMagazineGib.png + FrameCount = 1 + SpriteOffset = Vector + X = -2 + Y = -4 + AtomGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Military Stuff + Resolution = 2 + Depth = 0 + DeepGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Military Stuff + Resolution = 3 + Depth = 1 + DeepCheck = 0 + + AddAmmo = Magazine PresetName = Magazine IN-2 - Mass = 1 + Mass = 2 HitsMOs = 0 GetsHitByMOs = 0 CollidesWithTerrainWhileAttached = 1 @@ -144,6 +170,21 @@ AddAmmo = Magazine RegularRound = Round CopyOf = Round IN-2 Discardable = 1 + AddGib = Gib + GibParticle = MOSRotating + CopyOf = IN-2 Magazine Gib + Offset = Vector + X = 2 + Y = 0 + MaxVelocity = 1 + AddGib = Gib + GibParticle = MOSRotating + CopyOf = IN-2 Magazine Gib + Offset = Vector + X = -3 + Y = 0 + MaxVelocity = 1 + GibImpulseLimit = 1 /////////////////////////////////////////////////////////////////////// @@ -152,7 +193,7 @@ AddAmmo = Magazine AddDevice = HDFirearm PresetName = IN-02 Backblast - Description = An incendiary shotgun that can fire 2 consecutive blasts of scorching flames. + Description = This incendiary shotgun fires two consecutive blasts of searing hot metallic pellets, tailed with a burst of flammable chemical compounds. AddToGroup = Weapons AddToGroup = Weapons - Primary AddToGroup = Weapons - Light @@ -217,7 +258,7 @@ AddDevice = HDFirearm AddSound = ContentFile FilePath = Browncoats.rte/Devices/Weapons/Backblast/Sounds/ReloadEnd.flac RateOfFire = 280 - ReloadTime = 2000 + ReloadTime = 2100 FullAuto = 0 FireIgnoresThis = 1 ShakeRange = 3 @@ -225,8 +266,8 @@ AddDevice = HDFirearm NoSupportFactor = 2 ParticleSpreadRange = 0 MuzzleOffset = Vector - X = 15 - Y = -2 + X = 14 + Y = -1 EjectionOffset = Vector X = -4 Y = -2 diff --git a/Browncoats.rte/Devices/Weapons/Backblast/Backblast000.png b/Browncoats.rte/Devices/Weapons/Backblast/Backblast000.png index 456964c63..a4909ddbd 100644 Binary files a/Browncoats.rte/Devices/Weapons/Backblast/Backblast000.png and b/Browncoats.rte/Devices/Weapons/Backblast/Backblast000.png differ diff --git a/Browncoats.rte/Devices/Weapons/Backblast/Backblast001.png b/Browncoats.rte/Devices/Weapons/Backblast/Backblast001.png index cb52e5b32..ec9d69522 100644 Binary files a/Browncoats.rte/Devices/Weapons/Backblast/Backblast001.png and b/Browncoats.rte/Devices/Weapons/Backblast/Backblast001.png differ diff --git a/Browncoats.rte/Devices/Weapons/Backblast/BackblastMagazine.png b/Browncoats.rte/Devices/Weapons/Backblast/BackblastMagazine.png index 7cb8b1cf8..de4af6a93 100644 Binary files a/Browncoats.rte/Devices/Weapons/Backblast/BackblastMagazine.png and b/Browncoats.rte/Devices/Weapons/Backblast/BackblastMagazine.png differ diff --git a/Browncoats.rte/Devices/Weapons/Backblast/Gibs/BackblastMagazineGib.png b/Browncoats.rte/Devices/Weapons/Backblast/Gibs/BackblastMagazineGib.png new file mode 100644 index 000000000..78671adfb Binary files /dev/null and b/Browncoats.rte/Devices/Weapons/Backblast/Gibs/BackblastMagazineGib.png differ diff --git a/Browncoats.rte/Devices/Weapons/Flash/Flash.ini b/Browncoats.rte/Devices/Weapons/Flash/Flash.ini index aefba9df1..d4c13a3c8 100644 --- a/Browncoats.rte/Devices/Weapons/Flash/Flash.ini +++ b/Browncoats.rte/Devices/Weapons/Flash/Flash.ini @@ -211,36 +211,43 @@ AddAmmo = AEmitter AddGib = Gib GibParticle = MOPixel CopyOf = Glow Explosion Huge - Spread = 2.25 MaxVelocity = 1 - MinVelocity = 0 InheritsVel = 0 AddGib = Gib GibParticle = MOPixel CopyOf = Grenade Fragment Gray - Count = 16 + Count = 13 Spread = 3.1 - MinVelocity = 50 - MaxVelocity = 75 + MinVelocity = 60 + MaxVelocity = 80 InheritsVel = 0 LifeVariation = 0.20 AddGib = Gib GibParticle = MOPixel CopyOf = Grenade Fragment Yellow - Count = 16 + Count = 13 Spread = 3.1 - MinVelocity = 50 - MaxVelocity = 75 + MinVelocity = 60 + MaxVelocity = 80 InheritsVel = 0 LifeVariation = 0.20 AddGib = Gib GibParticle = MOPixel - CopyOf = Air Blast - Count = 25 + CopyOf = Grenade Fragment Scripted + Count = 13 Spread = 3.1 MinVelocity = 60 MaxVelocity = 80 InheritsVel = 0 + LifeVariation = 0.20 + AddGib = Gib + GibParticle = MOPixel + CopyOf = Air Blast + Count = 30 + Spread = 3.1 + MinVelocity = 80 + MaxVelocity = 90 + InheritsVel = 0 LifeVariation = 0.30 AddGib = Gib GibParticle = PEmitter @@ -308,6 +315,8 @@ AddAmmo = Magazine PresetName = Round Browncoat Rocket Launcher Particle = AEmitter CopyOf = Null Emitter + Shell = AEmitter + CopyOf = Browncoat Rocket Launcher Blast AIFireVel = 250 AIBlastRadius = 120 Discardable = 0 @@ -384,6 +393,7 @@ AddDevice = HDFirearm AttenuationStartDistance = 150 AddSound = ContentFile FilePath = Browncoats.rte/Devices/Weapons/Flash/Sounds/ReloadEnd.flac + RecoilTransmission = 0.1 RateOfFire = 600 ReloadTime = 3900 FullAuto = 1 @@ -396,7 +406,7 @@ AddDevice = HDFirearm X = 18 Y = 0 EjectionOffset = Vector - X = -14 + X = 0 Y = 0 AddGib = Gib GibParticle = MOPixel diff --git a/Browncoats.rte/Devices/Weapons/Flash/Flash.lua b/Browncoats.rte/Devices/Weapons/Flash/Flash.lua index 6517c0348..2c1beeecb 100644 --- a/Browncoats.rte/Devices/Weapons/Flash/Flash.lua +++ b/Browncoats.rte/Devices/Weapons/Flash/Flash.lua @@ -53,8 +53,8 @@ function Update(self) and SceneMan:CastObstacleRay(self.MuzzlePos, SceneMan:ShortestDistance(self.MuzzlePos, actor.Pos, SceneMan.SceneWrapsX), Vector(), Vector(), actor.ID, actor.Team, rte.airID, 10) < 0 then --Measure the approximate corners of a box that the Actor is supposedly inside of - local topLeft = Vector(-actor.Radius, -actor.Radius); - local bottomRight = Vector(actor.Radius, actor.Radius); + local topLeft = Vector(-actor.IndividualRadius, -actor.IndividualRadius); + local bottomRight = Vector(actor.IndividualRadius, actor.IndividualRadius); for att in actor.Attachables do if IsAttachable(att) then local dist = SceneMan:ShortestDistance(actor.Pos, att.Pos, SceneMan.SceneWrapsX); @@ -78,7 +78,7 @@ function Update(self) if lastTargetCount < #self.targets then AudioMan:PlaySound("Base.rte/Devices/Explosives/AntiPersonnelMine/Sounds/MineActivate.flac", self.Pos); end - if not playerControlled then + if playerControlled == false then parent:GetController():SetState(Controller.WEAPON_FIRE, false); end end @@ -130,12 +130,5 @@ function Update(self) rocket.Team = self.Team; rocket.IgnoresTeamHits = true; MovableMan:AddParticle(rocket); - - local blast = CreateAEmitter("Browncoats.rte/Browncoat Rocket Launcher Blast"); - blast.Pos = self.Pos; - blast.Vel = self.Vel; - blast.HFlipped = self.HFlipped; - blast.RotAngle = self.RotAngle; - MovableMan:AddParticle(blast); end end \ No newline at end of file diff --git a/Browncoats.rte/Devices/Weapons/Flash/Missile.lua b/Browncoats.rte/Devices/Weapons/Flash/Missile.lua index cb582d80a..58ff1997a 100644 --- a/Browncoats.rte/Devices/Weapons/Flash/Missile.lua +++ b/Browncoats.rte/Devices/Weapons/Flash/Missile.lua @@ -19,7 +19,7 @@ function Update(self) self:EnableEmission(true); if self.target and self.target.ID ~= rte.NoMOID then local targetDist = SceneMan:ShortestDistance(self.Pos, self.target.Pos, SceneMan.SceneWrapsX); - if targetDist.Magnitude < (self.Radius + self.target.Radius) then + if targetDist.Magnitude < (self.Radius + self.target.IndividualRadius) then self:GibThis(); else local targetVel = targetDist:SetMagnitude(self.turnStrength); diff --git a/Browncoats.rte/Devices/Weapons/Hammerfist/Hammerfist.ini b/Browncoats.rte/Devices/Weapons/Hammerfist/Hammerfist.ini index b1777905b..814021975 100644 --- a/Browncoats.rte/Devices/Weapons/Hammerfist/Hammerfist.ini +++ b/Browncoats.rte/Devices/Weapons/Hammerfist/Hammerfist.ini @@ -187,7 +187,7 @@ AddDevice = HDFirearm AttenuationStartDistance = 140 AddSound = ContentFile FilePath = Browncoats.rte/Devices/Weapons/Hammerfist/Sounds/ReloadEnd.flac - RateOfFire = 700 + RateOfFire = 600 ReloadTime = 2200 FullAuto = 1 RecoilTransmission = 0.7 @@ -199,8 +199,8 @@ AddDevice = HDFirearm ShellSpreadRange = 8 ShellAngVelRange = 2 MuzzleOffset = Vector - X = 13 - Y = 0 + X = 12 + Y = -1 EjectionOffset = Vector X = -4 Y = -2 diff --git a/Browncoats.rte/Devices/Weapons/Hammerfist/Hammerfist000.png b/Browncoats.rte/Devices/Weapons/Hammerfist/Hammerfist000.png index 20a408979..fc813ffca 100644 Binary files a/Browncoats.rte/Devices/Weapons/Hammerfist/Hammerfist000.png and b/Browncoats.rte/Devices/Weapons/Hammerfist/Hammerfist000.png differ diff --git a/Browncoats.rte/Devices/Weapons/Hammerfist/Hammerfist001.png b/Browncoats.rte/Devices/Weapons/Hammerfist/Hammerfist001.png index a9900d306..dcbca8d66 100644 Binary files a/Browncoats.rte/Devices/Weapons/Hammerfist/Hammerfist001.png and b/Browncoats.rte/Devices/Weapons/Hammerfist/Hammerfist001.png differ diff --git a/Browncoats.rte/Devices/Weapons/Hammerfist/HammerfistMagazine.png b/Browncoats.rte/Devices/Weapons/Hammerfist/HammerfistMagazine.png index 75b2d80ac..a543e974c 100644 Binary files a/Browncoats.rte/Devices/Weapons/Hammerfist/HammerfistMagazine.png and b/Browncoats.rte/Devices/Weapons/Hammerfist/HammerfistMagazine.png differ diff --git a/Browncoats.rte/Devices/Weapons/Heatlance/Heatlance.ini b/Browncoats.rte/Devices/Weapons/Heatlance/Heatlance.ini index af9100883..8fdbbd593 100644 --- a/Browncoats.rte/Devices/Weapons/Heatlance/Heatlance.ini +++ b/Browncoats.rte/Devices/Weapons/Heatlance/Heatlance.ini @@ -1,3 +1,21 @@ +/////////////////////////////////////////////////////////////////////// +// Heatlance Sounds + + +AddSoundContainer = SoundContainer + PresetName = Heatlance Fire Sound Start + AddSound = ContentFile + FilePath = Browncoats.rte/Devices/Weapons/Heatlance/Sounds/Start.flac + AttenuationStartDistance = 195 + + +AddSoundContainer = SoundContainer + PresetName = Heatlance Fire Sound End + AddSound = ContentFile + FilePath = Browncoats.rte/Devices/Weapons/Heatlance/Sounds/End.flac + AttenuationStartDistance = 195 + + /////////////////////////////////////////////////////////////////////// // Heatlance Ammo @@ -8,12 +26,11 @@ AddAmmo = AEmitter LifeTime = 10 HitsMOs = 0 GetsHitByMOs = 0 - PinStrength = 1000 GlobalAccScalar = 0 SpriteFile = ContentFile FilePath = Base.rte/Null.png EmissionOffset = Vector - X = 5 + X = 2 Y = 0 AtomGroup = AtomGroup CopyOf = Null AtomGroup @@ -22,16 +39,16 @@ AddAmmo = AEmitter CopyOf = Flame Smoke 2 Glow LifeVariation = 0.10 Spread = 0.07 - MaxVelocity = 25 - MinVelocity = 20 + MaxVelocity = 24 + MinVelocity = 18 PushesEmitter = 0 AddEmission = Emission EmittedParticle = MOSParticle CopyOf = Flame Smoke 2 Glow B LifeVariation = 0.10 Spread = 0.05 - MaxVelocity = 35 - MinVelocity = 30 + MaxVelocity = 29 + MinVelocity = 21 PushesEmitter = 0 AddEmission = Emission EmittedParticle = MOPixel @@ -69,12 +86,11 @@ AddAmmo = AEmitter LifeTime = 10 HitsMOs = 0 GetsHitByMOs = 0 - PinStrength = 1000 GlobalAccScalar = 0 SpriteFile = ContentFile FilePath = Base.rte/Null.png EmissionOffset = Vector - X = 5 + X = 2 Y = 0 AtomGroup = AtomGroup CopyOf = Null AtomGroup @@ -83,16 +99,16 @@ AddAmmo = AEmitter CopyOf = Flame Smoke 2 Glow LifeVariation = 0.10 Spread = 0.07 - MaxVelocity = 25 - MinVelocity = 20 + MaxVelocity = 24 + MinVelocity = 18 PushesEmitter = 0 AddEmission = Emission EmittedParticle = MOSParticle CopyOf = Flame Smoke 2 Glow B LifeVariation = 0.10 Spread = 0.05 - MaxVelocity = 35 - MinVelocity = 30 + MaxVelocity = 29 + MinVelocity = 21 PushesEmitter = 0 AddEmission = Emission EmittedParticle = MOPixel @@ -129,8 +145,8 @@ AddAmmo = Round ParticleCount = 1 Particle = AEmitter CopyOf = Particle FT-200 Flamer 1 - FireVelocity = 10 - AIFireVel = 75 + FireVelocity = 20 + AIFireVel = 100 AILifeTime = 100 Separation = 5 @@ -153,7 +169,7 @@ AddAmmo = Magazine FrameCount = 1 SpriteOffset = Vector X = -3 - Y = -3 + Y = -6 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -169,11 +185,14 @@ AddAmmo = Magazine DeepCheck = 0 JointStrength = 200 JointStiffness = 1 - ParentOffset = Vector + JointOffset = Vector X = 0 + Y = -3 + ParentOffset = Vector + X = -1 Y = 4 DrawAfterParent = 0 - RoundCount = 300 + RoundCount = 500 RTTRatio = 2 RegularRound = Round CopyOf = Round FT-200 @@ -192,21 +211,22 @@ AddDevice = HDFirearm AddToGroup = Weapons - Primary AddToGroup = Weapons - Light AddToGroup = Weapons - CQB - Description = Light flamethrower that is extremely powerful in close quarters. + Description = Compact flamethrower that is extremely powerful in close quarters. Mass = 15 HitsMOs = 0 GetsHitByMOs = 1 + ScriptPath = Browncoats.rte/Devices/Weapons/Heatlance/Heatlance.lua SpriteFile = ContentFile FilePath = Browncoats.rte/Devices/Weapons/Heatlance/Heatlance.png FrameCount = 2 SpriteOffset = Vector - X = -12 - Y = -5 + X = -13 + Y = -7 EntryWound = AEmitter CopyOf = Dent Metal ExitWound = AEmitter CopyOf = Dent Metal - GoldValue = 60 + GoldValue = 75 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -223,36 +243,33 @@ AddDevice = HDFirearm JointStrength = 130 JointStiffness = 0.2 JointOffset = Vector - X = -9 + X = -11 Y = 3 DrawAfterParent = 0 StanceOffset = Vector - X = 3 - Y = 6 + X = 1 + Y = 9 SharpStanceOffset = Vector - X = 6 - Y = 2 + X = 3 + Y = 7 SupportOffset = Vector - X = 1 - Y = 3 + X = -2 + Y = -3 SharpLength = 100 Magazine = Magazine CopyOf = Magazine FT-200 Flash = Attachable CopyOf = Jet Flame B - PreFireSound = SoundContainer - AttenuationStartDistance = 195 - AddSound = ContentFile - FilePath = Browncoats.rte/Devices/Weapons/Heatlance/Sounds/Start.flac FireSound = SoundContainer AttenuationStartDistance = 195 AddSound = ContentFile FilePath = Browncoats.rte/Devices/Weapons/Heatlance/Sounds/Loop.flac LoopSetting = -1 - DeactivationSound = SoundContainer - AttenuationStartDistance = 195 - AddSound = ContentFile - FilePath = Browncoats.rte/Devices/Weapons/Heatlance/Sounds/End.flac + //To-do: fix whatever problems with ActivationSound and/or PreFireSound (can only play one instance of itself, etc.) + //ActivationSound = SoundContainer + // CopyOf = Heatlance Fire Sound Start + //DeactivationSound = SoundContainer + // CopyOf = Heatlance Fire Sound End EmptySound = SoundContainer AddSound = ContentFile FilePath = Base.rte/Sounds/Devices/EmptyClick1.flac @@ -268,18 +285,13 @@ AddDevice = HDFirearm ReloadTime = 2800 FullAuto = 1 FireIgnoresThis = 1 - ShakeRange = 1 + ShakeRange = 5 SharpShakeRange = 1 NoSupportFactor = 2 ParticleSpreadRange = 1 - ShellSpreadRange = 5 - ShellAngVelRange = 0 MuzzleOffset = Vector X = 13 Y = -1 - EjectionOffset = Vector - X = 12 - Y = -1 AddGib = Gib GibParticle = MOPixel CopyOf = Spark Yellow 1 diff --git a/Browncoats.rte/Devices/Weapons/Heatlance/Heatlance.lua b/Browncoats.rte/Devices/Weapons/Heatlance/Heatlance.lua new file mode 100644 index 000000000..058fda1f2 --- /dev/null +++ b/Browncoats.rte/Devices/Weapons/Heatlance/Heatlance.lua @@ -0,0 +1,27 @@ +function Create(self) + self.startSound = CreateSoundContainer("Heatlance Fire Sound Start", "Browncoats.rte"); + self.endSound = CreateSoundContainer("Heatlance Fire Sound End", "Browncoats.rte"); +end +function Update(self) + if self:IsActivated() and self.RoundInMagCount ~= 0 then + if not self.triggerPulled then + self.startSound:Play(self.MuzzlePos); + end + self.triggerPulled = true; + else + if self.triggerPulled then + self.endSound:Play(self.MuzzlePos); + end + self.triggerPulled = false; + end + if self.Magazine then + local parent = self:GetRootParent(); + if parent and IsActor(parent) then + parent = ToActor(parent); + local parentDimensions = Vector(ToMOSprite(parent):GetSpriteWidth(), ToMOSprite(parent):GetSpriteHeight()); + local magDimensions = Vector(self.Magazine:GetSpriteWidth(), self.Magazine:GetSpriteHeight()); + self.Magazine.Pos = parent.Pos + Vector(-(parentDimensions.X + magDimensions.X) * 0.4 * parent.FlipFactor, -(parentDimensions.Y + magDimensions.Y) * 0.2):RadRotate(parent.RotAngle); + self.Magazine.RotAngle = parent.RotAngle; + end + end +end \ No newline at end of file diff --git a/Browncoats.rte/Devices/Weapons/Heatlance/Heatlance000.png b/Browncoats.rte/Devices/Weapons/Heatlance/Heatlance000.png index e4387042f..dc098f146 100644 Binary files a/Browncoats.rte/Devices/Weapons/Heatlance/Heatlance000.png and b/Browncoats.rte/Devices/Weapons/Heatlance/Heatlance000.png differ diff --git a/Browncoats.rte/Devices/Weapons/Heatlance/Heatlance001.png b/Browncoats.rte/Devices/Weapons/Heatlance/Heatlance001.png index 2fa437b0c..e2e1fd2df 100644 Binary files a/Browncoats.rte/Devices/Weapons/Heatlance/Heatlance001.png and b/Browncoats.rte/Devices/Weapons/Heatlance/Heatlance001.png differ diff --git a/Browncoats.rte/Devices/Weapons/Heatlance/HeatlanceMagazine.png b/Browncoats.rte/Devices/Weapons/Heatlance/HeatlanceMagazine.png index ddaa0611d..0eb303756 100644 Binary files a/Browncoats.rte/Devices/Weapons/Heatlance/HeatlanceMagazine.png and b/Browncoats.rte/Devices/Weapons/Heatlance/HeatlanceMagazine.png differ diff --git a/Browncoats.rte/Devices/Weapons/Magmaul/Magmaul.ini b/Browncoats.rte/Devices/Weapons/Magmaul/Magmaul.ini index bac4cf598..d91737cc3 100644 --- a/Browncoats.rte/Devices/Weapons/Magmaul/Magmaul.ini +++ b/Browncoats.rte/Devices/Weapons/Magmaul/Magmaul.ini @@ -95,7 +95,7 @@ AddAmmo = Magazine AddDevice = HDFirearm PresetName = GL-01 Magmaul - Description = This handy launcher spits out fuel canisters that are either ignited initially and burn for 4 seconds before exploding, or canisters that burst and spill fuel over and area before igniting the flammable chemicals. + Description = This handy launcher spits out fuel canisters that either burst and spill fuel over and area before igniting the flammable chemicals, or canisters that are ignited initially and burn for 4 seconds before exploding. AddToGroup = Weapons AddToGroup = Weapons - Primary AddToGroup = Weapons - Light @@ -117,7 +117,7 @@ AddDevice = HDFirearm CopyOf = Dent Metal ExitWound = AEmitter CopyOf = Dent Metal - GoldValue = 90 + GoldValue = 85 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -171,7 +171,7 @@ AddDevice = HDFirearm AddSound = ContentFile FilePath = Browncoats.rte/Devices/Weapons/Magmaul/Sounds/ReloadEnd.flac RateOfFire = 250 - ReloadTime = 2500 + ReloadTime = 2400 FullAuto = 1 FireIgnoresThis = 1 ShakeRange = 3 diff --git a/Browncoats.rte/Devices/Weapons/Stinger/Stinger.ini b/Browncoats.rte/Devices/Weapons/Stinger/Stinger.ini index 464684b12..c18e4e5ba 100644 --- a/Browncoats.rte/Devices/Weapons/Stinger/Stinger.ini +++ b/Browncoats.rte/Devices/Weapons/Stinger/Stinger.ini @@ -51,7 +51,7 @@ AddAmmo = Magazine FrameCount = 1 SpriteOffset = Vector X = -1 - Y = -3 + Y = -2 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -72,7 +72,7 @@ AddAmmo = Magazine Y = 0 ParentOffset = Vector X = 0 - Y = 2 + Y = 3 DrawAfterParent = 0 RoundCount = 10 RegularRound = Round diff --git a/Browncoats.rte/Devices/Weapons/Stinger/Stinger000.png b/Browncoats.rte/Devices/Weapons/Stinger/Stinger000.png index 9870af34e..8b08dce7b 100644 Binary files a/Browncoats.rte/Devices/Weapons/Stinger/Stinger000.png and b/Browncoats.rte/Devices/Weapons/Stinger/Stinger000.png differ diff --git a/Browncoats.rte/Devices/Weapons/Stinger/Stinger001.png b/Browncoats.rte/Devices/Weapons/Stinger/Stinger001.png index 9870af34e..fa2e0c2ec 100644 Binary files a/Browncoats.rte/Devices/Weapons/Stinger/Stinger001.png and b/Browncoats.rte/Devices/Weapons/Stinger/Stinger001.png differ diff --git a/Browncoats.rte/Devices/Weapons/Stinger/StingerMagazine.png b/Browncoats.rte/Devices/Weapons/Stinger/StingerMagazine.png index aaf5121bc..4cf66ac64 100644 Binary files a/Browncoats.rte/Devices/Weapons/Stinger/StingerMagazine.png and b/Browncoats.rte/Devices/Weapons/Stinger/StingerMagazine.png differ diff --git a/Browncoats.rte/Devices/Weapons/Trailblazer/Trailblazer.ini b/Browncoats.rte/Devices/Weapons/Trailblazer/Trailblazer.ini index 973d32252..39c4a0b12 100644 --- a/Browncoats.rte/Devices/Weapons/Trailblazer/Trailblazer.ini +++ b/Browncoats.rte/Devices/Weapons/Trailblazer/Trailblazer.ini @@ -8,14 +8,14 @@ AddAmmo = Round Particle = MOPixel PresetName = Particle Browncoat PY-7 ScriptPath = Browncoats.rte/Devices/Shared/IncendiaryBulletHeavy.lua - Mass = 0.2 - AirResistance = 0.02 + Mass = 0.3 + AirResistance = 0.01 AirThreshold = 70 LifeTime = 700 - Sharpness = 15 + Sharpness = 10 HitsMOs = 1 GetsHitByMOs = 0 - WoundDamageMultiplier = 1.2 + WoundDamageMultiplier = 1.3 Color = Color R = 249 G = 248 @@ -30,7 +30,7 @@ AddAmmo = Round TrailLength = 50 ScreenEffect = ContentFile FilePath = Base.rte/Effects/Glows/FireGlowSmaller.png - EffectStartTime = 0 + EffectAlwaysShows = 1 EffectStopTime = 700 EffectStartStrength = 0.3 EffectStopStrength = 0.0 @@ -51,8 +51,8 @@ AddAmmo = Magazine FilePath = Browncoats.rte/Devices/Weapons/Trailblazer/TrailblazerMagazine.png FrameCount = 1 SpriteOffset = Vector - X = -3 - Y = -3 + X = -2 + Y = -2 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -69,8 +69,8 @@ AddAmmo = Magazine JointStrength = 200 JointStiffness = 1 ParentOffset = Vector - X = -1 - Y = 5 + X = -2 + Y = 4 DrawAfterParent = 0 RoundCount = 7 RegularRound = Round @@ -102,7 +102,7 @@ AddDevice = HDFirearm FrameCount = 2 SpriteOffset = Vector X = -16 - Y = -5 + Y = -4 EntryWound = AEmitter CopyOf = Dent Metal ExitWound = AEmitter @@ -125,7 +125,7 @@ AddDevice = HDFirearm JointStiffness = 0.2 JointOffset = Vector X = -7 - Y = 5 + Y = 4 DrawAfterParent = 0 StanceOffset = Vector X = 4 @@ -160,12 +160,13 @@ AddDevice = HDFirearm AttenuationStartDistance = 130 AddSound = ContentFile FilePath = Browncoats.rte/Devices/Weapons/Trailblazer/Sounds/ReloadEnd.flac - RateOfFire = 200 - ReloadTime = 3100 + RecoilTransmission = 1.5 + RateOfFire = 400 + ReloadTime = 2900 FullAuto = 0 FireIgnoresThis = 1 - ShakeRange = 6 - SharpShakeRange = 2 + ShakeRange = 7 + SharpShakeRange = 1 NoSupportFactor = 2 ParticleSpreadRange = 0 ShellSpreadRange = 8 @@ -174,7 +175,7 @@ AddDevice = HDFirearm X = 18 Y = 1 EjectionOffset = Vector - X = -5 + X = -3 Y = -1 AddGib = Gib GibParticle = MOPixel diff --git a/Browncoats.rte/Devices/Weapons/Trailblazer/Trailblazer000.png b/Browncoats.rte/Devices/Weapons/Trailblazer/Trailblazer000.png index ad455dc3d..94816a46e 100644 Binary files a/Browncoats.rte/Devices/Weapons/Trailblazer/Trailblazer000.png and b/Browncoats.rte/Devices/Weapons/Trailblazer/Trailblazer000.png differ diff --git a/Browncoats.rte/Devices/Weapons/Trailblazer/Trailblazer001.png b/Browncoats.rte/Devices/Weapons/Trailblazer/Trailblazer001.png index 13a887c07..62ded2d01 100644 Binary files a/Browncoats.rte/Devices/Weapons/Trailblazer/Trailblazer001.png and b/Browncoats.rte/Devices/Weapons/Trailblazer/Trailblazer001.png differ diff --git a/Browncoats.rte/Devices/Weapons/Trailblazer/TrailblazerMagazine.png b/Browncoats.rte/Devices/Weapons/Trailblazer/TrailblazerMagazine.png index e6da4ffd6..6de1711d4 100644 Binary files a/Browncoats.rte/Devices/Weapons/Trailblazer/TrailblazerMagazine.png and b/Browncoats.rte/Devices/Weapons/Trailblazer/TrailblazerMagazine.png differ diff --git a/Coalition.rte/Actors/Infantry/CoalitionHeavy/CoalitionHeavy.ini b/Coalition.rte/Actors/Infantry/CoalitionHeavy/CoalitionHeavy.ini index 1e1897cb8..8d3878bfc 100644 --- a/Coalition.rte/Actors/Infantry/CoalitionHeavy/CoalitionHeavy.ini +++ b/Coalition.rte/Actors/Infantry/CoalitionHeavy/CoalitionHeavy.ini @@ -219,7 +219,7 @@ AddActor = Arm X = -4 Y = 0 Spread = 0 - GibImpulseLimit = 100 + GibImpulseLimit = 480 GibWoundLimit = 8 GibSound = SoundContainer CopyOf = Flesh Limb Gib @@ -257,7 +257,7 @@ AddActor = Leg Resolution = 4 Depth = 0 DeepCheck = 0 - JointStrength = 340 + JointStrength = 380 JointStiffness = 0.5 BreakWound = AEmitter CopyOf = Wound Flesh Body Strong @@ -266,7 +266,7 @@ AddActor = Leg JointOffset = Vector X = -5 Y = 2 - DrawAfterParent = 0 + DrawAfterParent = 1 Foot = Attachable CopyOf = Coalition Light Foot FG ParentOffset = Vector @@ -352,7 +352,7 @@ AddActor = Leg X = 1.5 Y = -4 Spread = 0 - GibImpulseLimit = 200 + GibImpulseLimit = 500 GibWoundLimit = 10 GibSound = SoundContainer CopyOf = Flesh Limb Gib @@ -431,6 +431,7 @@ AddActor = AHuman X = -1 Y = -10 DrawAfterParent = 0 + LookToAimRatio = 0.5 Jetpack = AEmitter CopyOf = Jetpack Heavy ParentOffset = Vector @@ -447,6 +448,7 @@ AddActor = AHuman ParentOffset = Vector X = 3 Y = -7 + BGArmFlailScalar = 0.5 FGLeg = Leg CopyOf = Coalition Heavy Leg FG ParentOffset = Vector @@ -483,14 +485,18 @@ AddActor = AHuman CopyOf = Human Walk Path PresetName = Soldier Heavy Walk Path StartOffset = Vector - X = 6 + X = 10 Y = -1 SlowTravelSpeed = 1.5 NormalTravelSpeed = 3.0 FastTravelSpeed = 4.5 PushForce = 8000 + WalkRotAngleTarget = -0.1 CrouchLimbPath = LimbPath CopyOf = Human Crouch Path + CrouchLimbPathBG = LimbPath + CopyOf = Human Crouch Path BG + CrouchRotAngleTarget = -0.7 CrawlLimbPath = LimbPath CopyOf = Human Crawl Path ArmCrawlLimbPath = LimbPath diff --git a/Coalition.rte/Actors/Infantry/CoalitionLight/CoalitionLight.ini b/Coalition.rte/Actors/Infantry/CoalitionLight/CoalitionLight.ini index f83b23050..b435c18d7 100644 --- a/Coalition.rte/Actors/Infantry/CoalitionLight/CoalitionLight.ini +++ b/Coalition.rte/Actors/Infantry/CoalitionLight/CoalitionLight.ini @@ -30,7 +30,7 @@ AddEffect = Attachable JointStrength = 160 JointStiffness = 0.2 DrawAfterParent = 1 - GibImpulseLimit = 1500 + GibImpulseLimit = 1600 GibWoundLimit = 6 GibSound = SoundContainer CopyOf = Bone Crack @@ -287,89 +287,67 @@ AddActor = Arm Offset = Vector X = 3 Y = 0 - Count = 1 - Spread = 0 AddGib = Gib GibParticle = MOSRotating CopyOf = Gib Bone Small A Offset = Vector X = -4 Y = 1 - Count = 1 - Spread = 0 AddGib = Gib GibParticle = MOSRotating CopyOf = Gib Bone Small E Offset = Vector X = 0 Y = 1 - Count = 1 - Spread = 0 AddGib = Gib GibParticle = MOSParticle CopyOf = Gib Flesh Micro A Offset = Vector X = -2 Y = 4 - Count = 1 - Spread = 0 AddGib = Gib GibParticle = MOSParticle CopyOf = Gib Bone Micro A Offset = Vector X = -4 Y = -1 - Count = 1 - Spread = 0 AddGib = Gib GibParticle = MOSParticle CopyOf = Gib Metal Grey Micro A Offset = Vector X = -4 Y = -2 - Count = 1 - Spread = 0 AddGib = Gib GibParticle = MOSParticle CopyOf = Gib Metal Grey Tiny A Offset = Vector X = -5 Y = -4 - Count = 1 - Spread = 0 AddGib = Gib GibParticle = MOSParticle CopyOf = Gib Panel White Tiny A Offset = Vector X = -3 Y = -2 - Count = 1 - Spread = 0 AddGib = Gib GibParticle = MOSParticle CopyOf = Gib Military Tiny A Offset = Vector X = -3 Y = 1 - Count = 1 - Spread = 0 AddGib = Gib GibParticle = MOSParticle CopyOf = Gib Military Tiny A Offset = Vector X = 1 Y = -2 - Count = 1 - Spread = 0 AddGib = Gib GibParticle = MOSParticle CopyOf = Gib Military Tiny A Offset = Vector X = 0 Y = 1 - Count = 1 - Spread = 0 - GibImpulseLimit = 120 + GibImpulseLimit = 240 GibWoundLimit = 6 GibSound = SoundContainer CopyOf = Flesh Limb Gib @@ -465,7 +443,7 @@ AddActor = Leg JointOffset = Vector X = -5 Y = 2 - DrawAfterParent = 0 + DrawAfterParent = 1 Foot = Attachable CopyOf = Coalition Light Foot FG ParentOffset = Vector @@ -494,57 +472,43 @@ AddActor = Leg Offset = Vector X = 0 Y = -3 - Count = 1 - Spread = 0 AddGib = Gib GibParticle = MOSRotating CopyOf = Coalition Soldier Misc Gib B Offset = Vector X = -3 Y = 0 - Count = 1 - Spread = 0 AddGib = Gib GibParticle = MOSRotating CopyOf = Coalition Soldier Misc Gib C Offset = Vector X = 5 Y = -1 - Count = 1 - Spread = 0 AddGib = Gib GibParticle = MOSParticle CopyOf = Gib Flesh Micro A Offset = Vector X = 1 Y = -1 - Count = 1 - Spread = 0 AddGib = Gib GibParticle = MOSParticle CopyOf = Gib Flesh Micro A Offset = Vector X = -3 Y = -4 - Count = 1 - Spread = 0 AddGib = Gib GibParticle = MOSParticle CopyOf = Gib Panel White Micro A Offset = Vector X = 3 Y = -5 - Count = 1 - Spread = 0 AddGib = Gib GibParticle = MOSParticle CopyOf = Gib Flesh Tiny A Offset = Vector X = 4 Y = -4 - Count = 1 - Spread = 0 - GibImpulseLimit = 200 + GibImpulseLimit = 320 GibWoundLimit = 8 GibSound = SoundContainer CopyOf = Flesh Limb Gib @@ -635,6 +599,7 @@ AddActor = AHuman ParentOffset = Vector X = 3 Y = -7 + BGArmFlailScalar = -0.5 FGLeg = Leg CopyOf = Coalition Light Leg FG ParentOffset = Vector @@ -658,8 +623,8 @@ AddActor = AHuman Y = 17 StartSegCount = 0 SlowTravelSpeed = 0.1 - NormalTravelSpeed = 1.0 - FastTravelSpeed = 1.5 + NormalTravelSpeed = 0.7 + FastTravelSpeed = 1.4 PushForce = 8000 StandLimbPathBG = LimbPath CopyOf = Soldier Stand Path @@ -669,18 +634,12 @@ AddActor = AHuman Y = 17 WalkLimbPath = LimbPath CopyOf = Human Walk Path + WalkRotAngleTarget = -0.1 CrouchLimbPath = LimbPath CopyOf = Human Crouch Path - PresetName = Soldier Crouch Path - StartOffset = Vector - X = -4 - Y = 7 CrouchLimbPathBG = LimbPath - CopyOf = Soldier Crouch Path - PresetName = Soldier Crouch Path BG - StartOffset = Vector - X = 9 - Y = 7 + CopyOf = Human Crouch Path BG + CrouchRotAngleTarget = -0.8 CrawlLimbPath = LimbPath CopyOf = Human Crawl Path ArmCrawlLimbPath = LimbPath diff --git a/Coalition.rte/Actors/Mecha/GatlingDrone/GatlingDrone.ini b/Coalition.rte/Actors/Mecha/GatlingDrone/GatlingDrone.ini index 4bdb49f56..0ca66115c 100644 --- a/Coalition.rte/Actors/Mecha/GatlingDrone/GatlingDrone.ini +++ b/Coalition.rte/Actors/Mecha/GatlingDrone/GatlingDrone.ini @@ -64,7 +64,6 @@ AddDevice = HDFirearm X = 2 Y = -1 GibWoundLimit = 15 - GibImpulseLimit = 1 /////////////////////////////////////////////////////////////////////// @@ -295,7 +294,7 @@ AddEffect = Attachable Offset = Vector X = 1 Y = 0 - GibImpulseLimit = 3000 + GibImpulseLimit = 4000 GibWoundLimit = 8 @@ -380,7 +379,7 @@ AddEffect = Attachable Offset = Vector X = 1.5 Y = -2.5 - GibImpulseLimit = 1500 + GibImpulseLimit = 2000 GibWoundLimit = 6 @@ -500,7 +499,7 @@ AddActor = Leg Resolution = 4 Depth = 0 DeepCheck = 0 - JointStrength = 165 + JointStrength = 180 JointStiffness = 0.5 BreakWound = AEmitter CopyOf = Leaking Machinery @@ -509,7 +508,7 @@ AddActor = Leg JointOffset = Vector X = -2 Y = 6 - DrawAfterParent = 0 + DrawAfterParent = 1 ExtendedOffset = Vector X = 8 Y = -10 @@ -555,7 +554,7 @@ AddActor = Leg Resolution = 4 Depth = 0 DeepCheck = 0 - JointStrength = 165 + JointStrength = 180 JointStiffness = 0.5 BreakWound = AEmitter CopyOf = Leaking Machinery @@ -637,10 +636,11 @@ AddActor = ACrab Jetpack = AEmitter CopyOf = Jetpack Nozzle ParentOffset = Vector - X = -2 - Y = 4 + X = 0 + Y = 3 DrawAfterParent = 0 JumpTime = 0.5 + JumpAngleRange = 0 LFGLeg = Leg CopyOf = Coalition Gatling Drone Leg FG ParentOffset = Vector diff --git a/Coalition.rte/Devices/Explosives/FragGrenade/FragGrenade.ini b/Coalition.rte/Devices/Explosives/FragGrenade/FragGrenade.ini index 16fb301d7..c88ca9156 100644 --- a/Coalition.rte/Devices/Explosives/FragGrenade/FragGrenade.ini +++ b/Coalition.rte/Devices/Explosives/FragGrenade/FragGrenade.ini @@ -117,7 +117,7 @@ AddDevice = TDExplosive DeepCheck = 0 JointStrength = 100 JointStiffness = 0.5 - DrawAfterParent = 1 + DrawAfterParent = 0 GibSound = SoundContainer CopyOf = Bone Crack StanceOffset = Vector diff --git a/Coalition.rte/Devices/Explosives/TimedExplosive/TimedExplosive.ini b/Coalition.rte/Devices/Explosives/TimedExplosive/TimedExplosive.ini index b83f7de3a..9fcac49c6 100644 --- a/Coalition.rte/Devices/Explosives/TimedExplosive/TimedExplosive.ini +++ b/Coalition.rte/Devices/Explosives/TimedExplosive/TimedExplosive.ini @@ -112,7 +112,7 @@ AddEffect = MOSRotating AddDevice = TDExplosive PresetName = Timed Explosive AddToGroup = Bombs - Description = Destructive plantable explosive charge. You can stick this into a wall, door or anything else stationary. After planting, run for your life, as it explodes after 10 seconds. + Description = Destructive plantable explosive charge. After planting, run for your life, as it explodes after 10 seconds. Excellent for destroying doors! Mass = 5 RestThreshold = -1 HitsMOs = 1 diff --git a/Coalition.rte/Devices/Explosives/TimedExplosive/TimedExplosiveDeploy.lua b/Coalition.rte/Devices/Explosives/TimedExplosive/TimedExplosiveDeploy.lua index 24ab3f5ff..ffc8fe5a2 100644 --- a/Coalition.rte/Devices/Explosives/TimedExplosive/TimedExplosiveDeploy.lua +++ b/Coalition.rte/Devices/Explosives/TimedExplosive/TimedExplosiveDeploy.lua @@ -4,7 +4,8 @@ function Update(self) local explosive = CreateMOSRotating("Timed Explosive Active"); explosive.Pos = self.Pos; explosive.Vel = self.Vel; - explosive.RotAngle = self.Vel.AbsRadAngle; + explosive.RotAngle = self.Vel.AbsRadAngle + (self.HFlipped and math.pi * self.FlipFactor or 0); + explosive.HFlipped = self.HFlipped; MovableMan:AddParticle(explosive); self.ToDelete = true; diff --git a/Coalition.rte/Devices/Weapons/AssaultRifle/AssaultRifle.ini b/Coalition.rte/Devices/Weapons/AssaultRifle/AssaultRifle.ini index 16ab3c73d..00c2e7087 100644 --- a/Coalition.rte/Devices/Weapons/AssaultRifle/AssaultRifle.ini +++ b/Coalition.rte/Devices/Weapons/AssaultRifle/AssaultRifle.ini @@ -129,7 +129,7 @@ AddDevice = HDFirearm FireIgnoresThis = 1 ShakeRange = 5 SharpShakeRange = 3 - NoSupportFactor = 2.0 + NoSupportFactor = 2 ParticleSpreadRange = 0 ShellSpreadRange = 8 ShellAngVelRange = 2 diff --git a/Coalition.rte/Devices/Weapons/MissileLauncher/Missile.lua b/Coalition.rte/Devices/Weapons/MissileLauncher/Missile.lua index 422898a6d..2ff5f63d3 100644 --- a/Coalition.rte/Devices/Weapons/MissileLauncher/Missile.lua +++ b/Coalition.rte/Devices/Weapons/MissileLauncher/Missile.lua @@ -13,7 +13,7 @@ function Create(self) self.lifeTimer:SetSimTimeLimitMS(self.Lifetime - math.ceil(TimerMan.DeltaTimeMS)); end function Update(self) - self.GlobalAccScalar = 1/math.sqrt(1 + math.abs(self.Vel.X)/10); + self.GlobalAccScalar = 1/math.sqrt(1 + math.abs(self.Vel.X) * 0.1); if self.target and self.target.ID ~= rte.NoMOID then local targetDist = SceneMan:ShortestDistance(self.Pos, self.target.Pos, SceneMan.SceneWrapsX); if targetDist.Magnitude < self.Diameter then @@ -25,7 +25,7 @@ function Update(self) turnAngle = turnAngle > math.pi and turnAngle - (math.pi * 2) or (turnAngle < -math.pi and turnAngle + (math.pi * 2) or turnAngle); self.Vel = (self.Vel + targetVel):SetMagnitude(self.Vel.Magnitude); - self.AngularVel = self.AngularVel/2 - (turnAngle * self.turnStrength); + self.AngularVel = self.AngularVel * 0.5 - (turnAngle * self.turnStrength); end end if self.lifeTimer:IsPastSimTimeLimit() then diff --git a/Coalition.rte/Devices/Weapons/MissileLauncher/MissileLauncher.ini b/Coalition.rte/Devices/Weapons/MissileLauncher/MissileLauncher.ini index 9f6db5cd7..af9eed24c 100644 --- a/Coalition.rte/Devices/Weapons/MissileLauncher/MissileLauncher.ini +++ b/Coalition.rte/Devices/Weapons/MissileLauncher/MissileLauncher.ini @@ -94,92 +94,48 @@ AddEffect = AEmitter AddAmmo = AEmitter PresetName = Shell Coalition Rocket Launcher - LifeTime = 2000 - Mass = 2 - GlobalAccScalar = 0.2 - AirResistance = 0.0 - RestThreshold = -500 - HitsMOs = 1 - GetsHitByMOs = 0 + LifeTime = 10 + Mass = 1 SpriteFile = ContentFile - FilePath = Coalition.rte/Devices/Weapons/MissileLauncher/MissileA.png - FrameCount = 1 - OrientToVel = 0.6 - SpriteOffset = Vector - X = -4 - Y = -3 + FilePath = Base.rte/Null.png AtomGroup = AtomGroup - AutoGenerate = 1 - Material = Material - CopyOf = Military Stuff - Resolution = 2 - Depth = 0 - DeepGroup = AtomGroup - AutoGenerate = 1 - Material = Material - CopyOf = Military Stuff - Resolution = 4 - Depth = 1 - DeepCheck = 0 + CopyOf = Null AtomGroup EmissionAngle = Matrix AngleDegrees = 180 - ScreenEffect = ContentFile - FilePath = Base.rte/Effects/Glows/YellowBig.png - EffectStartTime = 0 - EffectStopTime = 55 - EffectStartStrength = 1.0 - EffectStopStrength = 0 - EffectAlwaysShows = 1 - BurstTriggered = 1 AddEmission = Emission - EmittedParticle = MOPixel - CopyOf = Air Blast - PresetName = Shell Rocket Launcher Trigger - HitsMOs = 0 - LifeTime = 10 - ParticlesPerMinute = 5000 - BurstSize = 1 - Spread = 0.5 - MaxVelocity = 10 - MinVelocity = 10 - PushesEmitter = 1 - EmissionEnabled = 1 - EmissionsIgnoreThis = 0 - BurstSize = 1 - BurstTriggered = 1 - GibImpulseLimit = 5 - AddGib = Gib - GibParticle = MOSParticle + EmittedParticle = MOSParticle CopyOf = Explosion Smoke 2 PresetName = Shell Rocket Launcher 1 LifeTime = 300 - Count = 25 + BurstSize = 25 Spread = 3.1 MaxVelocity = 5 MinVelocity = 0 LifeVariation = 0.50 - InheritsVel = 1 - AddGib = Gib - GibParticle = MOSParticle + AddEmission = Emission + EmittedParticle = MOSParticle CopyOf = Explosion Smoke 2 Glow PresetName = Shell Rocket Launcher 2 LifeTime = 200 - Count = 5 + BurstSize = 5 Spread = 3.1 MaxVelocity = 3 MinVelocity = 1 LifeVariation = 0.50 - InheritsVel = 1 - AddGib = Gib - GibParticle = MOSParticle + AddEmission = Emission + EmittedParticle = MOSParticle CopyOf = Flame Smoke 1 PresetName = Shell Rocket Launcher 3 LifeTime = 400 - Count = 10 + BurstSize = 10 Spread = 3.1 MaxVelocity = 8 MinVelocity = 2 LifeVariation = 0.50 + ParticlesPerMinute = 0 + EmissionEnabled = 1 + EmissionsIgnoreThis = 1 + BurstTriggered = 1 AddAmmo = AEmitter diff --git a/Coalition.rte/Devices/Weapons/MissileLauncher/MissileLauncher.lua b/Coalition.rte/Devices/Weapons/MissileLauncher/MissileLauncher.lua index bdf15e78a..8cef46ef6 100644 --- a/Coalition.rte/Devices/Weapons/MissileLauncher/MissileLauncher.lua +++ b/Coalition.rte/Devices/Weapons/MissileLauncher/MissileLauncher.lua @@ -40,16 +40,7 @@ function Update(self) if moCheck ~= rte.NoMOID then local mo = ToMOSRotating(MovableMan:GetMOFromID(MovableMan:GetMOFromID(moCheck).RootID)); if mo and mo.ClassName ~= "ADoor" and mo.Team ~= parent.Team then - local size = mo.Radius; - for att in mo.Attachables do - if IsAttachable(att) then - local tempRadius = SceneMan:ShortestDistance(mo.Pos, att.Pos, SceneMan.SceneWrapsX).Magnitude + att.Radius; - if tempRadius > size then - size = tempRadius; - end - end - end - local movement = (mo.Vel.Magnitude + math.abs(mo.AngularVel) + 0.1) * math.sqrt(size); + local movement = (mo.Vel.Magnitude + math.abs(mo.AngularVel) + 0.1) * math.sqrt(mo.Radius); if movement > self.lockThreshold then self.targetLostTimer:Reset(); @@ -57,7 +48,7 @@ function Update(self) AudioMan:PlaySound("Base.rte/Devices/Explosives/AntiPersonnelMine/Sounds/MineActivate.flac", self.Pos); end self.target = IsACrab(mo) and ToACrab(mo) or mo; - self.markerSize = size; + self.markerSize = mo.Radius; end end end diff --git a/Coalition.rte/Devices/Weapons/Shotgun/Shotgun.ini b/Coalition.rte/Devices/Weapons/Shotgun/Shotgun.ini index 1b8447278..182dda198 100644 --- a/Coalition.rte/Devices/Weapons/Shotgun/Shotgun.ini +++ b/Coalition.rte/Devices/Weapons/Shotgun/Shotgun.ini @@ -1,3 +1,14 @@ +/////////////////////////////////////////////////////////////////////// +// Shotgun Sounds + + +AddSoundContainer = SoundContainer + PresetName = Coalition Shotgun Cock Sound + AttenuationStartDistance = 120 + AddSound = ContentFile + FilePath = Coalition.rte/Devices/Weapons/Shotgun/Sounds/Chamber.flac + + /////////////////////////////////////////////////////////////////////// // Shotgun Ammo diff --git a/Coalition.rte/Devices/Weapons/Shotgun/Shotgun.lua b/Coalition.rte/Devices/Weapons/Shotgun/Shotgun.lua index d8a35e172..b842c798b 100644 --- a/Coalition.rte/Devices/Weapons/Shotgun/Shotgun.lua +++ b/Coalition.rte/Devices/Weapons/Shotgun/Shotgun.lua @@ -2,6 +2,8 @@ function Create(self) self.pullTimer = Timer(); self.loaded = false; self.rotFactor = math.pi; + + self.cockSound = CreateSoundContainer("Coalition Shotgun Cock Sound", "Coalition.rte"); end function Update(self) local parent; @@ -16,10 +18,9 @@ function Update(self) self.rotFactor = math.pi; end if parent and not self.loaded and self.RoundInMagCount > 0 and not self.reloadCycle then - self:Deactivate(); if self.pullTimer:IsPastSimMS(15000/self.RateOfFire) then if not self.playedSound then - AudioMan:PlaySound("Coalition.rte/Devices/Weapons/Shotgun/Sounds/Chamber.flac", self.Pos); + self.cockSound:Play(self.Pos); self.playedSound = true; end if self.shell then diff --git a/CreditsAssets.txt b/CreditsAssets.txt index aa9817923..2daec895c 100644 --- a/CreditsAssets.txt +++ b/CreditsAssets.txt @@ -235,6 +235,38 @@ New World Interactive: Insurgency ShipExplosion1-3 - vehicle_explode +******************************************************************************* + Ronin.rte\Devices\Explosives\MolotovCocktail\Sounds +------------------------------------------------------------------------------- +New World Interactive: Insurgency: Sandstorm + +molotov_detonate +molotov_glass_break + +molotov_lighter_strike +molotov_ignite + +******************************************************************************* + Ronin.rte\Devices\Misc\Bottle\Sounds +------------------------------------------------------------------------------- +New World Interactive: Insurgency: Sandstorm + +molotov_glass_break + +******************************************************************************* + Ronin.rte\Devices\Special\Scrambler\Sounds +------------------------------------------------------------------------------- +Digital Extremes: Warframe + +GrnOceanElectricSurge + +TennoHubCompBeepA +CrpBeepCombyF + +New World Interactive: Insurgency: Sandstorm + +m19_twist_dial + ******************************************************************************* Ronin.rte\Devices\Weapons\M60\Sounds @@ -245,6 +277,17 @@ M60 Firing Sounds M240 Firing Sounds? M249 Reload Sounds +******************************************************************************* + Ronin.rte\Devices\Weapons\Stoner63\Sounds +------------------------------------------------------------------------------- +New World Interactive: Insurgency: Sandstorm + +MG3 Reload Sounds +M4A1 Firing Sounds +M249 Firing Sounds +Global Drum Mag Sounds + + ******************************************************************************* Dummy.rte\Devices\Weapons\Destroyer\Sounds @@ -643,6 +686,7 @@ Digital Extremes: Warframe CrpSpearGun Firing Sounds LatoVandal Firing Sounds +RailgunFullyCharged ******************************************************************************* Dummy.rte\Devices\Weapons\FragNailer\Sounds @@ -672,6 +716,17 @@ CrpBow Firing Sounds CrpChainLightningRifle Firing Sounds +******************************************************************************* +Dummy.rte\Devices\Tools\Shielder\Sounds +------------------------------------------------------------------------------- +Digital Extremes: Warframe + +Impact: VoltShieldImpactDefault +ShieldGib: VoltShieldDisable +Fire: VoltShieldDrop +ReloadEnd: CrpSpearGunChargeUpA + + ******************************************************************************* Coalition.rte\Devices\Weapons\SniperRifle\Sounds ------------------------------------------------------------------------------- @@ -792,6 +847,16 @@ Digital Extremes: Warframe TnoSundialSMG Firing Sounds TennoDrakeRifle Firing Sounds +******************************************************************************* + Browncoats.rte\Devices\Tools\Blowtorch\Sounds +------------------------------------------------------------------------------- + +Digital Extremes: Warframe + +Ember Sounds +Archwing Burn Loop +GrnFlameSpear + ******************************************************************************* Browncoats.rte\Devices\Weapons\Trailblazer\Sounds @@ -1180,4 +1245,5 @@ Impact: CrpArachnoidMicroLand (Warframe) + ******************************************************************************* \ No newline at end of file diff --git a/Dummy.rte/Actors/Infantry/DummyLight/DummyLight.ini b/Dummy.rte/Actors/Infantry/DummyLight/DummyLight.ini index 0930dddb3..e4f8571a9 100644 --- a/Dummy.rte/Actors/Infantry/DummyLight/DummyLight.ini +++ b/Dummy.rte/Actors/Infantry/DummyLight/DummyLight.ini @@ -230,7 +230,7 @@ AddEffect = Attachable Resolution = 6 Depth = 2 DeepCheck = 1 - JointStrength = 150 + JointStrength = 200 JointStiffness = 0.1 BreakWound = AEmitter CopyOf = Leaking Machinery @@ -264,7 +264,7 @@ AddEffect = Attachable Offset = Vector X = 0.5 Y = 2.5 - GibImpulseLimit = 400 + GibImpulseLimit = 300 GibWoundLimit = 4 GibSound = SoundContainer CopyOf = Bone Crack @@ -296,8 +296,8 @@ AddActor = Arm ParentOffset = Vector X = -1 Y = -4 - JointStrength = 185 - JointStiffness = 0.5 + JointStrength = 180 + JointStiffness = 0.4 BreakWound = AEmitter CopyOf = Wound Bone Break ParentBreakWound = AEmitter @@ -362,7 +362,7 @@ AddActor = Arm Offset = Vector X = -4.5 Y = -3 - GibImpulseLimit = 50 + GibImpulseLimit = 240 GibWoundLimit = 3 GibSound = SoundContainer CopyOf = Bone Crack @@ -450,7 +450,7 @@ AddActor = Leg Depth = 0 DeepCheck = 0 JointStrength = 200 - JointStiffness = 0.5 + JointStiffness = 0.4 BreakWound = AEmitter CopyOf = Wound Bone Break ParentBreakWound = AEmitter @@ -458,7 +458,7 @@ AddActor = Leg JointOffset = Vector X = -5 Y = 2 - DrawAfterParent = 0 + DrawAfterParent = 1 Foot = Attachable CopyOf = Dummy Light Foot FG ParentOffset = Vector @@ -516,7 +516,7 @@ AddActor = Leg Offset = Vector X = 3 Y = 0 - GibImpulseLimit = 60 + GibImpulseLimit = 300 GibWoundLimit = 3 GibSound = SoundContainer CopyOf = Bone Crack @@ -576,7 +576,7 @@ AddActor = AHuman DeathSound = SoundContainer CopyOf = Bone Crack DeviceSwitchSound = SoundContainer - CopyOf = Device Switch + CopyOf = Servo Sound Health = 100 ImpulseDamageThreshold = 2700 AimDistance = 30 @@ -596,6 +596,7 @@ AddActor = AHuman X = -6 Y = -1 JumpTime = 2 + JumpAngleRange = 0.3 FGArm = Arm CopyOf = Dummy Light Arm FG ParentOffset = Vector @@ -643,19 +644,15 @@ AddActor = AHuman CopyOf = Human Walk Path PresetName = Dummy Walk Path StartOffset = Vector - X = 6 + X = 10 Y = -3 NormalTravelSpeed = 3.5 + WalkRotAngleTarget = -0.1 CrouchLimbPath = LimbPath - PresetName = Dummy Crouch Path - StartOffset = Vector - X = 10 - Y = 0 - StartSegCount = 0 - SlowTravelSpeed = 0.1 - NormalTravelSpeed = 0.5 - FastTravelSpeed = 1.5 - PushForce = 5000 + CopyOf = Human Crouch Path + CrouchLimbPathBG = LimbPath + CopyOf = Human Crouch Path BG + CrouchRotAngleTarget = -0.9 CrawlLimbPath = LimbPath PresetName = Dummy Crawl Path StartOffset = Vector diff --git a/Dummy.rte/Actors/Mecha/Dreadnought/Dreadnought.ini b/Dummy.rte/Actors/Mecha/Dreadnought/Dreadnought.ini index b88f67798..d445050fc 100644 --- a/Dummy.rte/Actors/Mecha/Dreadnought/Dreadnought.ini +++ b/Dummy.rte/Actors/Mecha/Dreadnought/Dreadnought.ini @@ -200,7 +200,7 @@ AddEffect = MOSRotating AddDevice = HDFirearm PresetName = Dreadnought Nailer - Mass = 10 + Mass = 8 HitsMOs = 0 GetsHitByMOs = 1 Buyable = 0 @@ -303,7 +303,7 @@ AddDevice = HDFirearm AddEffect = Attachable PresetName = Dummy Dreadnought Turret Part A - Mass = 134.81 + Mass = 70 HitsMOs = 1 GetsHitByMOs = 1 CollidesWithTerrainWhileAttached = 1 @@ -312,7 +312,7 @@ AddEffect = Attachable FrameCount = 1 SpriteOffset = Vector X = -11 - Y = -12 + Y = -11 AngularVel = 6 EntryWound = AEmitter CopyOf = Dent Metal Light @@ -325,7 +325,7 @@ AddEffect = Attachable Resolution = 4 Depth = 0 DeepCheck = 0 - JointStrength = 350 + JointStrength = 500 JointStiffness = 0.5 BreakWound = AEmitter CopyOf = Wound Bone Break @@ -333,7 +333,7 @@ AddEffect = Attachable CopyOf = Wound Bone Break JointOffset = Vector X = 0 - Y = 10 + Y = 9 DrawAfterParent = 1 AddGib = Gib GibParticle = MOSRotating @@ -439,7 +439,7 @@ AddEffect = Attachable AddEffect = Attachable PresetName = Dummy Dreadnought Turret Part B - Mass = 70.01 + Mass = 50 HitsMOs = 1 GetsHitByMOs = 1 CollidesWithTerrainWhileAttached = 1 @@ -461,7 +461,7 @@ AddEffect = Attachable Resolution = 4 Depth = 0 DeepCheck = 0 - JointStrength = 350 + JointStrength = 600 JointStiffness = 0.5 BreakWound = AEmitter CopyOf = Wound Bone Break @@ -533,7 +533,7 @@ AddEffect = Attachable AddEffect = Attachable PresetName = Dummy Dreadnought Turret Part C - Mass = 24.72 + Mass = 20 HitsMOs = 1 GetsHitByMOs = 1 CollidesWithTerrainWhileAttached = 1 @@ -555,7 +555,7 @@ AddEffect = Attachable Resolution = 4 Depth = 0 DeepCheck = 0 - JointStrength = 350 + JointStrength = 400 JointStiffness = 0.5 BreakWound = AEmitter CopyOf = Wound Bone Break @@ -631,7 +631,7 @@ AddEffect = Attachable AddActor = Turret PresetName = Dummy Dreadnought Turret - Mass = 200 + Mass = 120 HitsMOs = 1 GetsHitByMOs = 1 SpriteFile = ContentFile @@ -658,7 +658,7 @@ AddActor = Turret Resolution = 4 Depth = 0 DeepCheck = 0 - JointStrength = 900 + JointStrength = 1000 JointStiffness = 0.9 BreakWound = AEmitter CopyOf = Leaking Machinery @@ -834,7 +834,7 @@ AddActor = Leg JointOffset = Vector X = -2 Y = 6 - DrawAfterParent = 0 + DrawAfterParent = 1 ExtendedOffset = Vector X = 8 Y = -10 @@ -888,7 +888,7 @@ AddActor = ACrab Description = Armored tank on 4 legs. Armed with a machine gun and covered with multiple layers of armor. AddToGroup = Actors AddToGroup = Actors - Mecha - Mass = 41.71 + Mass = 40 GoldValue = 130 HitsMOs = 1 GetsHitByMOs = 1 @@ -920,7 +920,7 @@ AddActor = ACrab CopyOf = Device Switch PassengerSlots = 2 Health = 100 - ImpulseDamageThreshold = 2100 + ImpulseDamageThreshold = 3200 AimRange = 0.5 AimDistance = 30 Perceptiveness = 0.75 @@ -937,6 +937,7 @@ AddActor = ACrab Y = 4 DrawAfterParent = 0 JumpTime = 1 + JumpAngleRange = 0.1 LFGLeg = Leg CopyOf = Dummy Dreadnought Leg FG ParentOffset = Vector @@ -1077,7 +1078,7 @@ AddActor = ACrab Offset = Vector X = -2.5 Y = -1.5 - GibImpulseLimit = 15000 + GibImpulseLimit = 16000 GibWoundLimit = 10 GibSound = SoundContainer CopyOf = Bone Crack \ No newline at end of file diff --git a/Dummy.rte/Actors/Mecha/Dreadnought/TurretLargeA.png b/Dummy.rte/Actors/Mecha/Dreadnought/TurretLargeA.png index c7caf3ab8..97c4abeb3 100644 Binary files a/Dummy.rte/Actors/Mecha/Dreadnought/TurretLargeA.png and b/Dummy.rte/Actors/Mecha/Dreadnought/TurretLargeA.png differ diff --git a/Dummy.rte/Craft/Dropships/Dropship.ini b/Dummy.rte/Craft/Dropships/Dropship.ini index 83fd65175..bd55a12c1 100644 --- a/Dummy.rte/Craft/Dropships/Dropship.ini +++ b/Dummy.rte/Craft/Dropships/Dropship.ini @@ -714,7 +714,7 @@ AddEffect = AEmitter JointOffset = Vector X = 0 Y = -14 - JointStrength = 800 + JointStrength = 4000 JointStiffness = 1.0 DrawAfterParent = 0 EntryWound = AEmitter @@ -729,13 +729,13 @@ AddEffect = AEmitter EmittedParticle = MOPixel CopyOf = Jet Air Blast Spread = 0.25 - MaxVelocity = 40 + MaxVelocity = 35 MinVelocity = 25 AddEmission = Emission EmittedParticle = MOPixel CopyOf = Jet Air Blast 2 Spread = 0.3 - MaxVelocity = 40 + MaxVelocity = 35 MinVelocity = 25 EmissionSound = SoundContainer AttenuationStartDistance = 210 @@ -755,7 +755,7 @@ AddEffect = AEmitter EmissionOffset = Vector X = 0 Y = 12 - ParticlesPerMinute = 5000 + ParticlesPerMinute = 10000 MinThrottleRange = 1.0 MaxThrottleRange = 0.5 BurstSize = 10 @@ -767,8 +767,9 @@ AddEffect = AEmitter Flash = Attachable CopyOf = Jet Flame A FlashOnlyOnBurst = 0 - GibImpulseLimit = 1000 + GibImpulseLimit = 2800 GibWoundLimit = 20 + GibWithParentChance = 0.3 GibSound = SoundContainer CopyOf = Crash Woosh AddGib = Gib @@ -875,7 +876,7 @@ AddEffect = AEmitter JointOffset = Vector X = 0 Y = -14 - JointStrength = 800 + JointStrength = 4000 JointStiffness = 1.0 DrawAfterParent = 0 EntryWound = AEmitter @@ -890,13 +891,13 @@ AddEffect = AEmitter EmittedParticle = MOPixel CopyOf = Jet Air Blast Spread = 0.25 - MaxVelocity = 40 + MaxVelocity = 35 MinVelocity = 25 AddEmission = Emission EmittedParticle = MOPixel CopyOf = Jet Air Blast 2 Spread = 0.3 - MaxVelocity = 40 + MaxVelocity = 35 MinVelocity = 25 EmissionSound = SoundContainer AttenuationStartDistance = 210 @@ -916,7 +917,7 @@ AddEffect = AEmitter EmissionOffset = Vector X = 0 Y = 12 - ParticlesPerMinute = 5000 + ParticlesPerMinute = 10000 MinThrottleRange = 1.0 MaxThrottleRange = 0.5 BurstSize = 10 @@ -928,8 +929,9 @@ AddEffect = AEmitter Flash = Attachable CopyOf = Jet Flame A FlashOnlyOnBurst = 0 - GibImpulseLimit = 1000 + GibImpulseLimit = 2800 GibWoundLimit = 20 + GibWithParentChance = 0.3 GibSound = SoundContainer CopyOf = Crash Woosh AddGib = Gib @@ -1165,15 +1167,13 @@ AddActor = Attachable DeepCheck = 1 JointStrength = 600 JointStiffness = 1 - BreakWound = AEmitter - CopyOf = Leaking Machinery ParentBreakWound = AEmitter CopyOf = Leaking Machinery JointOffset = Vector X = 14 Y = -38 DrawAfterParent = 0 - GibImpulseLimit = 500 + GibImpulseLimit = 600 GibWoundLimit = 10 AddGib = Gib GibParticle = MOSRotating @@ -1236,7 +1236,7 @@ AddActor = ACDropShip ExitWound = AEmitter CopyOf = Dent Metal GoldValue = 400 - DeliveryDelayMultiplier = 1.8 + DeliveryDelayMultiplier = 1.6 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -1297,16 +1297,20 @@ AddActor = ACDropShip HatchDelay = 200 HatchOpenSound = SoundContainer AddSound = ContentFile - FilePath = Base.rte/Sounds/Craft/HatchOpen.flac + FilePath = Base.rte/Sounds/Craft/HatchOpen1.flac + HatchCloseSound = SoundContainer + AddSound = ContentFile + FilePath = Base.rte/Sounds/Craft/HatchOpen1.flac AddExit = Exit Offset = Vector X = 0 Y = 28 Velocity = Vector X = 0 - Y = 6 + Y = 5 Radius = 22 Range = 40 + ExitInterval = 800 CrashSound = SoundContainer CopyOf = Metal Body Blunt Hit Large CanLand = 0 diff --git a/Dummy.rte/Craft/Rockets/Rocklet.ini b/Dummy.rte/Craft/Rockets/Rocklet.ini index 9a66407f0..420afc9de 100644 --- a/Dummy.rte/Craft/Rockets/Rocklet.ini +++ b/Dummy.rte/Craft/Rockets/Rocklet.ini @@ -296,7 +296,7 @@ AddEffect = ACRocket Mass = 600 MaxInventoryMass = 300 MaxPassengers = 2 - DeliveryDelayMultiplier = 0.8 + DeliveryDelayMultiplier = 0.9 HitsMOs = 1 GetsHitByMOs = 1 ScriptPath = Base.rte/AI/RocketAI.lua @@ -375,7 +375,10 @@ AddEffect = ACRocket HatchDelay = 200 HatchOpenSound = SoundContainer AddSound = ContentFile - FilePath = Base.rte/Sounds/Craft/HatchOpen.flac + FilePath = Base.rte/Sounds/Craft/HatchOpen1.flac + HatchCloseSound = SoundContainer + AddSound = ContentFile + FilePath = Base.rte/Sounds/Craft/HatchOpen1.flac AddExit = Exit Offset = Vector X = 15 diff --git a/Dummy.rte/Craft/Shared.ini b/Dummy.rte/Craft/Shared.ini index 253923f29..12398eb38 100644 --- a/Dummy.rte/Craft/Shared.ini +++ b/Dummy.rte/Craft/Shared.ini @@ -46,5 +46,25 @@ AddEffect = Leg MoveSpeed = 0.2 GibImpulseLimit = 10000 GibWoundLimit = 8 + GibWithParentChance = 0.2 GibSound = SoundContainer - CopyOf = Bone Crack // replace this \ No newline at end of file + CopyOf = Bone Crack // replace this + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Grey Tiny A + Count = 3 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Panel Orange Tiny A + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Gib Pipe Small C + Offset = Vector + X = -1 + Y = -1 + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Gib Metal Rusty Small A + Offset = Vector + X = 3 + Y = -2 \ No newline at end of file diff --git a/Dummy.rte/Devices.ini b/Dummy.rte/Devices.ini index d7007c851..5830cb776 100644 --- a/Dummy.rte/Devices.ini +++ b/Dummy.rte/Devices.ini @@ -32,4 +32,5 @@ IncludeFile = Dummy.rte/Devices/Explosives/DisruptorGrenade/DisruptorGrenade.ini // Tools -IncludeFile = Dummy.rte/Devices/Tools/TurboDigger/TurboDigger.ini \ No newline at end of file +IncludeFile = Dummy.rte/Devices/Tools/TurboDigger/TurboDigger.ini +IncludeFile = Dummy.rte/Devices/Tools/Shielder/Shielder.ini \ No newline at end of file diff --git a/Dummy.rte/Devices/Explosives/ImpulseGrenade/ImpulseGrenade.ini b/Dummy.rte/Devices/Explosives/ImpulseGrenade/ImpulseGrenade.ini index dad31a394..7371b33b6 100644 --- a/Dummy.rte/Devices/Explosives/ImpulseGrenade/ImpulseGrenade.ini +++ b/Dummy.rte/Devices/Explosives/ImpulseGrenade/ImpulseGrenade.ini @@ -90,7 +90,7 @@ AddDevice = TDExplosive AtomGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Bouncy Military Stuff + CopyOf = Bouncy Stuff Resolution = 2 Depth = 0 DeepGroup = AtomGroup diff --git a/Dummy.rte/Devices/Tools/Shielder/ShieldGlow.png b/Dummy.rte/Devices/Tools/Shielder/ShieldGlow.png new file mode 100644 index 000000000..0644bd2fd Binary files /dev/null and b/Dummy.rte/Devices/Tools/Shielder/ShieldGlow.png differ diff --git a/Dummy.rte/Devices/Tools/Shielder/ShieldWall.lua b/Dummy.rte/Devices/Tools/Shielder/ShieldWall.lua new file mode 100644 index 000000000..569cf4995 --- /dev/null +++ b/Dummy.rte/Devices/Tools/Shielder/ShieldWall.lua @@ -0,0 +1,36 @@ +function Create(self) + self.glow = CreateMOPixel("Shielder Wall Glow", "Dummy.rte"); + self.glow.Pos = self.Pos; + self.glow.EffectRotAngle = self.RotAngle; + MovableMan:AddParticle(self.glow); + self.glowID = self.glow.UniqueID; + + self.AngularVel = 0; +end +function Update(self) + if self.glow and self.glow.UniqueID == self.glowID then + self.glow.Pos = self.Pos; + if self.AngularVel ~= 0 then + self.glow.EffectRotAngle = self.RotAngle; + end + --To-do: add flicker + else + self.glow = nil; + end + + self.AngularVel = 0; + + if self.PinStrength == 0 and self.Vel.Magnitude < 1 then + self.PinStrength = self.Mass; + else + self.Vel = Vector(); + end + if self.Age > self.Lifetime - 30 * (1 + self.WoundCount) then + self:GibThis(); + end +end +function Destroy(self) + if self.glow then + self.glow.ToDelete = true; + end +end \ No newline at end of file diff --git a/Dummy.rte/Devices/Tools/Shielder/ShieldWall.png b/Dummy.rte/Devices/Tools/Shielder/ShieldWall.png new file mode 100644 index 000000000..7e9915187 Binary files /dev/null and b/Dummy.rte/Devices/Tools/Shielder/ShieldWall.png differ diff --git a/Dummy.rte/Devices/Tools/Shielder/Shielder.ini b/Dummy.rte/Devices/Tools/Shielder/Shielder.ini new file mode 100644 index 000000000..37a4eba26 --- /dev/null +++ b/Dummy.rte/Devices/Tools/Shielder/Shielder.ini @@ -0,0 +1,395 @@ +/////////////////////////////////////////////////////////////////////// +// Shielder Ammo + + +AddEffect = MOSParticle + PresetName = Shielder Effect Particle + Mass = 0.1 + RestThreshold = -1 + GlobalAccScalar = 0 + AirResistance = 0.01 + AirThreshold = 1 + LifeTime = 200 + Sharpness = 0.1 + HitsMOs = 0 + GetsHitByMOs = 0 + SpriteFile = ContentFile + FilePath = Dummy.rte/Effects/Particle/EnEffect.png + FrameCount = 10 + SpriteOffset = Vector + X = -3 + Y = -3 + Atom = Atom + Material = Material + CopyOf = Air Blast + TrailLength = 0 + ScreenEffect = ContentFile + FilePath = Base.rte/Effects/Glows/YellowSmaller.png + EffectStartStrength = 0.5 + EffectStopStrength = 0.0 + + +AddEffect = AEmitter + CopyOf = Dent Metal No Spark + PresetName = Dent Shielder Wall + SpriteFile = ContentFile + FilePath = Base.rte/Null.png + AddEmission = Emission + EmittedParticle = MOPixel + CopyOf = Spark Yellow 1 + Spread = 0.3 + MaxVelocity = 6 + MinVelocity = 3 + LifeVariation = 0.2 + BurstSize = 3 + AddEmission = Emission + EmittedParticle = MOSParticle + CopyOf = Shielder Effect Particle + Spread = 0.1 + MaxVelocity = 2 + MinVelocity = 1 + LifeVariation = 0.4 + BurstSize = 1 + BurstSound = SoundContainer + AddSound = Dummy.rte/Devices/Tools/Shielder/Sounds/Impact1.flac + AddSound = Dummy.rte/Devices/Tools/Shielder/Sounds/Impact2.flac + AddSound = Dummy.rte/Devices/Tools/Shielder/Sounds/Impact3.flac + AddSound = Dummy.rte/Devices/Tools/Shielder/Sounds/Impact4.flac + AddSound = Dummy.rte/Devices/Tools/Shielder/Sounds/Impact5.flac + EmissionEnabled = 1 + EmissionsIgnoreThis = 1 + ParticlesPerMinute = 0 + BurstScale = 1 + BurstDamage = 1 + BurstTriggered = 1 + EmissionDamage = 0 + + +AddEffect = MOPixel + PresetName = Shielder Wall Glow + Mass = 1 + RestThreshold = -1 + LifeTime = 20000 + PinStrength = 100 + Color = Color + R = 249 + G = 249 + B = 105 + ScreenEffect = ContentFile + FilePath = Dummy.rte/Devices/Tools/Shielder/ShieldGlow.png + EffectStartTime = 1 + EffectAlwaysShows = 1 + EffectStartStrength = 0.6 + EffectStopStrength = 0.4 + + +AddAmmo = MOSRotating + PresetName = Shielder Wall + Mass = 1000 + LifeTime = 18000 + GlobalAccScalar = 0 + AirResistance = 0.5 + AirThreshold = 0 + RestThreshold = -1 + HitsMOs = 1 + GetsHitByMOs = 1 + ScriptPath = Dummy.rte/Devices/Tools/Shielder/ShieldWall.lua + SpriteFile = ContentFile + FilePath = Dummy.rte/Devices/Tools/Shielder/ShieldWall.png + FrameCount = 1 + SpriteOffset = Vector + X = -3 + Y = -25 + EntryWound = AEmitter + CopyOf = Dent Shielder Wall + ExitWound = AEmitter + CopyOf = Dent Shielder Wall + AtomGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Door Metal + Resolution = 4 + Depth = 0 + DeepGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Door Metal + Resolution = 4 + Depth = 10 + DeepCheck = 0 +/*To-do: enable this once ScreenEffect works properly on MOSRotating + ScreenEffect = ContentFile + FilePath = Dummy.rte/Devices/Tools/Shielder/ShieldGlow.png + EffectStartStrength = 0.6 + EffectStopStrength = 0.3 +*/ + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Shielder Effect Particle + Offset = Vector + X = 0 + Y = -22 + MaxVelocity = 1 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Shielder Effect Particle + Offset = Vector + X = 0 + Y = -18 + MaxVelocity = 1 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Shielder Effect Particle + Offset = Vector + X = 0 + Y = -14 + MaxVelocity = 1 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Shielder Effect Particle + Offset = Vector + X = 0 + Y = -10 + MaxVelocity = 1 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Shielder Effect Particle + Offset = Vector + X = 0 + Y = -6 + MaxVelocity = 1 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Shielder Effect Particle + Offset = Vector + X = 0 + Y = -2 + MaxVelocity = 1 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Shielder Effect Particle + Offset = Vector + X = 0 + Y = 2 + MaxVelocity = 1 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Shielder Effect Particle + Offset = Vector + X = 0 + Y = 6 + MaxVelocity = 1 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Shielder Effect Particle + Offset = Vector + X = 0 + Y = 10 + MaxVelocity = 1 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Shielder Effect Particle + Offset = Vector + X = 0 + Y = 14 + MaxVelocity = 1 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Shielder Effect Particle + Offset = Vector + X = 0 + Y = 18 + MaxVelocity = 1 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Shielder Effect Particle + Offset = Vector + X = 0 + Y = 22 + MaxVelocity = 1 + GibWoundLimit = 30 + GibImpulseLimit = 100000 + GibSound = SoundContainer + AddSound = Dummy.rte/Devices/Tools/Shielder/Sounds/ShieldGib.flac + + +AddAmmo = Round + PresetName = Round Dummy Shielder + ParticleCount = 1 + Particle = MOSRotating + CopyOf = Shielder Wall + Shell = MOPixel + CopyOf = Glow Particle Yellow Big + ShellVelocity = 5 + FireVelocity = 25 + Separation = 0 + + +AddAmmo = Magazine + PresetName = Magazine Dummy Shielder + Mass = 3 + HitsMOs = 0 + GetsHitByMOs = 0 + SpriteFile = ContentFile + FilePath = Dummy.rte/Devices/Tools/Shielder/ShielderMagazine.png + FrameCount = 1 + SpriteOffset = Vector + X = -2 + Y = -4 + EntryWound = AEmitter + CopyOf = Dent Metal + ExitWound = AEmitter + CopyOf = Dent Metal + AtomGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Bullet Metal + Resolution = 2 + Depth = 0 + DeepGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Bullet Metal + Resolution = 3 + Depth = 1 + DeepCheck = 0 + JointStrength = 200 + JointStiffness = 1 + JointOffset = Vector + X = 0 + Y = -3 + DrawAfterParent = 0 + RoundCount = 1 + RegularRound = Round + CopyOf = Round Dummy Shielder + Discardable = 0 + + +/////////////////////////////////////////////////////////////////////// +// Shielder + + +AddDevice = HDFirearm + PresetName = Shielder + Description = This tool materializes a temporary energy shield in front of the user for protection and/or slowing down enemy pursuers. + AddToGroup = Tools + Mass = 8 + HitsMOs = 0 + GetsHitByMOs = 1 + SpriteFile = ContentFile + FilePath = Dummy.rte/Devices/Tools/Shielder/Shielder.png + FrameCount = 2 + SpriteOffset = Vector + X = -9 + Y = -8 + EntryWound = AEmitter + CopyOf = Dent Metal + ExitWound = AEmitter + CopyOf = Dent Metal + GoldValue = 50 + AtomGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Military Stuff + Resolution = 4 + Depth = 0 + DeepGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Military Stuff + Resolution = 4 + Depth = 10 + DeepCheck = 0 + JointStrength = 100 + JointStiffness = 0.5 + JointOffset = Vector + X = -6 + Y = 4 + DrawAfterParent = 0 + DualWieldable = 1 + StanceOffset = Vector + X = 8 + Y = 5 + SharpStanceOffset = Vector + X = 9 + Y = 2 + SupportOffset = Vector + X = 0 + Y = 3 + SharpLength = 10 + Magazine = Magazine + CopyOf = Magazine Dummy Shielder + Flash = Attachable + PresetName = Muzzle Flash Shielder + SpriteFile = ContentFile + FilePath = Base.rte/Null.png + AtomGroup = AtomGroup + CopyOf = Null AtomGroup + JointStrength = 10000 + JointStiffness = 1 + ScreenEffect = ContentFile + FilePath = Base.rte/Effects/Glows/YellowLessHuge.png + FireSound = SoundContainer + AddSound = ContentFile + FilePath = Dummy.rte/Devices/Tools/Shielder/Sounds/Fire.flac +// EmptySound = SoundContainer +// AddSound = ContentFile +// FilePath = Dummy.rte/Devices/Tools/Shielder/Sounds/ +// ReloadStartSound = SoundContainer +// AddSound = ContentFile +// FilePath = Dummy.rte/Devices/Tools/Shielder/Sounds/ + ReloadEndSound = SoundContainer + AddSound = ContentFile + FilePath = Dummy.rte/Devices/Tools/Shielder/Sounds/ReloadEnd.flac + RecoilTransmission = 0 + RateOfFire = 60 + ReloadTime = 4000 + FullAuto = 0 + FireIgnoresThis = 1 + ShakeRange = 2 + SharpShakeRange = 1 + NoSupportFactor = 2 + ParticleSpreadRange = 0 + ShellEjectAngle = 0 + MuzzleOffset = Vector + X = 12 + Y = 0 + EjectionOffset = Vector + X = 11 + Y = 0 + AddGib = Gib + GibParticle = MOPixel + CopyOf = Spark Yellow 1 + Count = 6 + Spread = 2.25 + MaxVelocity = 20 + MinVelocity = 8 + AddGib = Gib + GibParticle = MOPixel + CopyOf = Spark Yellow 2 + Count = 9 + Spread = 2.25 + MaxVelocity = 20 + MinVelocity = 8 + AddGib = Gib + GibParticle = MOPixel + CopyOf = Drop Oil + Count = 5 + Spread = 2.25 + MaxVelocity = 10 + MinVelocity = 1 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Rust Micro A + Count = 7 + Spread = 2.25 + MaxVelocity = 15 + MinVelocity = 5 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Grey Micro A + Count = 8 + Spread = 2.25 + MaxVelocity = 15 + MinVelocity = 5 + GibWoundLimit = 3 \ No newline at end of file diff --git a/Dummy.rte/Devices/Tools/Shielder/Shielder000.png b/Dummy.rte/Devices/Tools/Shielder/Shielder000.png new file mode 100644 index 000000000..434feaeed Binary files /dev/null and b/Dummy.rte/Devices/Tools/Shielder/Shielder000.png differ diff --git a/Dummy.rte/Devices/Tools/Shielder/Shielder001.png b/Dummy.rte/Devices/Tools/Shielder/Shielder001.png new file mode 100644 index 000000000..2b2336b04 Binary files /dev/null and b/Dummy.rte/Devices/Tools/Shielder/Shielder001.png differ diff --git a/Dummy.rte/Devices/Tools/Shielder/ShielderMagazine.png b/Dummy.rte/Devices/Tools/Shielder/ShielderMagazine.png new file mode 100644 index 000000000..d1b5d635b Binary files /dev/null and b/Dummy.rte/Devices/Tools/Shielder/ShielderMagazine.png differ diff --git a/Dummy.rte/Devices/Tools/Shielder/Sounds/Fire.flac b/Dummy.rte/Devices/Tools/Shielder/Sounds/Fire.flac new file mode 100644 index 000000000..2cdd8db06 Binary files /dev/null and b/Dummy.rte/Devices/Tools/Shielder/Sounds/Fire.flac differ diff --git a/Dummy.rte/Devices/Tools/Shielder/Sounds/Impact1.flac b/Dummy.rte/Devices/Tools/Shielder/Sounds/Impact1.flac new file mode 100644 index 000000000..ece2e4a7c Binary files /dev/null and b/Dummy.rte/Devices/Tools/Shielder/Sounds/Impact1.flac differ diff --git a/Dummy.rte/Devices/Tools/Shielder/Sounds/Impact2.flac b/Dummy.rte/Devices/Tools/Shielder/Sounds/Impact2.flac new file mode 100644 index 000000000..5005bad5f Binary files /dev/null and b/Dummy.rte/Devices/Tools/Shielder/Sounds/Impact2.flac differ diff --git a/Dummy.rte/Devices/Tools/Shielder/Sounds/Impact3.flac b/Dummy.rte/Devices/Tools/Shielder/Sounds/Impact3.flac new file mode 100644 index 000000000..2602e1f6d Binary files /dev/null and b/Dummy.rte/Devices/Tools/Shielder/Sounds/Impact3.flac differ diff --git a/Dummy.rte/Devices/Tools/Shielder/Sounds/Impact4.flac b/Dummy.rte/Devices/Tools/Shielder/Sounds/Impact4.flac new file mode 100644 index 000000000..b2b6fdcf9 Binary files /dev/null and b/Dummy.rte/Devices/Tools/Shielder/Sounds/Impact4.flac differ diff --git a/Dummy.rte/Devices/Tools/Shielder/Sounds/Impact5.flac b/Dummy.rte/Devices/Tools/Shielder/Sounds/Impact5.flac new file mode 100644 index 000000000..6c031e5e1 Binary files /dev/null and b/Dummy.rte/Devices/Tools/Shielder/Sounds/Impact5.flac differ diff --git a/Dummy.rte/Devices/Tools/Shielder/Sounds/ReloadEnd.flac b/Dummy.rte/Devices/Tools/Shielder/Sounds/ReloadEnd.flac new file mode 100644 index 000000000..0c6f9b965 Binary files /dev/null and b/Dummy.rte/Devices/Tools/Shielder/Sounds/ReloadEnd.flac differ diff --git a/Dummy.rte/Devices/Tools/Shielder/Sounds/ShieldGib.flac b/Dummy.rte/Devices/Tools/Shielder/Sounds/ShieldGib.flac new file mode 100644 index 000000000..056a1f497 Binary files /dev/null and b/Dummy.rte/Devices/Tools/Shielder/Sounds/ShieldGib.flac differ diff --git a/Dummy.rte/Devices/Tools/TurboDigger/TurboDigger.ini b/Dummy.rte/Devices/Tools/TurboDigger/TurboDigger.ini index bf1b4babf..a7ba00af5 100644 --- a/Dummy.rte/Devices/Tools/TurboDigger/TurboDigger.ini +++ b/Dummy.rte/Devices/Tools/TurboDigger/TurboDigger.ini @@ -38,11 +38,11 @@ AddAmmo = Magazine Y = -3 DrawAfterParent = 1 RoundCount = 500 - RTTRatio = 5 + RTTRatio = 4 RegularRound = Round CopyOf = Round Heavy Blast PresetName = Round Dummy Digger - ParticleCount = 5 + ParticleCount = 4 Particle = MOPixel CopyOf = Particle Heavy Digger PresetName = Particle Dummy Digger @@ -54,13 +54,13 @@ AddAmmo = Magazine G = 255 B = 159 TrailLength = 6 - Separation = 6 + Separation = 5 TracerRound = Round CopyOf = Round Medium Blast PresetName = Tracer Dummy Digger - ParticleCount = 3 + ParticleCount = 2 Particle = MOPixel - CopyOf = Particle Medium Digger + CopyOf = Particle Medium Digger Damage PresetName = Tracer Dummy Digger Atom = Atom Material = Material @@ -70,7 +70,9 @@ AddAmmo = Magazine G = 234 B = 234 TrailLength = 18 - Separation = 6 + Shell = MOPixel + CopyOf = Particle Medium Digger + Separation = 5 /////////////////////////////////////////////////////////////////////// @@ -78,7 +80,7 @@ AddAmmo = Magazine AddDevice = HDFirearm PresetName = Turbo Digger - Description = Dummy mining tool. Works as a powerful close range weapon too. + Description = Dummy mining tool. Doubles as a powerful close range weapon. AddToGroup = Tools AddToGroup = Tools - Diggers Mass = 9 @@ -160,11 +162,13 @@ AddDevice = HDFirearm SharpShakeRange = 1 NoSupportFactor = 2 ParticleSpreadRange = 50 + ShellEjectAngle = 0 + ShellSpreadRange = 40 MuzzleOffset = Vector X = 9 Y = -1 EjectionOffset = Vector - X = 1 + X = 9 Y = -1 AddGib = Gib GibParticle = MOPixel diff --git a/Dummy.rte/Devices/Weapons/BlasterRifle/BlasterRifle.ini b/Dummy.rte/Devices/Weapons/BlasterRifle/BlasterRifle.ini index e65ad210a..cb228577c 100644 --- a/Dummy.rte/Devices/Weapons/BlasterRifle/BlasterRifle.ini +++ b/Dummy.rte/Devices/Weapons/BlasterRifle/BlasterRifle.ini @@ -65,7 +65,7 @@ AddAmmo = Round Shell = MOSParticle CopyOf = Small Smoke Ball 1 Glow Yellow FireVelocity = 100 - ShellVelocity = 0 + ShellVelocity = 3 Separation = 5 @@ -193,8 +193,8 @@ AddDevice = HDFirearm SharpShakeRange = 3 NoSupportFactor = 1.5 ParticleSpreadRange = 0 - ShellSpreadRange = 8 - ShellAngVelRange = 2 + ShellSpreadRange = 1 + ShellEjectAngle = 0 MuzzleOffset = Vector X = 10 Y = 0 diff --git a/Dummy.rte/Devices/Weapons/BlasterRifle/BlasterShot.lua b/Dummy.rte/Devices/Weapons/BlasterRifle/BlasterShot.lua index 7fffe67e3..ce6285207 100644 --- a/Dummy.rte/Devices/Weapons/BlasterRifle/BlasterShot.lua +++ b/Dummy.rte/Devices/Weapons/BlasterRifle/BlasterShot.lua @@ -1,6 +1,5 @@ function Create(self) self.AirResistance = self.AirResistance * RangeRand(1.0, 1.5); - self.trailLength = 15; self.trailPar = CreateMOPixel("Dummy Blaster Trail Glow"); self.trailPar.Pos = self.Pos; @@ -14,7 +13,7 @@ function Create(self) end function Update(self) if not self.ToDelete and self.trailPar and MovableMan:IsParticle(self.trailPar) then - self.trailPar.Pos = self.Pos - Vector(self.lastVel.X, self.lastVel.Y):SetMagnitude(math.min(self.lastVel.Magnitude * rte.PxTravelledPerFrame, self.trailLength) * 0.5); + self.trailPar.Pos = self.Pos - Vector(self.lastVel.X, self.lastVel.Y):SetMagnitude(math.min(self.lastVel.Magnitude * rte.PxTravelledPerFrame, self.TrailLength) * 0.5); self.trailPar.Vel = self.lastVel * 0.5; self.trailPar.Lifetime = self.Age + TimerMan.DeltaTimeMS; end diff --git a/Dummy.rte/Devices/Weapons/Destroyer/DestroyerCannon.lua b/Dummy.rte/Devices/Weapons/Destroyer/DestroyerCannon.lua index 72ed60cbb..38748cb9e 100644 --- a/Dummy.rte/Devices/Weapons/Destroyer/DestroyerCannon.lua +++ b/Dummy.rte/Devices/Weapons/Destroyer/DestroyerCannon.lua @@ -43,7 +43,7 @@ function Update(self) if self:DoneReloading() then self:Deactivate(); end - if self:IsActivated() then + if self:IsActivated() and not self.forceFire then self:Deactivate(); if self.activeSound:IsBeingPlayed() then @@ -59,7 +59,7 @@ function Update(self) --CPU actor will release the beam at full power local parent = self:GetRootParent(); if parent and IsActor(parent) and not ToActor(parent):IsPlayerControlled() then - ToActor(parent):GetController():SetState(Controller.WEAPON_FIRE, false); + self.forceFire = true; end end self.Magazine.RoundCount = math.ceil(self.charge * 100); @@ -87,6 +87,8 @@ function Update(self) self.charge = 0; self.activeSound:Stop(); + + self.forceFire = false; end end function Destroy(self) diff --git a/Dummy.rte/Devices/Weapons/Destroyer/DestroyerShot.lua b/Dummy.rte/Devices/Weapons/Destroyer/DestroyerShot.lua index 295583022..6dffe7f7e 100644 --- a/Dummy.rte/Devices/Weapons/Destroyer/DestroyerShot.lua +++ b/Dummy.rte/Devices/Weapons/Destroyer/DestroyerShot.lua @@ -14,11 +14,11 @@ function Update(self) if self.emitTimer:IsPastSimMS(6) then self.emitTimer:Reset(); - local particleCount = 1 + math.sqrt(self.Vel.Magnitude * 0.1); + local particleCount = 1 + math.sqrt(self.Vel.Magnitude * 0.2); for i = 1, particleCount do local damagePar = CreateMOPixel("Dummy.rte/Destroyer Emission Particle ".. math.random(2)); damagePar.Pos = self.Pos; - damagePar.Vel = self.Vel * 0.5 + Vector(particleCount + math.random(10), 0):RadRotate(6.28 * math.random()); + damagePar.Vel = self.Vel * 0.5 + Vector(particleCount + math.random(10), 0):RadRotate(math.pi * 2 * math.random()); damagePar.Team = self.Team; damagePar.IgnoresTeamHits = true; MovableMan:AddParticle(damagePar); diff --git a/Dummy.rte/Devices/Weapons/FragNailer/FragNailer.ini b/Dummy.rte/Devices/Weapons/FragNailer/FragNailer.ini index 4b595bd2b..c506e0ff1 100644 --- a/Dummy.rte/Devices/Weapons/FragNailer/FragNailer.ini +++ b/Dummy.rte/Devices/Weapons/FragNailer/FragNailer.ini @@ -225,8 +225,8 @@ AddDevice = HDFirearm ReloadTime = 2500 FullAuto = 1 FireIgnoresThis = 1 - ShakeRange = 5 - SharpShakeRange = 1 + ShakeRange = 6 + SharpShakeRange = 4 NoSupportFactor = 1 ParticleSpreadRange = 3 MuzzleOffset = Vector diff --git a/Dummy.rte/Devices/Weapons/Lancer/Lancer.ini b/Dummy.rte/Devices/Weapons/Lancer/Lancer.ini index b8971b2e8..51135226a 100644 --- a/Dummy.rte/Devices/Weapons/Lancer/Lancer.ini +++ b/Dummy.rte/Devices/Weapons/Lancer/Lancer.ini @@ -1,3 +1,40 @@ +/////////////////////////////////////////////////////////////////////// +// Lancer Sounds + + +AddSoundContainer = SoundContainer + PresetName = Dummy Lancer Fire Sound Low + AttenuationStartDistance = 135 + AddSound = ContentFile + FilePath = Dummy.rte/Devices/Weapons/Lancer/Sounds/FireLow1.flac + AddSound = ContentFile + FilePath = Dummy.rte/Devices/Weapons/Lancer/Sounds/FireLow2.flac + AddSound = ContentFile + FilePath = Dummy.rte/Devices/Weapons/Lancer/Sounds/FireLow3.flac + + +AddSoundContainer = SoundContainer + PresetName = Dummy Lancer Fire Sound Medium + AttenuationStartDistance = 150 + AddSound = ContentFile + FilePath = Dummy.rte/Devices/Weapons/Lancer/Sounds/FireMedium1.flac + AddSound = ContentFile + FilePath = Dummy.rte/Devices/Weapons/Lancer/Sounds/FireMedium2.flac + AddSound = ContentFile + FilePath = Dummy.rte/Devices/Weapons/Lancer/Sounds/FireMedium3.flac + + +AddSoundContainer = SoundContainer + PresetName = Dummy Lancer Fire Sound High + AttenuationStartDistance = 175 + AddSound = ContentFile + FilePath = Dummy.rte/Devices/Weapons/Lancer/Sounds/FireHigh1.flac + AddSound = ContentFile + FilePath = Dummy.rte/Devices/Weapons/Lancer/Sounds/FireHigh2.flac + AddSound = ContentFile + FilePath = Dummy.rte/Devices/Weapons/Lancer/Sounds/FireHigh3.flac + + /////////////////////////////////////////////////////////////////////// // Lancer @@ -82,6 +119,7 @@ AddAmmo = Magazine CopyOf = Tiny Smoke Ball 1 Glow Yellow AIFireVel = 100 AILifeTime = 750 + ShellVelocity = 1 AddDevice = HDFirearm @@ -147,8 +185,8 @@ AddDevice = HDFirearm SharpShakeRange = 0 NoSupportFactor = 0 ParticleSpreadRange = 0 - ShellSpreadRange = 8 - ShellAngVelRange = 2 + ShellSpreadRange = 1 + ShellEjectAngle = 0 MuzzleOffset = Vector X = 15 Y = 0 diff --git a/Dummy.rte/Devices/Weapons/Lancer/Lancer.lua b/Dummy.rte/Devices/Weapons/Lancer/Lancer.lua index 164885f16..0f63bf43e 100644 --- a/Dummy.rte/Devices/Weapons/Lancer/Lancer.lua +++ b/Dummy.rte/Devices/Weapons/Lancer/Lancer.lua @@ -7,6 +7,11 @@ function Create(self) self.sound = false; self.setAngle = 0; + + self.fireSound = {}; + self.fireSound.low = CreateSoundContainer("Dummy Lancer Fire Sound Low", "Dummy.rte"); + self.fireSound.medium = CreateSoundContainer("Dummy Lancer Fire Sound Medium", "Dummy.rte"); + self.fireSound.high = CreateSoundContainer("Dummy Lancer Fire Sound High", "Dummy.rte"); end function Update(self) if self.FiredFrame then @@ -40,8 +45,8 @@ function Update(self) smokePar.IgnoresTeamHits = true; MovableMan:AddParticle(smokePar); end - local sound = self.chargeCounter > highCharge and "High" or (self.chargeCounter < lowCharge and "Low" or "Medium"); - AudioMan:PlaySound("Dummy.rte/Devices/Weapons/Lancer/Sounds/Fire".. sound ..".flac", self.MuzzlePos); + local sound = self.chargeCounter > highCharge and self.fireSound.high or (self.chargeCounter < lowCharge and self.fireSound.low or self.fireSound.medium); + sound:Play(self.MuzzlePos); self.chargeCounter = 1; else diff --git a/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireHigh.flac b/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireHigh.flac deleted file mode 100644 index b5ab2754e..000000000 Binary files a/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireHigh.flac and /dev/null differ diff --git a/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireHigh1.flac b/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireHigh1.flac new file mode 100644 index 000000000..0061d3c33 Binary files /dev/null and b/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireHigh1.flac differ diff --git a/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireHigh2.flac b/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireHigh2.flac new file mode 100644 index 000000000..fbc316542 Binary files /dev/null and b/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireHigh2.flac differ diff --git a/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireHigh3.flac b/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireHigh3.flac new file mode 100644 index 000000000..eb90dee00 Binary files /dev/null and b/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireHigh3.flac differ diff --git a/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireLow.flac b/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireLow.flac deleted file mode 100644 index 28fb7a940..000000000 Binary files a/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireLow.flac and /dev/null differ diff --git a/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireLow1.flac b/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireLow1.flac new file mode 100644 index 000000000..ebf7957db Binary files /dev/null and b/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireLow1.flac differ diff --git a/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireLow2.flac b/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireLow2.flac new file mode 100644 index 000000000..16fb2feaf Binary files /dev/null and b/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireLow2.flac differ diff --git a/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireLow3.flac b/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireLow3.flac new file mode 100644 index 000000000..759e23621 Binary files /dev/null and b/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireLow3.flac differ diff --git a/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireMedium.flac b/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireMedium.flac deleted file mode 100644 index 20e290ead..000000000 Binary files a/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireMedium.flac and /dev/null differ diff --git a/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireMedium1.flac b/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireMedium1.flac new file mode 100644 index 000000000..21e44b33e Binary files /dev/null and b/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireMedium1.flac differ diff --git a/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireMedium2.flac b/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireMedium2.flac new file mode 100644 index 000000000..87534fd99 Binary files /dev/null and b/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireMedium2.flac differ diff --git a/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireMedium3.flac b/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireMedium3.flac new file mode 100644 index 000000000..cbcc578c1 Binary files /dev/null and b/Dummy.rte/Devices/Weapons/Lancer/Sounds/FireMedium3.flac differ diff --git a/Dummy.rte/Devices/Weapons/Lancer/Sounds/FullChargeBleep.flac b/Dummy.rte/Devices/Weapons/Lancer/Sounds/FullChargeBleep.flac index 8220fa9db..533aae318 100644 Binary files a/Dummy.rte/Devices/Weapons/Lancer/Sounds/FullChargeBleep.flac and b/Dummy.rte/Devices/Weapons/Lancer/Sounds/FullChargeBleep.flac differ diff --git a/Dummy.rte/Devices/Weapons/Repeater/Repeater.ini b/Dummy.rte/Devices/Weapons/Repeater/Repeater.ini index f54e3e8f3..cd6d2fe23 100644 --- a/Dummy.rte/Devices/Weapons/Repeater/Repeater.ini +++ b/Dummy.rte/Devices/Weapons/Repeater/Repeater.ini @@ -58,7 +58,7 @@ AddAmmo = Round Shell = MOSParticle CopyOf = Small Smoke Ball 1 Glow Yellow FireVelocity = 100 - ShellVelocity = 0 + ShellVelocity = 3 Separation = 5 @@ -94,7 +94,7 @@ AddDevice = HDFirearm FilePath = Dummy.rte/Devices/Weapons/Repeater/Repeater.png FrameCount = 1 SpriteOffset = Vector - X = -15 + X = -14 Y = -4 EntryWound = AEmitter CopyOf = Dent Metal @@ -117,17 +117,17 @@ AddDevice = HDFirearm JointStrength = 100 JointStiffness = 0.5 JointOffset = Vector - X = -8 + X = -7 Y = 4 DrawAfterParent = 0 StanceOffset = Vector - X = 6 - Y = 7 + X = 4 + Y = 8 SharpStanceOffset = Vector - X = 8 + X = 7 Y = 3 SupportOffset = Vector - X = 1 + X = 0 Y = 3 SharpLength = 260 Magazine = Magazine @@ -164,14 +164,14 @@ AddDevice = HDFirearm SharpShakeRange = 2 NoSupportFactor = 2 ParticleSpreadRange = 1 - ShellSpreadRange = 8 - ShellAngVelRange = 0 + ShellSpreadRange = 1 + ShellEjectAngle = 0 MuzzleOffset = Vector - X = 17 - Y = -1 + X = 16 + Y = -2 EjectionOffset = Vector - X = 17 - Y = 0 + X = 16 + Y = -1 AddGib = Gib GibParticle = MOPixel CopyOf = Spark Yellow 1 diff --git a/Dummy.rte/Devices/Weapons/Repeater/Repeater.png b/Dummy.rte/Devices/Weapons/Repeater/Repeater.png index c309c3072..58fade5ff 100644 Binary files a/Dummy.rte/Devices/Weapons/Repeater/Repeater.png and b/Dummy.rte/Devices/Weapons/Repeater/Repeater.png differ diff --git a/Dummy.rte/Index.ini b/Dummy.rte/Index.ini index b002956b5..703187e46 100644 --- a/Dummy.rte/Index.ini +++ b/Dummy.rte/Index.ini @@ -4,7 +4,6 @@ DataModule FilePath = Dummy.rte/ModuleIcon.png Description = These robots were originally designed as test subjects for weapons, vehicle safety measures, and other lethal experiments, but an AI controller became sentient and broke off from its manufacturers, starting a new line of robots and weapons to defend itself. CrabToHumanSpawnRatio = 0.3 - IncludeFile = Dummy.rte/Materials.ini IncludeFile = Dummy.rte/Devices.ini IncludeFile = Dummy.rte/Actors.ini IncludeFile = Dummy.rte/Craft.ini diff --git a/Dummy.rte/Materials.ini b/Dummy.rte/Materials.ini deleted file mode 100644 index c182b7405..000000000 --- a/Dummy.rte/Materials.ini +++ /dev/null @@ -1,10 +0,0 @@ -/////////////////////////////////////////////////////////////////////// -// Materials - - -AddMaterial = Material - CopyOf = Military Stuff - PresetName = Bouncy Military Stuff - Index = 198 - Bounce = 1.3 - Friction = 0.3 \ No newline at end of file diff --git a/Imperatus.rte/Actors.ini b/Imperatus.rte/Actors.ini index 2afe6e4ef..21cafb9dd 100644 --- a/Imperatus.rte/Actors.ini +++ b/Imperatus.rte/Actors.ini @@ -15,6 +15,11 @@ IncludeFile = Imperatus.rte/Actors/Infantry/AllPurpose/AllPurposeRobot.ini IncludeFile = Imperatus.rte/Actors/Infantry/Combat/CombatRobot.ini +// Mecha + +IncludeFile = Imperatus.rte/Actors/Mecha/TheNose/TheNose.ini + + // Brains IncludeFile = Imperatus.rte/Actors/Brains/Brainbot/Brainbot.ini \ No newline at end of file diff --git a/Imperatus.rte/Actors/Brains/Brainbot/Brainbot.ini b/Imperatus.rte/Actors/Brains/Brainbot/Brainbot.ini index 129f95b2f..d8aee4826 100644 --- a/Imperatus.rte/Actors/Brains/Brainbot/Brainbot.ini +++ b/Imperatus.rte/Actors/Brains/Brainbot/Brainbot.ini @@ -295,7 +295,7 @@ AddActor = Attachable Spread = 2.25 MaxVelocity = 15 MinVelocity = 5 - GibImpulseLimit = 150 + GibImpulseLimit = 300 GibWoundLimit = 12 @@ -340,7 +340,7 @@ AddActor = AHuman AddSound = ContentFile FilePath = Base.rte/Actors/Brains/Case/Sounds/EnergyExplosion.flac DeviceSwitchSound = SoundContainer - CopyOf = Device Switch + CopyOf = Servo Sound Team = 0 Health = 100 ImpulseDamageThreshold = 2800 @@ -362,6 +362,7 @@ AddActor = AHuman Y = 3 DrawAfterParent = 0 JumpTime = 1.5 + JumpAngleRange = 0.2 FGArm = Arm CopyOf = Imperatus All Purpose Robot FG Arm ParentOffset = Vector @@ -408,7 +409,9 @@ AddActor = AHuman WalkLimbPath = LimbPath CopyOf = Robot Walk Path CrouchLimbPath = LimbPath - CopyOf = Robot Crouch Path + CopyOf = Human Crouch Path + CrouchLimbPathBG = LimbPath + CopyOf = Human Crouch Path BG CrawlLimbPath = LimbPath CopyOf = Robot Crawl Path ArmCrawlLimbPath = LimbPath diff --git a/Imperatus.rte/Actors/Infantry/AllPurpose/AllPurposeBody.png b/Imperatus.rte/Actors/Infantry/AllPurpose/AllPurposeBody.png index 94833590b..edda6cebf 100644 Binary files a/Imperatus.rte/Actors/Infantry/AllPurpose/AllPurposeBody.png and b/Imperatus.rte/Actors/Infantry/AllPurpose/AllPurposeBody.png differ diff --git a/Imperatus.rte/Actors/Infantry/AllPurpose/AllPurposeRobot.ini b/Imperatus.rte/Actors/Infantry/AllPurpose/AllPurposeRobot.ini index 0aa5dbf0b..cb3305ce8 100644 --- a/Imperatus.rte/Actors/Infantry/AllPurpose/AllPurposeRobot.ini +++ b/Imperatus.rte/Actors/Infantry/AllPurpose/AllPurposeRobot.ini @@ -108,29 +108,29 @@ AddActor = Attachable ScriptPath = Base.rte/Scripts/Shared/RandomFrame.lua SpriteFile = ContentFile FilePath = Imperatus.rte/Actors/Infantry/AllPurpose/HeadA.png - FrameCount = 2 + FrameCount = 3 SpriteOffset = Vector X = -6 Y = -8 EntryWound = AEmitter - CopyOf = Leaking Machinery Partial + CopyOf = Dent Metal Light ExitWound = AEmitter CopyOf = Leaking Machinery AtomGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Civilian Stuff + CopyOf = Military Stuff Resolution = 6 Depth = 0 DeepGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Civilian Stuff + CopyOf = Military Stuff Resolution = 8 Depth = 2 DeepCheck = 1 JointStrength = 200 - JointStiffness = 0.3 + JointStiffness = 0.5 BreakWound = AEmitter CopyOf = Leaking Machinery ParentBreakWound = AEmitter @@ -204,7 +204,7 @@ AddActor = Attachable Spread = 2.25 MaxVelocity = 10 MinVelocity = 1 - GibImpulseLimit = 200 + GibImpulseLimit = 400 GibWoundLimit = 10 @@ -220,19 +220,19 @@ AddActor = Arm X = -6 Y = -5 EntryWound = AEmitter - CopyOf = Leaking Machinery Partial + CopyOf = Dent Metal Light ExitWound = AEmitter CopyOf = Leaking Machinery AtomGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Civilian Stuff + CopyOf = Military Stuff Resolution = 2 Depth = 0 DeepGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Civilian Stuff + CopyOf = Military Stuff Resolution = 4 Depth = 2 DeepCheck = 1 @@ -248,7 +248,7 @@ AddActor = Arm DrawAfterParent = 1 Hand = ContentFile FilePath = Imperatus.rte/Actors/Infantry/AllPurpose/Hand.png - GripStrength = 175 + GripStrength = 200 MaxLength = 13 IdleOffset = Vector X = 8 @@ -296,7 +296,7 @@ AddActor = Arm Spread = 2.25 MaxVelocity = 15 MinVelocity = 5 - GibImpulseLimit = 45 + GibImpulseLimit = 480 GibWoundLimit = 10 @@ -319,19 +319,19 @@ AddActor = Attachable X = -4 Y = -5 EntryWound = AEmitter - CopyOf = Leaking Machinery Partial + CopyOf = Dent Metal Light ExitWound = AEmitter CopyOf = Leaking Machinery AtomGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Civilian Stuff + CopyOf = Military Stuff Resolution = 2 Depth = 0 DeepGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Civilian Stuff + CopyOf = Military Stuff Resolution = 4 Depth = 2 DeepCheck = 1 @@ -366,19 +366,19 @@ AddActor = Leg X = -9 Y = -10 EntryWound = AEmitter - CopyOf = Leaking Machinery Partial + CopyOf = Dent Metal Light ExitWound = AEmitter CopyOf = Leaking Machinery AtomGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Civilian Stuff + CopyOf = Military Stuff Resolution = 2 Depth = 0 DeepGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Civilian Stuff + CopyOf = Military Stuff Resolution = 4 Depth = 2 DeepCheck = 1 @@ -391,7 +391,7 @@ AddActor = Leg JointOffset = Vector X = -6 Y = 1 - DrawAfterParent = 0 + DrawAfterParent = 1 Foot = Attachable CopyOf = Imperatus All Purpose Robot FG Foot ParentOffset = Vector @@ -449,7 +449,7 @@ AddActor = Leg Spread = 2.25 MaxVelocity = 15 MinVelocity = 5 - GibImpulseLimit = 75 + GibImpulseLimit = 700 GibWoundLimit = 10 @@ -473,13 +473,11 @@ AddActor = AHuman GetsHitByMOs = 1 ScriptPath = Base.rte/AI/HumanAI.lua ScriptPath = Imperatus.rte/Actors/Shared/Robot.lua - AddCustomValue = NumberValue - InputLagMS = 100 SpriteFile = ContentFile FilePath = Imperatus.rte/Actors/Infantry/AllPurpose/AllPurposeBody.png FrameCount = 1 SpriteOffset = Vector - X = -10 + X = -9 Y = -15 EntryWound = AEmitter CopyOf = Leaking Machinery @@ -505,7 +503,7 @@ AddActor = AHuman DeathSound = SoundContainer CopyOf = Robot Death DeviceSwitchSound = SoundContainer - CopyOf = Robot Stride + CopyOf = Servo Sound Health = 100 ImpulseDamageThreshold = 3200 AimDistance = 30 @@ -520,13 +518,15 @@ AddActor = AHuman ParentOffset = Vector X = 0 Y = -14 + LookToAimRatio = 0.4 Jetpack = AEmitter CopyOf = Imperatus Jetpack ParentOffset = Vector X = -4 - Y = 3 + Y = -1 DrawAfterParent = 0 JumpTime = 1.5 + JumpAngleRange = 0.14 FGArm = Arm CopyOf = Imperatus All Purpose Robot FG Arm ParentOffset = Vector @@ -572,58 +572,18 @@ AddActor = AHuman X = 6 Y = 19 WalkLimbPath = LimbPath - PresetName = Robot Walk Path - StartOffset = Vector - X = 6 - Y = -1 - StartSegCount = 3 - AddSegment = Vector - X = 5 - Y = 2 - AddSegment = Vector - X = 2 - Y = 2 - AddSegment = Vector - X = 0 - Y = 5 - AddSegment = Vector - X = 0 - Y = 5 - AddSegment = Vector - X = -6 - Y = 4 - AddSegment = Vector - X = -4 - Y = 0 - AddSegment = Vector - X = -4 - Y = 0 - AddSegment = Vector - X = -4 - Y = 1 - AddSegment = Vector - X = -3 - Y = 1 - AddSegment = Vector - X = 0 - Y = -4 - AddSegment = Vector - X = 8 - Y = -5 - SlowTravelSpeed = 1.5 + CopyOf = Robot Walk Path + PresetName = Imperatus Robot Walk Path + StartSegCount = 4 + SlowTravelSpeed = 1 NormalTravelSpeed = 2.5 - FastTravelSpeed = 4.5 - PushForce = 6000 + FastTravelSpeed = 3 + PushForce = 9000 CrouchLimbPath = LimbPath - PresetName = Robot Crouch Path - StartOffset = Vector - X = 12 - Y = 0 - StartSegCount = 0 - SlowTravelSpeed = 0.1 - NormalTravelSpeed = 0.5 - FastTravelSpeed = 1.5 - PushForce = 5000 + CopyOf = Human Crouch Path + CrouchLimbPathBG = LimbPath + CopyOf = Human Crouch Path BG + CrouchRotAngleTarget = -0.5 CrawlLimbPath = LimbPath PresetName = Robot Crawl Path StartOffset = Vector diff --git a/Imperatus.rte/Actors/Infantry/AllPurpose/HeadA000.png b/Imperatus.rte/Actors/Infantry/AllPurpose/HeadA000.png index 780af9c1e..edbe4452c 100644 Binary files a/Imperatus.rte/Actors/Infantry/AllPurpose/HeadA000.png and b/Imperatus.rte/Actors/Infantry/AllPurpose/HeadA000.png differ diff --git a/Imperatus.rte/Actors/Infantry/AllPurpose/HeadA001.png b/Imperatus.rte/Actors/Infantry/AllPurpose/HeadA001.png index 7c00d4401..264b8294d 100644 Binary files a/Imperatus.rte/Actors/Infantry/AllPurpose/HeadA001.png and b/Imperatus.rte/Actors/Infantry/AllPurpose/HeadA001.png differ diff --git a/Imperatus.rte/Actors/Infantry/AllPurpose/HeadA002.png b/Imperatus.rte/Actors/Infantry/AllPurpose/HeadA002.png new file mode 100644 index 000000000..b55c9a15b Binary files /dev/null and b/Imperatus.rte/Actors/Infantry/AllPurpose/HeadA002.png differ diff --git a/Imperatus.rte/Actors/Infantry/AllPurpose/LegFG005.png b/Imperatus.rte/Actors/Infantry/AllPurpose/LegFG005.png index 66315ec62..7c68daee0 100644 Binary files a/Imperatus.rte/Actors/Infantry/AllPurpose/LegFG005.png and b/Imperatus.rte/Actors/Infantry/AllPurpose/LegFG005.png differ diff --git a/Imperatus.rte/Actors/Infantry/Combat/ChestPlate.png b/Imperatus.rte/Actors/Infantry/Combat/ChestPlate.png new file mode 100644 index 000000000..921a3db38 Binary files /dev/null and b/Imperatus.rte/Actors/Infantry/Combat/ChestPlate.png differ diff --git a/Imperatus.rte/Actors/Infantry/Combat/CombatBody.png b/Imperatus.rte/Actors/Infantry/Combat/CombatBody.png index c8ac68234..477abdec7 100644 Binary files a/Imperatus.rte/Actors/Infantry/Combat/CombatBody.png and b/Imperatus.rte/Actors/Infantry/Combat/CombatBody.png differ diff --git a/Imperatus.rte/Actors/Infantry/Combat/CombatRobot.ini b/Imperatus.rte/Actors/Infantry/Combat/CombatRobot.ini index 244e5b507..689670662 100644 --- a/Imperatus.rte/Actors/Infantry/Combat/CombatRobot.ini +++ b/Imperatus.rte/Actors/Infantry/Combat/CombatRobot.ini @@ -89,13 +89,95 @@ AddEffect = Attachable GibWoundLimit = 10 +AddEffect = Attachable + PresetName = Imperatus Combat Robot Chest Plate + Mass = 10 + HitsMOs = 0 + GetsHitByMOs = 1 + CollidesWithTerrainWhileAttached = 1 + SpriteFile = ContentFile + FilePath = Imperatus.rte/Actors/Infantry/Combat/ChestPlate.png + FrameCount = 1 + SpriteOffset = Vector + X = -4 + Y = -6 + AngularVel = 6 + EntryWound = AEmitter + CopyOf = Dent Metal Chest Plate + ExitWound = AEmitter + CopyOf = Dent Metal Light + AtomGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Armoured Military Stuff + Resolution = 4 + Depth = 0 + DeepCheck = 0 + JointStrength = 800 + JointStiffness = 0.7 + BreakWound = AEmitter + CopyOf = Dent Metal + ParentBreakWound = AEmitter + CopyOf = Dent Metal + JointOffset = Vector + X = 0 + Y = 0 + DrawAfterParent = 1 + GibImpulseLimit = 1000 + GibWoundLimit = 11 + GibSound = SoundContainer + CopyOf = Bone Crack + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Gib Metal Grey Small A + Offset = Vector + X = 0 + Y = -4 + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Gib Metal Grey Small B + Offset = Vector + X = 0 + Y = 1 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Grey Micro A + Offset = Vector + X = 1 + Y = -2 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Dark Micro A + Offset = Vector + X = -4 + Y = -4 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Grey Tiny A + Offset = Vector + X = -3 + Y = -3 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Grey Tiny A + Offset = Vector + X = 0 + Y = -7 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Rust Micro A + Offset = Vector + X = 1 + Y = 0 + + /////////////////////////////////////////////////////////////////////// // Combat Robot AddActor = Attachable PresetName = Imperatus Combat Robot Head - Mass = 28 + Mass = 30 HitsMOs = 0 GetsHitByMOs = 1 ScriptPath = Base.rte/Scripts/Shared/RandomFrame.lua @@ -106,9 +188,9 @@ AddActor = Attachable X = -6 Y = -8 EntryWound = AEmitter - CopyOf = Dent Metal Light + CopyOf = Dent Metal Chest Plate ExitWound = AEmitter - CopyOf = Leaking Machinery + CopyOf = Leaking Machinery Heavy AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -122,16 +204,16 @@ AddActor = Attachable Resolution = 8 Depth = 2 DeepCheck = 1 - JointStrength = 220 - JointStiffness = 0.3 + JointStrength = 300 + JointStiffness = 0.5 BreakWound = AEmitter CopyOf = Leaking Machinery ParentBreakWound = AEmitter - CopyOf = Leaking Machinery + CopyOf = Leaking Machinery Heavy JointOffset = Vector X = -2 Y = 4 - DrawAfterParent = 1 + DrawAfterParent = 0 AddGib = Gib GibParticle = MOPixel CopyOf = Spark Yellow 1 @@ -195,26 +277,28 @@ AddActor = Attachable Spread = 2.25 MaxVelocity = 10 MinVelocity = 1 - GibImpulseLimit = 300 + GibImpulseLimit = 600 GibWoundLimit = 15 AddActor = Arm CopyOf = Imperatus All Purpose Robot FG Arm PresetName = Imperatus Combat Robot FG Arm + Mass = 15 EntryWound = AEmitter - CopyOf = Dent Metal Light + CopyOf = Dent Metal Chest Plate ExitWound = AEmitter CopyOf = Leaking Machinery Partial GibWoundLimit = 15 - GripStrength = 200 + GripStrength = 250 AddActor = Arm CopyOf = Imperatus All Purpose Robot BG Arm PresetName = Imperatus Combat Robot BG Arm + Mass = 15 EntryWound = AEmitter - CopyOf = Dent Metal Light + CopyOf = Dent Metal Chest Plate ExitWound = AEmitter CopyOf = Leaking Machinery Partial GibWoundLimit = 15 @@ -222,23 +306,111 @@ AddActor = Arm AddActor = Leg - CopyOf = Imperatus All Purpose Robot FG Leg PresetName = Imperatus Combat Robot FG Leg + Mass = 20 + HitsMOs = 0 + GetsHitByMOs = 1 + SpriteFile = ContentFile + FilePath = Imperatus.rte/Actors/Infantry/Combat/LegFG.png + FrameCount = 6 + SpriteOffset = Vector + X = -9 + Y = -10 EntryWound = AEmitter - CopyOf = Dent Metal Light + CopyOf = Dent Metal Chest Plate ExitWound = AEmitter CopyOf = Leaking Machinery Partial + AtomGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Military Stuff + Resolution = 2 + Depth = 0 + DeepGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Military Stuff + Resolution = 4 + Depth = 2 + DeepCheck = 1 + JointStrength = 500 + JointStiffness = 0.5 + BreakWound = AEmitter + CopyOf = Leaking Machinery + ParentBreakWound = AEmitter + CopyOf = Leaking Machinery + JointOffset = Vector + X = -6 + Y = 1 + DrawAfterParent = 1 + Foot = Attachable + CopyOf = Imperatus All Purpose Robot FG Foot + ParentOffset = Vector + X = -11 + Y = -8 + ExtendedOffset = Vector + X = 17 + Y = 0 + ContractedOffset = Vector + X = 8.5 + Y = 0 + IdleOffset = Vector + X = 1 + Y = 3 + MoveSpeed = 0.6 + AddGib = Gib + GibParticle = MOPixel + CopyOf = Drop Oil + Count = 15 + Spread = 2.25 + MaxVelocity = 10 + MinVelocity = 1 + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Gib Joint Small H + Count = 1 + Spread = 2.25 + MaxVelocity = 10 + MinVelocity = 1 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Rust Tiny A + Count = 1 + Spread = 2.25 + MaxVelocity = 15 + MinVelocity = 5 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Rust Micro A + Count = 4 + Spread = 2.25 + MaxVelocity = 15 + MinVelocity = 5 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Grey Tiny A + Count = 1 + Spread = 2.25 + MaxVelocity = 15 + MinVelocity = 5 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Grey Micro A + Count = 2 + Spread = 2.25 + MaxVelocity = 15 + MinVelocity = 5 + GibImpulseLimit = 1000 GibWoundLimit = 15 AddActor = Leg - CopyOf = Imperatus All Purpose Robot BG Leg + CopyOf = Imperatus Combat Robot FG Leg PresetName = Imperatus Combat Robot BG Leg - EntryWound = AEmitter - CopyOf = Dent Metal Light - ExitWound = AEmitter - CopyOf = Leaking Machinery Partial - GibWoundLimit = 15 + SpriteFile = ContentFile + FilePath = Imperatus.rte/Actors/Infantry/Combat/LegBG.png + Foot = Attachable + CopyOf = Imperatus All Purpose Robot BG Foot AddActor = AHuman @@ -246,20 +418,18 @@ AddActor = AHuman Description = A stronger version of the All Purpose Robot. This Imperatus frame is a walking tank, capable of withstanding heavy fire without shutting down at the cost of lower jetpack power output. AddToGroup = Actors AddToGroup = Actors - Heavy - Mass = 50 + Mass = 60 GoldValue = 200 HitsMOs = 1 GetsHitByMOs = 1 ScriptPath = Base.rte/AI/HumanAI.lua ScriptPath = Imperatus.rte/Actors/Shared/Robot.lua - AddCustomValue = NumberValue - InputLagMS = 120 SpriteFile = ContentFile FilePath = Imperatus.rte/Actors/Infantry/Combat/CombatBody.png FrameCount = 1 SpriteOffset = Vector X = -8 - Y = -18 + Y = -16 EntryWound = AEmitter CopyOf = Dent Metal ExitWound = AEmitter @@ -267,13 +437,13 @@ AddActor = AHuman AtomGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Military Stuff + CopyOf = Armoured Military Stuff Resolution = 4 Depth = 0 DeepGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Military Stuff + CopyOf = Armoured Military Stuff Resolution = 6 Depth = 6 DeepCheck = 0 @@ -284,9 +454,9 @@ AddActor = AHuman DeathSound = SoundContainer CopyOf = Robot Death DeviceSwitchSound = SoundContainer - CopyOf = Device Switch + CopyOf = Robot Stride Health = 100 - ImpulseDamageThreshold = 3500 + ImpulseDamageThreshold = 3600 AimDistance = 30 SharpAimDelay = 300 Perceptiveness = 0.8 @@ -294,18 +464,25 @@ AddActor = AHuman HolsterOffset = Vector X = -6 Y = -10 + AddAttachable = Attachable + CopyOf = Imperatus Combat Robot Chest Plate + ParentOffset = Vector + X = 4 + Y = -11 Head = Attachable CopyOf = Imperatus Combat Robot Head ParentOffset = Vector X = -1 Y = -16 + LookToAimRatio = 0.3 Jetpack = AEmitter CopyOf = Imperatus Jetpack ParentOffset = Vector - X = -5 - Y = 2 + X = -6 + Y = -6 DrawAfterParent = 0 JumpTime = 1.0 + JumpAngleRange = 0.07 FGArm = Arm CopyOf = Imperatus Combat Robot FG Arm ParentOffset = Vector @@ -326,11 +503,13 @@ AddActor = AHuman ParentOffset = Vector X = 2 Y = 2 +/* AddAttachable = Attachable CopyOf = Imperatus Combat Robot Backpack ParentOffset = Vector X = -8 Y = -10 +*/ HandGroup = AtomGroup CopyOf = Human Hand FGFootGroup = AtomGroup @@ -355,9 +534,13 @@ AddActor = AHuman X = 7 Y = 17 WalkLimbPath = LimbPath - CopyOf = Robot Walk Path + CopyOf = Imperatus Robot Walk Path + NormalTravelSpeed = 2 CrouchLimbPath = LimbPath - CopyOf = Robot Crouch Path + CopyOf = Human Crouch Path + CrouchLimbPathBG = LimbPath + CopyOf = Human Crouch Path BG + CrouchRotAngleTarget = -0.4 CrawlLimbPath = LimbPath CopyOf = Robot Crawl Path ArmCrawlLimbPath = LimbPath @@ -438,5 +621,5 @@ AddActor = AHuman Spread = 2.25 MaxVelocity = 10 MinVelocity = 1 - GibImpulseLimit = 4100 + GibImpulseLimit = 4200 GibWoundLimit = 35 \ No newline at end of file diff --git a/Imperatus.rte/Actors/Infantry/Combat/HeadB000.png b/Imperatus.rte/Actors/Infantry/Combat/HeadB000.png index 79a0f5b68..daa972871 100644 Binary files a/Imperatus.rte/Actors/Infantry/Combat/HeadB000.png and b/Imperatus.rte/Actors/Infantry/Combat/HeadB000.png differ diff --git a/Imperatus.rte/Actors/Infantry/Combat/HeadB001.png b/Imperatus.rte/Actors/Infantry/Combat/HeadB001.png index dca53c78c..2cbf3354f 100644 Binary files a/Imperatus.rte/Actors/Infantry/Combat/HeadB001.png and b/Imperatus.rte/Actors/Infantry/Combat/HeadB001.png differ diff --git a/Imperatus.rte/Actors/Infantry/Combat/LegBG000.png b/Imperatus.rte/Actors/Infantry/Combat/LegBG000.png new file mode 100644 index 000000000..a064295fa Binary files /dev/null and b/Imperatus.rte/Actors/Infantry/Combat/LegBG000.png differ diff --git a/Imperatus.rte/Actors/Infantry/Combat/LegBG001.png b/Imperatus.rte/Actors/Infantry/Combat/LegBG001.png new file mode 100644 index 000000000..030a24b06 Binary files /dev/null and b/Imperatus.rte/Actors/Infantry/Combat/LegBG001.png differ diff --git a/Imperatus.rte/Actors/Infantry/Combat/LegBG002.png b/Imperatus.rte/Actors/Infantry/Combat/LegBG002.png new file mode 100644 index 000000000..7562b6c9d Binary files /dev/null and b/Imperatus.rte/Actors/Infantry/Combat/LegBG002.png differ diff --git a/Imperatus.rte/Actors/Infantry/Combat/LegBG003.png b/Imperatus.rte/Actors/Infantry/Combat/LegBG003.png new file mode 100644 index 000000000..8312c4e2a Binary files /dev/null and b/Imperatus.rte/Actors/Infantry/Combat/LegBG003.png differ diff --git a/Imperatus.rte/Actors/Infantry/Combat/LegBG004.png b/Imperatus.rte/Actors/Infantry/Combat/LegBG004.png new file mode 100644 index 000000000..dace06976 Binary files /dev/null and b/Imperatus.rte/Actors/Infantry/Combat/LegBG004.png differ diff --git a/Imperatus.rte/Actors/Infantry/Combat/LegBG005.png b/Imperatus.rte/Actors/Infantry/Combat/LegBG005.png new file mode 100644 index 000000000..c24b57df1 Binary files /dev/null and b/Imperatus.rte/Actors/Infantry/Combat/LegBG005.png differ diff --git a/Imperatus.rte/Actors/Infantry/Combat/LegBG006.png b/Imperatus.rte/Actors/Infantry/Combat/LegBG006.png new file mode 100644 index 000000000..b9a01cdb9 Binary files /dev/null and b/Imperatus.rte/Actors/Infantry/Combat/LegBG006.png differ diff --git a/Imperatus.rte/Actors/Infantry/Combat/LegFG000.png b/Imperatus.rte/Actors/Infantry/Combat/LegFG000.png new file mode 100644 index 000000000..8013a333b Binary files /dev/null and b/Imperatus.rte/Actors/Infantry/Combat/LegFG000.png differ diff --git a/Imperatus.rte/Actors/Infantry/Combat/LegFG001.png b/Imperatus.rte/Actors/Infantry/Combat/LegFG001.png new file mode 100644 index 000000000..dc916f139 Binary files /dev/null and b/Imperatus.rte/Actors/Infantry/Combat/LegFG001.png differ diff --git a/Imperatus.rte/Actors/Infantry/Combat/LegFG002.png b/Imperatus.rte/Actors/Infantry/Combat/LegFG002.png new file mode 100644 index 000000000..55468dff9 Binary files /dev/null and b/Imperatus.rte/Actors/Infantry/Combat/LegFG002.png differ diff --git a/Imperatus.rte/Actors/Infantry/Combat/LegFG003.png b/Imperatus.rte/Actors/Infantry/Combat/LegFG003.png new file mode 100644 index 000000000..e05ba1b64 Binary files /dev/null and b/Imperatus.rte/Actors/Infantry/Combat/LegFG003.png differ diff --git a/Imperatus.rte/Actors/Infantry/Combat/LegFG004.png b/Imperatus.rte/Actors/Infantry/Combat/LegFG004.png new file mode 100644 index 000000000..de2e9e8ef Binary files /dev/null and b/Imperatus.rte/Actors/Infantry/Combat/LegFG004.png differ diff --git a/Imperatus.rte/Actors/Infantry/Combat/LegFG005.png b/Imperatus.rte/Actors/Infantry/Combat/LegFG005.png new file mode 100644 index 000000000..0efd963cc Binary files /dev/null and b/Imperatus.rte/Actors/Infantry/Combat/LegFG005.png differ diff --git a/Imperatus.rte/Actors/Infantry/Combat/LegFG006.png b/Imperatus.rte/Actors/Infantry/Combat/LegFG006.png new file mode 100644 index 000000000..6ffac4e59 Binary files /dev/null and b/Imperatus.rte/Actors/Infantry/Combat/LegFG006.png differ diff --git a/Imperatus.rte/Actors/Shared.ini b/Imperatus.rte/Actors/Shared.ini index 0860f56ba..20ca67ca8 100644 --- a/Imperatus.rte/Actors/Shared.ini +++ b/Imperatus.rte/Actors/Shared.ini @@ -5,6 +5,12 @@ AddEffect = AEmitter CopyOf = Jetpack PresetName = Imperatus Jetpack + SpriteFile = ContentFile + FilePath = Imperatus.rte/Actors/Shared/Jetpack.png + FrameCount = 1 + SpriteOffset = Vector + X = -4 + Y = -8 AddEmission = Emission EmittedParticle = MOSParticle CopyOf = Fire Puff Small @@ -13,9 +19,9 @@ AddEffect = AEmitter LifeTime = 120 AirResistance = 0.1 Spread = 0.1 - MaxVelocity = 25 + MaxVelocity = 20 MinVelocity = 10 LifeVariation = 0.20 ParticlesPerMinute = 7200 - BurstSize = 10 + BurstSize = 8 BurstSpacing = 200 \ No newline at end of file diff --git a/Imperatus.rte/Actors/Shared/Jetpack.png b/Imperatus.rte/Actors/Shared/Jetpack.png new file mode 100644 index 000000000..eb14f711d Binary files /dev/null and b/Imperatus.rte/Actors/Shared/Jetpack.png differ diff --git a/Imperatus.rte/Actors/Shared/Robot.lua b/Imperatus.rte/Actors/Shared/Robot.lua index b4057388f..08c4f6007 100644 --- a/Imperatus.rte/Actors/Shared/Robot.lua +++ b/Imperatus.rte/Actors/Shared/Robot.lua @@ -1,46 +1,17 @@ function Create(self) - self.inputLagMS = self:NumberValueExists("InputLagMS") and self:GetNumberValue("InputLagMS") or 100; + self.walkSpeed = self:GetLimbPathSpeed(1); + self.moveTimer = Timer(); + self.stopTimer = Timer(); end function Update(self) - if self.controller:IsState(Controller.MOVE_RIGHT) then - if self.moveTimer then - if self.moveTimer:IsPastSimMS(self.inputLagMS) then - self.moveTo = 1; - self.moveTimer:Reset(); - else - self.controller:SetState(Controller.MOVE_RIGHT, false); - end - else - self.moveTimer = Timer(); - self.controller:SetState(Controller.MOVE_RIGHT, self.HFlipped); - end + local walkSpeedScalar = 2.3; + local legs = {self.FGLeg, self.BGLeg}; + for _, leg in pairs(legs) do + walkSpeedScalar = walkSpeedScalar - (leg and leg.Frame/leg.FrameCount or 1.1); end - if self.controller:IsState(Controller.MOVE_LEFT) then - if self.moveTimer then - if self.moveTimer:IsPastSimMS(self.inputLagMS) then - self.moveTo = -1; - self.moveTimer:Reset(); - else - self.controller:SetState(Controller.MOVE_LEFT, false); - end - else - self.moveTimer = Timer(); - self.controller:SetState(Controller.MOVE_LEFT, not self.HFlipped); - end - end - if self.moveTo then - self.controller:SetState((self.moveTo == 1 and Controller.MOVE_RIGHT or Controller.MOVE_LEFT), true); - if self.moveTimer then - if self.moveTimer:IsPastSimMS(self.inputLagMS) then - self.moveTimer = nil; - self.moveTo = nil; - end - else - self.moveTimer = Timer(); - end - end - if self.Head then - local inheritAngleRatio = 4; - self.Head.RotAngle = (self.Head.RotAngle * inheritAngleRatio + self.RotAngle)/(1 + inheritAngleRatio); + self:SetLimbPathSpeed(1, self.walkSpeed * walkSpeedScalar); + if self.Jetpack then + self.Jetpack.Throttle = self.JetTimeLeft/self.JetTimeTotal - 0.5; + self.Jetpack.FlashScale = 1 + self.Jetpack.Throttle; end end \ No newline at end of file diff --git a/Imperatus.rte/Devices/Weapons/Banshee/Banshee.ini b/Imperatus.rte/Devices/Weapons/Banshee/Banshee.ini index e12a69c8c..3c8ecc5ba 100644 --- a/Imperatus.rte/Devices/Weapons/Banshee/Banshee.ini +++ b/Imperatus.rte/Devices/Weapons/Banshee/Banshee.ini @@ -183,6 +183,8 @@ AddDevice = HDFirearm ScriptPath = Base.rte/Devices/Shared/Scripts/RecoilTilt.lua AddCustomValue = NumberValue RecoilAngleVariation = 0.1 + AddCustomValue = NumberValue + RecoilRevertSpeed = 0.5 SpriteFile = ContentFile FilePath = Imperatus.rte/Devices/Weapons/Banshee/Banshee.png FrameCount = 2 diff --git a/Imperatus.rte/Devices/Weapons/Banshee/Banshee000.png b/Imperatus.rte/Devices/Weapons/Banshee/Banshee000.png index 41e97ae36..ad3307dfe 100644 Binary files a/Imperatus.rte/Devices/Weapons/Banshee/Banshee000.png and b/Imperatus.rte/Devices/Weapons/Banshee/Banshee000.png differ diff --git a/Imperatus.rte/Devices/Weapons/Banshee/Banshee001.png b/Imperatus.rte/Devices/Weapons/Banshee/Banshee001.png index dad5c44cb..5d7fa3d7f 100644 Binary files a/Imperatus.rte/Devices/Weapons/Banshee/Banshee001.png and b/Imperatus.rte/Devices/Weapons/Banshee/Banshee001.png differ diff --git a/Imperatus.rte/Devices/Weapons/Bulldog/Bulldog.ini b/Imperatus.rte/Devices/Weapons/Bulldog/Bulldog.ini index 14d665441..9d2266dbd 100644 --- a/Imperatus.rte/Devices/Weapons/Bulldog/Bulldog.ini +++ b/Imperatus.rte/Devices/Weapons/Bulldog/Bulldog.ini @@ -188,7 +188,7 @@ AddDevice = HDFirearm AddSound = ContentFile FilePath = Imperatus.rte/Devices/Weapons/Bulldog/Sounds/SpinSound.flac LoopSetting = -1 - RateOfFire = 700 + RateOfFire = 600 ReloadTime = 3800 FullAuto = 1 FireIgnoresThis = 1 diff --git a/Imperatus.rte/Devices/Weapons/Bullpup/Bullpup.ini b/Imperatus.rte/Devices/Weapons/Bullpup/Bullpup.ini index ae5bf487e..0ef808647 100644 --- a/Imperatus.rte/Devices/Weapons/Bullpup/Bullpup.ini +++ b/Imperatus.rte/Devices/Weapons/Bullpup/Bullpup.ini @@ -144,7 +144,7 @@ AddDevice = HDFirearm JointStiffness = 0.5 JointOffset = Vector X = -5 - Y = 2 + Y = 3 DrawAfterParent = 0 StanceOffset = Vector X = 4 diff --git a/Imperatus.rte/Devices/Weapons/Bullpup/Bullpup000.png b/Imperatus.rte/Devices/Weapons/Bullpup/Bullpup000.png index 069b204f6..0c89b8929 100644 Binary files a/Imperatus.rte/Devices/Weapons/Bullpup/Bullpup000.png and b/Imperatus.rte/Devices/Weapons/Bullpup/Bullpup000.png differ diff --git a/Imperatus.rte/Devices/Weapons/Bullpup/Bullpup001.png b/Imperatus.rte/Devices/Weapons/Bullpup/Bullpup001.png index 4fa4ac904..e8a2c3783 100644 Binary files a/Imperatus.rte/Devices/Weapons/Bullpup/Bullpup001.png and b/Imperatus.rte/Devices/Weapons/Bullpup/Bullpup001.png differ diff --git a/Imperatus.rte/Devices/Weapons/Chunker/Chunker.ini b/Imperatus.rte/Devices/Weapons/Chunker/Chunker.ini index 2f22b8645..755bc658b 100644 --- a/Imperatus.rte/Devices/Weapons/Chunker/Chunker.ini +++ b/Imperatus.rte/Devices/Weapons/Chunker/Chunker.ini @@ -10,7 +10,7 @@ AddAmmo = Round ScriptPath = Base.rte/Devices/Shared/Scripts/ShotgunPellet.lua Mass = 0.038 RestThreshold = 500 - LifeTime = 1000 + LifeTime = 700 AirResistance = 0.03 Sharpness = 55 HitsMOs = 1 @@ -138,6 +138,7 @@ AddDevice = HDFirearm SharpShakeRange = 3 NoSupportFactor = 2 ParticleSpreadRange = 10 + ShellEjectAngle = 120 ShellSpreadRange = 8 ShellAngVelRange = 2 MuzzleOffset = Vector diff --git a/Imperatus.rte/Devices/Weapons/Devastator/Devastator.ini b/Imperatus.rte/Devices/Weapons/Devastator/Devastator.ini index b42b101fc..419ad6e1d 100644 --- a/Imperatus.rte/Devices/Weapons/Devastator/Devastator.ini +++ b/Imperatus.rte/Devices/Weapons/Devastator/Devastator.ini @@ -49,10 +49,9 @@ AddEffect = MOSRotating InheritsVel = 0 AddGib = Gib GibParticle = MOPixel - CopyOf = Grenade Fragment Gray - PresetName = Grenade Fragment Gray Short + CopyOf = Grenade Fragment Gray Short LifeTime = 170 - Count = 25 + Count = 20 Spread = 3.14 MinVelocity = 75 MaxVelocity = 100 @@ -60,19 +59,26 @@ AddEffect = MOSRotating LifeVariation = 0.20 AddGib = Gib GibParticle = MOPixel - CopyOf = Grenade Fragment Yellow - PresetName = Grenade Fragment Yellow Short - LifeTime = 100 - Count = 25 + CopyOf = Grenade Fragment Yellow Short + Count = 20 Spread = 3.14 MinVelocity = 90 MaxVelocity = 120 InheritsVel = 0 LifeVariation = 0.20 + AddGib = Gib + GibParticle = MOPixel + CopyOf = Grenade Fragment Scripted + Count = 20 + Spread = 3.14 + MinVelocity = 80 + MaxVelocity = 110 + InheritsVel = 0 + LifeVariation = 0.20 AddGib = Gib GibParticle = MOPixel CopyOf = Air Blast - Count = 50 + Count = 60 Spread = 3.14 MinVelocity = 80 MaxVelocity = 90 @@ -179,7 +185,7 @@ AddAmmo = Magazine AddDevice = HDFirearm PresetName = Devastator CN-72 - Description = A devastating anti-air weapon, it can take out a dropship from a nice distance easily with little aim. The proximity fuse on the flak shells insure that they explode at the right distance for maximum damage. + Description = A devastating anti-air weapon that can take out a dropship from a distance easily with little effort. The proximity fuse on the flak shells ensures that they explode at the right distance for maximum effectiveness. AddToGroup = Weapons AddToGroup = Weapons - Primary AddToGroup = Weapons - Heavy @@ -228,7 +234,7 @@ AddDevice = HDFirearm SupportOffset = Vector X = -2 Y = 5 - SharpLength = 330 + SharpLength = 350 Magazine = Magazine CopyOf = Magazine Imperatus Flak Cannon Flash = Attachable diff --git a/Imperatus.rte/Devices/Weapons/Devastator/Devastator000.png b/Imperatus.rte/Devices/Weapons/Devastator/Devastator000.png index efe73a12d..ff935372f 100644 Binary files a/Imperatus.rte/Devices/Weapons/Devastator/Devastator000.png and b/Imperatus.rte/Devices/Weapons/Devastator/Devastator000.png differ diff --git a/Imperatus.rte/Devices/Weapons/Devastator/Devastator001.png b/Imperatus.rte/Devices/Weapons/Devastator/Devastator001.png index 2629c3faa..d1911b2bf 100644 Binary files a/Imperatus.rte/Devices/Weapons/Devastator/Devastator001.png and b/Imperatus.rte/Devices/Weapons/Devastator/Devastator001.png differ diff --git a/Imperatus.rte/Devices/Weapons/Devastator/FlakShell.lua b/Imperatus.rte/Devices/Weapons/Devastator/FlakShell.lua index 6aa78c4b1..7e5d92d85 100644 --- a/Imperatus.rte/Devices/Weapons/Devastator/FlakShell.lua +++ b/Imperatus.rte/Devices/Weapons/Devastator/FlakShell.lua @@ -26,7 +26,7 @@ function Update(self) local moCheck = SceneMan:GetMOIDPixel(checkPos.X, checkPos.Y); if moCheck ~= rte.NoMOID then local actor = MovableMan:GetMOFromID(MovableMan:GetMOFromID(moCheck).RootID); - if MovableMan:IsActor(actor) and actor.Team ~= self.Team then + if MovableMan:IsActor(actor) and actor.Team ~= self.Team and actor.Radius > radius then self:GibThis(); break; end diff --git a/Imperatus.rte/Devices/Weapons/Marauder/Marauder.ini b/Imperatus.rte/Devices/Weapons/Marauder/Marauder.ini index 1971e6b82..4786b4817 100644 --- a/Imperatus.rte/Devices/Weapons/Marauder/Marauder.ini +++ b/Imperatus.rte/Devices/Weapons/Marauder/Marauder.ini @@ -23,19 +23,13 @@ AddAmmo = MOSRotating AtomGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Default - PresetName = Revolver Cannon Metal - Bounce = 0 - Friction = 1 + CopyOf = Mangled Metal Resolution = 1 Depth = 0 DeepGroup = AtomGroup AutoGenerate = 1 Material = Material - CopyOf = Default - PresetName = Revolver Cannon Metal - Bounce = 0 - Friction = 1 + CopyOf = Mangled Metal Resolution = 1 Depth = 0 DeepCheck = 0 @@ -61,10 +55,6 @@ AddAmmo = MOSRotating PresetName = Shrapnel Revolver Cannon Mass = 0.1 LifeTime = 25 - Atom = Atom - Material = Material - CopyOf = Bullet Metal - TrailLength = 0 Count = 5 MinVelocity = 45 MaxVelocity = 65 diff --git a/Imperatus.rte/Devices/Weapons/Slugger/Slugger.ini b/Imperatus.rte/Devices/Weapons/Slugger/Slugger.ini index 515f433c3..ec922384f 100644 --- a/Imperatus.rte/Devices/Weapons/Slugger/Slugger.ini +++ b/Imperatus.rte/Devices/Weapons/Slugger/Slugger.ini @@ -6,18 +6,23 @@ AddAmmo = MOSRotating PresetName = Imperatus Slugger Shot Mass = 2 OrientToVel = 0.8 - Sharpness = 3 HitsMOs = 1 GetsHitByMOs = 0 ScriptPath = Base.rte/Scripts/Shared/SmokeTrail.lua AddCustomValue = NumberValue - SmokeTrailLifeTime = 250 + SmokeTrailLifeTime = 400 + AddCustomValue = NumberValue + SmokeTrailTwirl = 2 SpriteFile = ContentFile - FilePath = Imperatus.rte/Devices/Weapons/Devastator/DevastatorRound.png + FilePath = Imperatus.rte/Devices/Weapons/Slugger/SluggerShot.png FrameCount = 1 SpriteOffset = Vector - X = -3 + X = -2 Y = -2 + EntryWound = AEmitter + CopyOf = Dent Metal + ExitWound = AEmitter + CopyOf = Dent Metal AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -30,28 +35,35 @@ AddAmmo = MOSRotating CopyOf = Bullet Metal Resolution = 4 Depth = 1 - DeepCheck = 0 + DeepCheck = 1 AddGib = Gib GibParticle = MOSParticle CopyOf = Fire Puff Small Count = 15 MinVelocity = 1 MaxVelocity = 3 - LifeVariation = 0.10 InheritsVel = 0 + LifeVariation = 0.20 AddGib = Gib GibParticle = MOSParticle - CopyOf = Side Thruster Blast Ball 1 + CopyOf = Flame Smoke 2 Glow + PresetName = Slugger Grenade Smoke + LifeTime = 400 + AirResistance = 0.1 + AirThreshold = 3 + GlobalAccScalar = -0.5 + EffectStopTime = 125 + EffectAlwaysShows = 0 Count = 25 Spread = 3.14 MaxVelocity = 12 MinVelocity = 2 InheritsVel = 0 + LifeVariation = 0.20 AddGib = Gib GibParticle = MOPixel CopyOf = Air Blast Scripted PresetName = Slugger Air Blast - PinStrength = 10 ScreenEffect = ContentFile FilePath = Base.rte/Effects/Glows/YellowBig.png EffectStopTime = 100 @@ -59,14 +71,22 @@ AddAmmo = MOSRotating EffectStopStrength = 0.0 EffectAlwaysShows = 1 Spread = 3.14 - MaxVelocity = 30 - MinVelocity = 30 + MaxVelocity = 25 + MinVelocity = 25 + InheritsVel = 0 + AddGib = Gib + GibParticle = MOPixel + CopyOf = Grenade Fragment Scripted + LifeVariation = 0.25 + Count = 15 + MinVelocity = 25 + MaxVelocity = 50 InheritsVel = 0 AddGib = Gib GibParticle = MOPixel CopyOf = Grenade Fragment Yellow LifeVariation = 0.25 - Count = 35 + Count = 15 MinVelocity = 25 MaxVelocity = 50 InheritsVel = 0 diff --git a/Imperatus.rte/Devices/Weapons/Slugger/SluggerShot.png b/Imperatus.rte/Devices/Weapons/Slugger/SluggerShot.png new file mode 100644 index 000000000..ce5b3b475 Binary files /dev/null and b/Imperatus.rte/Devices/Weapons/Slugger/SluggerShot.png differ diff --git a/Missions.rte/Scenes/Maginot Mission.ini b/Missions.rte/Scenes/Maginot Mission.ini index 2050aa6ad..972600d01 100644 --- a/Missions.rte/Scenes/Maginot Mission.ini +++ b/Missions.rte/Scenes/Maginot Mission.ini @@ -1114,10 +1114,8 @@ AddScene = Scene Position = Vector X = 1796 Y = 1078 - HFlipped = 0 Team = -1 - Health = 100 - MaxHealth = 100 + Status = 2 PlaceSceneObject = TerrainObject CopyOf = Base.rte/Small H Concrete Block Position = Vector diff --git a/Ronin.rte/Actors/Brains/Commander/Head001.png b/Ronin.rte/Actors/Brains/Commander/Head001.png index a6aebaedd..225a2073e 100644 Binary files a/Ronin.rte/Actors/Brains/Commander/Head001.png and b/Ronin.rte/Actors/Brains/Commander/Head001.png differ diff --git a/Ronin.rte/Actors/Brains/Commander/Head002.png b/Ronin.rte/Actors/Brains/Commander/Head002.png index 2240d54e5..cff8c7468 100644 Binary files a/Ronin.rte/Actors/Brains/Commander/Head002.png and b/Ronin.rte/Actors/Brains/Commander/Head002.png differ diff --git a/Ronin.rte/Actors/Brains/Commander/Head004.png b/Ronin.rte/Actors/Brains/Commander/Head004.png index f0662bbca..a7fcc8c50 100644 Binary files a/Ronin.rte/Actors/Brains/Commander/Head004.png and b/Ronin.rte/Actors/Brains/Commander/Head004.png differ diff --git a/Ronin.rte/Actors/Brains/Commander/Head005.png b/Ronin.rte/Actors/Brains/Commander/Head005.png index b1f3bc3ff..6c1fc4210 100644 Binary files a/Ronin.rte/Actors/Brains/Commander/Head005.png and b/Ronin.rte/Actors/Brains/Commander/Head005.png differ diff --git a/Ronin.rte/Actors/Brains/Commander/RoninCommander.ini b/Ronin.rte/Actors/Brains/Commander/RoninCommander.ini index 23d53126f..d88b9a4f6 100644 --- a/Ronin.rte/Actors/Brains/Commander/RoninCommander.ini +++ b/Ronin.rte/Actors/Brains/Commander/RoninCommander.ini @@ -76,7 +76,7 @@ AddActor = AHuman AimDistance = 30 Perceptiveness = 1 CharHeight = 100 - SharpAimDelay = 1 + SharpAimDelay = 100 ThrowPrepTime = 750 HolsterOffset = Vector X = -6 @@ -112,6 +112,7 @@ AddActor = AHuman ParentOffset = Vector X = -1 Y = -5 + FGArmFlailScalar = -0.15 BGArm = Arm CopyOf = Ronin Soldier Arm BG A PresetName = Ronin Commander Arm BG A @@ -121,6 +122,7 @@ AddActor = AHuman ParentOffset = Vector X = 4 Y = -7 + BGArmFlailScalar = 0.3 FGLeg = Leg CopyOf = Ronin Soldier Leg FG A PresetName = Ronin Commander Leg FG A @@ -177,13 +179,15 @@ AddActor = AHuman StartOffset = Vector X = 6 Y = 17.5 + StandRotAngleTarget = -0.1 WalkLimbPath = LimbPath - CopyOf = Human Walk Path - SlowTravelSpeed = 1.9 - NormalTravelSpeed = 3.7 - FastTravelSpeed = 4.9 + CopyOf = Human Run Path + WalkRotAngleTarget = -0.3 CrouchLimbPath = LimbPath CopyOf = Human Crouch Path + CrouchLimbPathBG = LimbPath + CopyOf = Human Crouch Path BG + CrouchRotAngleTarget = -0.8 CrawlLimbPath = LimbPath CopyOf = Human Crawl Path ArmCrawlLimbPath = LimbPath diff --git a/Ronin.rte/Actors/Brains/Commander/RoninCommander.lua b/Ronin.rte/Actors/Brains/Commander/RoninCommander.lua index fb7839ec4..b2c77f259 100644 --- a/Ronin.rte/Actors/Brains/Commander/RoninCommander.lua +++ b/Ronin.rte/Actors/Brains/Commander/RoninCommander.lua @@ -15,6 +15,11 @@ function Create(self) if self.face == 2 then self.Head:AddAttachable(CreateAttachable("Ronin Brunette Ponytail")); end + else + self.face = self:GetNumberValue("Identity"); + if self.Head then + self.Head.Frame = self.face; + end end end function Update(self) @@ -35,7 +40,7 @@ function Update(self) if self.Status == Actor.UNSTABLE then if not crouching then local motion = self.Vel.Magnitude * 0.5 + math.abs(self.AngularVel); - if self.AngularVel ~= 0 then + if motion > 1 then self.AngularVel = self.AngularVel * (1 - 0.1/motion); end if self.tapTimer:IsPastSimMS(500) and math.cos(self.RotAngle) > 0.9 and motion < 20 then diff --git a/Ronin.rte/Actors/Infantry/RoninHeavy/HelmetCrab.png b/Ronin.rte/Actors/Infantry/RoninHeavy/HelmetCrab.png new file mode 100644 index 000000000..b3e800a0d Binary files /dev/null and b/Ronin.rte/Actors/Infantry/RoninHeavy/HelmetCrab.png differ diff --git a/Ronin.rte/Actors/Infantry/RoninHeavy/RoninHeavy.ini b/Ronin.rte/Actors/Infantry/RoninHeavy/RoninHeavy.ini index 9f69b820b..878cf7d0a 100644 --- a/Ronin.rte/Actors/Infantry/RoninHeavy/RoninHeavy.ini +++ b/Ronin.rte/Actors/Infantry/RoninHeavy/RoninHeavy.ini @@ -438,6 +438,97 @@ AddEffect = Attachable CopyOf = Cloth Armor Impact +AddEffect = Attachable + PresetName = Ronin Crab Helmet + Mass = 5 + HitsMOs = 0 + GetsHitByMOs = 1 + CollidesWithTerrainWhileAttached = 1 + SpriteFile = ContentFile + FilePath = Ronin.rte/Actors/Infantry/RoninHeavy/HelmetCrab.png + FrameCount = 1 + SpriteOffset = Vector + X = -7 + Y = -6 + AngularVel = 6 + EntryWound = AEmitter + CopyOf = Wound Bone Entry + ExitWound = AEmitter + CopyOf = Wound Bone Exit + AtomGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Shelled Flesh + Resolution = 4 + Depth = 0 + DeepCheck = 0 + JointStrength = 60 + JointStiffness = 0.1 + JointOffset = Vector + X = 0 + Y = 0 + ParentOffset = Vector + X = 0 + Y = -6 + DrawAfterParent = 1 + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Gib Bone Small E + Offset = Vector + X = 3 + Y = 1 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Grey Micro A + Offset = Vector + X = -3 + Y = 2 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Panel White Micro A + Offset = Vector + X = 3 + Y = 2 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Panel Orange Micro A + Offset = Vector + X = 1 + Y = 0 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Panel Red Micro A + Offset = Vector + X = -1 + Y = -1 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Bone Micro A + Offset = Vector + X = 3 + Y = -3 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Panel Red Tiny A + Offset = Vector + X = 1 + Y = -2 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Bone Tiny A + Offset = Vector + X = -1 + Y = -3 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Panel Orange Micro A + Offset = Vector + X = -5 + Y = 1 + GibImpulseLimit = 1300 + GibWoundLimit = 5 + + AddEffect = Attachable PresetName = Ronin Chest Plate Mass = 3 @@ -609,6 +700,7 @@ AddActor = AHuman ParentOffset = Vector X = 0 Y = -8 + LookToAimRatio = 0.6 Jetpack = AEmitter CopyOf = Ronin Jetpack ParentOffset = Vector @@ -625,7 +717,7 @@ AddActor = AHuman CopyOf = Ronin Heavy Arm BG A ParentOffset = Vector X = 4 - Y = -7 + Y = -6 FGLeg = Leg CopyOf = Ronin Heavy Leg FG A ParentOffset = Vector @@ -651,8 +743,12 @@ AddActor = AHuman SlowTravelSpeed = 1.5 NormalTravelSpeed = 3.0 FastTravelSpeed = 4.5 + WalkRotAngleTarget = -0.1 CrouchLimbPath = LimbPath CopyOf = Human Crouch Path + CrouchLimbPathBG = LimbPath + CopyOf = Human Crouch Path BG + CrouchRotAngleTarget = -0.6 CrawlLimbPath = LimbPath CopyOf = Human Crawl Path ArmCrawlLimbPath = LimbPath diff --git a/Ronin.rte/Actors/Infantry/RoninLight/Hair.lua b/Ronin.rte/Actors/Infantry/RoninLight/Hair.lua index ee1e63ebc..1d3ff8133 100644 --- a/Ronin.rte/Actors/Infantry/RoninLight/Hair.lua +++ b/Ronin.rte/Actors/Infantry/RoninLight/Hair.lua @@ -3,4 +3,7 @@ function Update(self) local gravity = self.Vel - SceneMan.GlobalAcc * rte.PxTravelledPerFrame; self.RotAngle = gravity.AbsRadAngle; self.Frame = gravity.Magnitude > 5 and 0 or 1; + if not IsActor(self:GetRootParent()) then + self.ToDelete = true; + end end \ No newline at end of file diff --git a/Ronin.rte/Actors/Infantry/RoninLight/RoninLight.ini b/Ronin.rte/Actors/Infantry/RoninLight/RoninLight.ini index 45f6112e0..b24eac875 100644 --- a/Ronin.rte/Actors/Infantry/RoninLight/RoninLight.ini +++ b/Ronin.rte/Actors/Infantry/RoninLight/RoninLight.ini @@ -9,6 +9,7 @@ AddEffect = Attachable AirResistance = 0.05 HitsMOs = 0 GetsHitByMOs = 0 + DeleteWhenRemovedFromParent = 1 ScriptPath = Ronin.rte/Actors/Infantry/RoninLight/Hair.lua SpriteFile = ContentFile FilePath = Ronin.rte/Actors/Infantry/RoninLight/HairBlonde.png @@ -41,6 +42,7 @@ AddEffect = Attachable AirResistance = 0.05 HitsMOs = 0 GetsHitByMOs = 0 + DeleteWhenRemovedFromParent = 1 ScriptPath = Ronin.rte/Actors/Infantry/RoninLight/Hair.lua SpriteFile = ContentFile FilePath = Ronin.rte/Actors/Infantry/RoninLight/HairBlack.png @@ -103,7 +105,7 @@ AddEffect = Attachable JointOffset = Vector X = -2 Y = 5 - GibImpulseLimit = 500 + GibImpulseLimit = 400 GibWoundLimit = 6 GibSound = SoundContainer CopyOf = Flesh Head Gib @@ -343,7 +345,7 @@ AddActor = Arm Y = 1 Count = 1 Spread = 0 - GibImpulseLimit = 250 + GibImpulseLimit = 240 GibWoundLimit = 5 GibSound = SoundContainer CopyOf = Flesh Limb Gib @@ -441,7 +443,7 @@ AddActor = Leg JointOffset = Vector X = -5 Y = 2 - DrawAfterParent = 0 + DrawAfterParent = 1 Foot = Attachable CopyOf = Ronin Soldier Foot FG A ParentOffset = Vector @@ -598,7 +600,7 @@ AddActor = AHuman CopyOf = Ronin Head ParentOffset = Vector X = 0 - Y = -8 + Y = -9 Jetpack = AEmitter CopyOf = Ronin Jetpack ParentOffset = Vector @@ -611,11 +613,13 @@ AddActor = AHuman ParentOffset = Vector X = -1 Y = -5 + FGArmFlailScalar = 0.35 BGArm = Arm CopyOf = Ronin Soldier Arm BG A ParentOffset = Vector X = 4 Y = -7 + BGArmFlailScalar = -0.7 FGLeg = Leg CopyOf = Ronin Soldier Leg FG A ParentOffset = Vector @@ -624,7 +628,7 @@ AddActor = AHuman BGLeg = Leg CopyOf = Ronin Soldier Leg BG A ParentOffset = Vector - X = 4 + X = 3 Y = 1 HandGroup = AtomGroup CopyOf = Human Hand @@ -654,8 +658,12 @@ AddActor = AHuman NormalTravelSpeed = 3.4 FastTravelSpeed = 4.8 PushForce = 8000 */ + WalkRotAngleTarget = -0.1 CrouchLimbPath = LimbPath CopyOf = Human Crouch Path + CrouchLimbPathBG = LimbPath + CopyOf = Human Crouch Path BG + CrouchRotAngleTarget = -0.7 CrawlLimbPath = LimbPath CopyOf = Human Crawl Path ArmCrawlLimbPath = LimbPath diff --git a/Ronin.rte/Actors/Infantry/RoninLight/Torso000.png b/Ronin.rte/Actors/Infantry/RoninLight/Torso000.png index 20da00c9e..5ca2ad82f 100644 Binary files a/Ronin.rte/Actors/Infantry/RoninLight/Torso000.png and b/Ronin.rte/Actors/Infantry/RoninLight/Torso000.png differ diff --git a/Ronin.rte/Actors/Shared/RoninSoldier.lua b/Ronin.rte/Actors/Shared/RoninSoldier.lua index ac00b770e..ccd4f4758 100644 --- a/Ronin.rte/Actors/Shared/RoninSoldier.lua +++ b/Ronin.rte/Actors/Shared/RoninSoldier.lua @@ -6,6 +6,7 @@ function Create(self) self.Head.Frame = self.face; end self:SetNumberValue("Identity", self.face); + self:SetGoldValue(self:GetGoldValue(0, 1, 1) * 0.3); else self.face = self:GetNumberValue("Identity"); if self.Head then @@ -18,11 +19,13 @@ function Create(self) local loadoutName = string.gsub(self.PresetName, "Ronin Infantry ", ""); if RoninLoadouts[loadoutName] then local unit = RoninLoadouts[loadoutName]; - -- Pick a random item out of each set of items + --Pick a random item out of each set of items local firearms = {unit["Primary"], unit["Secondary"], unit["Tertiary"]}; for class = 1, #firearms do if firearms[class] then - self:AddInventoryItem(CreateHDFirearm(firearms[class][math.random(#firearms[class])], "Ronin.rte")); + local firearm = CreateHDFirearm(firearms[class][math.random(#firearms[class])], "Ronin.rte"); + firearm:SetGoldValue(firearm:GetGoldValue(0, 1, 1) * 0.6); + self:AddInventoryItem(firearm); end end if unit["Throwable"] then @@ -31,19 +34,17 @@ function Create(self) if unit["Headgear"] and self.Head then self.Head:AddAttachable(CreateAttachable("Ronin ".. unit["Headgear"][math.random(#unit["Headgear"])])); end - if unit["Armor"] then - self:AddAttachable(CreateAttachable("Ronin ".. unit["Armor"][math.random(#unit["Armor"])])); - end + end + elseif math.random() < 0.01 then + local headgear = CreateAttachable("Ronin Crab Helmet", "Ronin.rte"); + if headgear and self.Head then + self.Head:AddAttachable(headgear); end elseif self.PresetName == "Ronin Heavy" then local headgear = CreateAttachable("Ronin ".. RoninLoadouts["Heavy"]["Headgear"][math.random(#RoninLoadouts["Heavy"]["Headgear"])]); if headgear and self.Head then self.Head:AddAttachable(headgear); end - local armor = CreateAttachable("Ronin ".. RoninLoadouts["Heavy"]["Armor"][math.random(#RoninLoadouts["Heavy"]["Armor"])]); - if armor then - self:AddAttachable(armor); - end elseif self.Head then if self.face == 1 then --"Mia" self.Head:AddAttachable(CreateAttachable("Ronin Black Hair")); diff --git a/Ronin.rte/Craft/Rocket/RocketMK1.ini b/Ronin.rte/Craft/Rocket/RocketMK1.ini index f3f58968d..ec4979745 100644 --- a/Ronin.rte/Craft/Rocket/RocketMK1.ini +++ b/Ronin.rte/Craft/Rocket/RocketMK1.ini @@ -74,7 +74,7 @@ AddEffect = AEmitter EmissionsIgnoreThis = 1 BurstScale = 1 BurstTriggered = 1 - BurstSpacing = 100 + BurstSpacing = 200 AddActor = ACRocket @@ -84,9 +84,6 @@ AddActor = ACRocket Mass = 900 MaxInventoryMass = 500 MaxPassengers = 3 - Velocity = Vector - X = 0 - Y = -3 HitsMOs = 1 GetsHitByMOs = 1 ScriptPath = Base.rte/AI/RocketAI.lua @@ -167,7 +164,10 @@ AddActor = ACRocket HatchDelay = 250 HatchOpenSound = SoundContainer AddSound = ContentFile - FilePath = Base.rte/Sounds/Craft/HatchOpen.flac + FilePath = Base.rte/Sounds/Craft/HatchOpen1.flac + HatchCloseSound = SoundContainer + AddSound = ContentFile + FilePath = Base.rte/Sounds/Craft/HatchOpen1.flac AddExit = Exit Offset = Vector X = 15 @@ -184,7 +184,7 @@ AddActor = ACRocket X = -5 Y = 0 Radius = 12 - ExitInterval = 400 + ExitInterval = 450 RaisedGearLimbPath = LimbPath PresetName = Rocket Gear Raised Path StartOffset = Vector diff --git a/Ronin.rte/Devices.ini b/Ronin.rte/Devices.ini index f3a437fbe..a341a185c 100644 --- a/Ronin.rte/Devices.ini +++ b/Ronin.rte/Devices.ini @@ -25,6 +25,7 @@ IncludeFile = Ronin.rte/Devices/Weapons/K98K/K98K.ini IncludeFile = Ronin.rte/Devices/Weapons/DoubleBarreledShotgun/DoubleBarreledShotgun.ini IncludeFile = Ronin.rte/Devices/Weapons/Model590/Model590.ini IncludeFile = Ronin.rte/Devices/Weapons/SPAS12/SPAS12.ini +IncludeFile = Ronin.rte/Devices/Weapons/Stoner63/Stoner63.ini IncludeFile = Ronin.rte/Devices/Weapons/M60/M60.ini IncludeFile = Ronin.rte/Devices/Weapons/M79/M79.ini IncludeFile = Ronin.rte/Devices/Weapons/RPG7/RPG7.ini diff --git a/Ronin.rte/Devices/Explosives/MolotovCocktail/MolotovCocktail.ini b/Ronin.rte/Devices/Explosives/MolotovCocktail/MolotovCocktail.ini index 2186aaead..6435e21a3 100644 --- a/Ronin.rte/Devices/Explosives/MolotovCocktail/MolotovCocktail.ini +++ b/Ronin.rte/Devices/Explosives/MolotovCocktail/MolotovCocktail.ini @@ -6,11 +6,8 @@ AddEffect = MOSRotating PresetName = Molotov Cocktail Explosion Mass = 1 LifeTime = 1 - HitsMOs = 0 - GetsHitByMOs = 0 SpriteFile = ContentFile FilePath = Base.rte/Null.png - FrameCount = 1 AtomGroup = AtomGroup CopyOf = Null AtomGroup AddGib = Gib @@ -80,11 +77,9 @@ AddEffect = MOSRotating MinVelocity = 5 LifeVariation = 0.50 GibSound = SoundContainer - AttenuationStartDistance = 195 - AddSound = ContentFile - FilePath = Ronin.rte/Devices/Explosives/MolotovCocktail/Sounds/Molotov01.flac + AttenuationStartDistance = 180 AddSound = ContentFile - FilePath = Ronin.rte/Devices/Explosives/MolotovCocktail/Sounds/Molotov02.flac + FilePath = Ronin.rte/Devices/Explosives/MolotovCocktail/Sounds/Molotov1.flac AddDevice = TDExplosive @@ -132,13 +127,7 @@ AddDevice = TDExplosive AddSound = ContentFile FilePath = Ronin.rte/Devices/Explosives/MolotovCocktail/Sounds/Light.flac GibSound = SoundContainer - AttenuationStartDistance = 100 - AddSound = ContentFile - FilePath = Base.rte/Sounds/Penetration/GlassImpact1.flac - AddSound = ContentFile - FilePath = Base.rte/Sounds/Penetration/GlassImpact2.flac - AddSound = ContentFile - FilePath = Base.rte/Sounds/Penetration/GlassImpact3.flac + CopyOf = Bottle Break StanceOffset = Vector X = 8 Y = 5 diff --git a/Ronin.rte/Devices/Explosives/MolotovCocktail/Sounds/Light.flac b/Ronin.rte/Devices/Explosives/MolotovCocktail/Sounds/Light.flac index c007917ce..57e43b492 100644 Binary files a/Ronin.rte/Devices/Explosives/MolotovCocktail/Sounds/Light.flac and b/Ronin.rte/Devices/Explosives/MolotovCocktail/Sounds/Light.flac differ diff --git a/Ronin.rte/Devices/Explosives/MolotovCocktail/Sounds/Molotov01.flac b/Ronin.rte/Devices/Explosives/MolotovCocktail/Sounds/Molotov01.flac deleted file mode 100644 index a31a0521e..000000000 Binary files a/Ronin.rte/Devices/Explosives/MolotovCocktail/Sounds/Molotov01.flac and /dev/null differ diff --git a/Ronin.rte/Devices/Explosives/MolotovCocktail/Sounds/Molotov02.flac b/Ronin.rte/Devices/Explosives/MolotovCocktail/Sounds/Molotov02.flac deleted file mode 100644 index 0686492e4..000000000 Binary files a/Ronin.rte/Devices/Explosives/MolotovCocktail/Sounds/Molotov02.flac and /dev/null differ diff --git a/Ronin.rte/Devices/Explosives/MolotovCocktail/Sounds/Molotov1.flac b/Ronin.rte/Devices/Explosives/MolotovCocktail/Sounds/Molotov1.flac new file mode 100644 index 000000000..9ad6ac763 Binary files /dev/null and b/Ronin.rte/Devices/Explosives/MolotovCocktail/Sounds/Molotov1.flac differ diff --git a/Ronin.rte/Devices/Misc/Bottle/Bottle.ini b/Ronin.rte/Devices/Misc/Bottle/Bottle.ini index f71f641a8..c4a23d34a 100644 --- a/Ronin.rte/Devices/Misc/Bottle/Bottle.ini +++ b/Ronin.rte/Devices/Misc/Bottle/Bottle.ini @@ -44,13 +44,8 @@ AddDevice = TDExplosive X = 0 Y = 2 DrawAfterParent = 0 - DetonationSound = SoundContainer - AddSound = ContentFile - FilePath = Base.rte/Sounds/Penetration/GlassImpact1.flac - AddSound = ContentFile - FilePath = Base.rte/Sounds/Penetration/GlassImpact2.flac - AddSound = ContentFile - FilePath = Base.rte/Sounds/Penetration/GlassImpact3.flac + GibSound = SoundContainer + CopyOf = Bottle Break StanceOffset = Vector X = 8 Y = 5 @@ -140,5 +135,5 @@ AddDevice = TDExplosive AddGib = Gib GibParticle = MOSParticle CopyOf = Oil Spray Particle - GibImpulseLimit = 40 + GibImpulseLimit = 30 GibWoundLimit = 0 diff --git a/Ronin.rte/Devices/Misc/Bottle/Sounds/Break1.flac b/Ronin.rte/Devices/Misc/Bottle/Sounds/Break1.flac new file mode 100644 index 000000000..a303b9c80 Binary files /dev/null and b/Ronin.rte/Devices/Misc/Bottle/Sounds/Break1.flac differ diff --git a/Ronin.rte/Devices/Misc/Bottle/Sounds/Break2.flac b/Ronin.rte/Devices/Misc/Bottle/Sounds/Break2.flac new file mode 100644 index 000000000..f3a613897 Binary files /dev/null and b/Ronin.rte/Devices/Misc/Bottle/Sounds/Break2.flac differ diff --git a/Ronin.rte/Devices/Misc/Bottle/Sounds/Break3.flac b/Ronin.rte/Devices/Misc/Bottle/Sounds/Break3.flac new file mode 100644 index 000000000..4edf011f6 Binary files /dev/null and b/Ronin.rte/Devices/Misc/Bottle/Sounds/Break3.flac differ diff --git a/Ronin.rte/Devices/Misc/Bottle/Sounds/Break4.flac b/Ronin.rte/Devices/Misc/Bottle/Sounds/Break4.flac new file mode 100644 index 000000000..4649c743d Binary files /dev/null and b/Ronin.rte/Devices/Misc/Bottle/Sounds/Break4.flac differ diff --git a/Ronin.rte/Devices/Misc/Sandbag/Sandbag.ini b/Ronin.rte/Devices/Misc/Sandbag/Sandbag.ini index 2a4ffa370..6633e3f86 100644 --- a/Ronin.rte/Devices/Misc/Sandbag/Sandbag.ini +++ b/Ronin.rte/Devices/Misc/Sandbag/Sandbag.ini @@ -125,7 +125,6 @@ AddDevice = MOSRotating GetsHitByMOs = 0 SpriteFile = ContentFile FilePath = Base.rte/Null.png - FrameCount = 1 AtomGroup = AtomGroup CopyOf = Null AtomGroup JointStrength = 10000000 diff --git a/Ronin.rte/Devices/Shared.ini b/Ronin.rte/Devices/Shared.ini index 36da25f6e..4d1f80cb9 100644 --- a/Ronin.rte/Devices/Shared.ini +++ b/Ronin.rte/Devices/Shared.ini @@ -2,6 +2,19 @@ // Devices Shared Assets +AddSoundContainer = SoundContainer + PresetName = Bottle Break + AddSound = ContentFile + FilePath = Ronin.rte/Devices/Misc/Bottle/Sounds/Break1.flac + AddSound = ContentFile + FilePath = Ronin.rte/Devices/Misc/Bottle/Sounds/Break2.flac + AddSound = ContentFile + FilePath = Ronin.rte/Devices/Misc/Bottle/Sounds/Break3.flac + AddSound = ContentFile + FilePath = Ronin.rte/Devices/Misc/Bottle/Sounds/Break4.flac + AttenuationStartDistance = 140 + + AddEffect = MOSRotating PresetName = Gib Ronin Weapon A Mass = 3 @@ -175,4 +188,11 @@ AddEffect = MOSRotating CopyOf = Military Stuff Resolution = 4 Depth = 0 - DeepCheck = 0 \ No newline at end of file + DeepCheck = 0 + + +AddIcon = Icon + PresetName = Ronin Shovel Icon + FrameCount = 3 + BitmapFile = ContentFile + FilePath = Ronin.rte/Devices/Tools/Shovel/PieIcons/Shovel.png \ No newline at end of file diff --git a/Ronin.rte/Devices/Special/Scrambler/Scramble.lua b/Ronin.rte/Devices/Special/Scrambler/Scramble.lua index 4656a90df..01aa81441 100644 --- a/Ronin.rte/Devices/Special/Scrambler/Scramble.lua +++ b/Ronin.rte/Devices/Special/Scrambler/Scramble.lua @@ -38,6 +38,7 @@ function Create(self) end end end + self.buzzSound = CreateSoundContainer("Ronin Scrambler Buzz", "Ronin.rte"); end function Update(self) self.ToSettle = false; @@ -60,7 +61,7 @@ function Update(self) if (numberValue/framesPerFlash) - math.floor(numberValue/framesPerFlash) == 0 then actor:FlashWhite(1); if math.random() < 0.5 then - AudioMan:PlaySound("Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz0".. math.random(6) ..".flac", actor.Pos); + self.buzzSound:Play(actor.Pos); end end actor:SetNumberValue("RoninScrambler", numberValue - 1); diff --git a/Ronin.rte/Devices/Special/Scrambler/Scrambler.ini b/Ronin.rte/Devices/Special/Scrambler/Scrambler.ini index 357ff3f3c..07c81478f 100644 --- a/Ronin.rte/Devices/Special/Scrambler/Scrambler.ini +++ b/Ronin.rte/Devices/Special/Scrambler/Scrambler.ini @@ -2,6 +2,23 @@ // Scrambler +AddSoundContainer = SoundContainer + PresetName = Ronin Scrambler Buzz + AttenuationStartDistance = 100 + AddSound = ContentFile + FilePath = Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz1.flac + AddSound = ContentFile + FilePath = Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz2.flac + AddSound = ContentFile + FilePath = Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz3.flac + AddSound = ContentFile + FilePath = Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz4.flac + AddSound = ContentFile + FilePath = Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz5.flac + AddSound = ContentFile + FilePath = Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz6.flac + + AddEffect = MOPixel PresetName = Ronin Scrambler Trail Glow Mass = 0.001 @@ -76,13 +93,14 @@ AddDevice = MOSRotating CopyOf = Null AtomGroup GibSound = SoundContainer AddSound = ContentFile - FilePath = Ronin.rte/Devices/Special/Scrambler/Sounds/Explosion01.flac + FilePath = Ronin.rte/Devices/Special/Scrambler/Sounds/Explosion1.flac AddSound = ContentFile - FilePath = Ronin.rte/Devices/Special/Scrambler/Sounds/Explosion02.flac + FilePath = Ronin.rte/Devices/Special/Scrambler/Sounds/Explosion2.flac + //To-do: Remove this! AddSound = ContentFile - FilePath = Ronin.rte/Devices/Special/Scrambler/Sounds/Explosion01.flac + FilePath = Ronin.rte/Devices/Special/Scrambler/Sounds/Explosion1.flac AddSound = ContentFile - FilePath = Ronin.rte/Devices/Special/Scrambler/Sounds/Explosion02.flac + FilePath = Ronin.rte/Devices/Special/Scrambler/Sounds/Explosion2.flac AddGib = Gib GibParticle = MOPixel CopyOf = Glow Explosion Huge diff --git a/Ronin.rte/Devices/Special/Scrambler/Sounds/Activate.flac b/Ronin.rte/Devices/Special/Scrambler/Sounds/Activate.flac index 6ce71f8a5..9cad76c10 100644 Binary files a/Ronin.rte/Devices/Special/Scrambler/Sounds/Activate.flac and b/Ronin.rte/Devices/Special/Scrambler/Sounds/Activate.flac differ diff --git a/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz01.flac b/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz01.flac deleted file mode 100644 index 88d4acfdd..000000000 Binary files a/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz01.flac and /dev/null differ diff --git a/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz02.flac b/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz02.flac deleted file mode 100644 index 1e6cb9e00..000000000 Binary files a/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz02.flac and /dev/null differ diff --git a/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz03.flac b/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz03.flac deleted file mode 100644 index 0dc14fa0d..000000000 Binary files a/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz03.flac and /dev/null differ diff --git a/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz04.flac b/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz04.flac deleted file mode 100644 index fcb56c502..000000000 Binary files a/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz04.flac and /dev/null differ diff --git a/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz06.flac b/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz06.flac deleted file mode 100644 index 1823d06a3..000000000 Binary files a/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz06.flac and /dev/null differ diff --git a/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz1.flac b/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz1.flac new file mode 100644 index 000000000..8dec99c85 Binary files /dev/null and b/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz1.flac differ diff --git a/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz2.flac b/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz2.flac new file mode 100644 index 000000000..163651fb7 Binary files /dev/null and b/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz2.flac differ diff --git a/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz3.flac b/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz3.flac new file mode 100644 index 000000000..e1aa69c3d Binary files /dev/null and b/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz3.flac differ diff --git a/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz4.flac b/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz4.flac new file mode 100644 index 000000000..225127218 Binary files /dev/null and b/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz4.flac differ diff --git a/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz05.flac b/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz5.flac similarity index 100% rename from Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz05.flac rename to Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz5.flac diff --git a/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz6.flac b/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz6.flac new file mode 100644 index 000000000..15cc4e5a6 Binary files /dev/null and b/Ronin.rte/Devices/Special/Scrambler/Sounds/Buzz6.flac differ diff --git a/Ronin.rte/Devices/Special/Scrambler/Sounds/Explosion01.flac b/Ronin.rte/Devices/Special/Scrambler/Sounds/Explosion01.flac deleted file mode 100644 index b88274e73..000000000 Binary files a/Ronin.rte/Devices/Special/Scrambler/Sounds/Explosion01.flac and /dev/null differ diff --git a/Ronin.rte/Devices/Special/Scrambler/Sounds/Explosion02.flac b/Ronin.rte/Devices/Special/Scrambler/Sounds/Explosion02.flac deleted file mode 100644 index 39598dcb2..000000000 Binary files a/Ronin.rte/Devices/Special/Scrambler/Sounds/Explosion02.flac and /dev/null differ diff --git a/Ronin.rte/Devices/Special/Scrambler/Sounds/Explosion1.flac b/Ronin.rte/Devices/Special/Scrambler/Sounds/Explosion1.flac new file mode 100644 index 000000000..17e927152 Binary files /dev/null and b/Ronin.rte/Devices/Special/Scrambler/Sounds/Explosion1.flac differ diff --git a/Ronin.rte/Devices/Special/Scrambler/Sounds/Explosion2.flac b/Ronin.rte/Devices/Special/Scrambler/Sounds/Explosion2.flac new file mode 100644 index 000000000..a6fcda9c8 Binary files /dev/null and b/Ronin.rte/Devices/Special/Scrambler/Sounds/Explosion2.flac differ diff --git a/Ronin.rte/Devices/Tools/Shovel/Gibs/ShovelGibA.png b/Ronin.rte/Devices/Tools/Shovel/Gibs/ShovelGibA.png new file mode 100644 index 000000000..6c1c82dd1 Binary files /dev/null and b/Ronin.rte/Devices/Tools/Shovel/Gibs/ShovelGibA.png differ diff --git a/Ronin.rte/Devices/Tools/Shovel/Shovel.ini b/Ronin.rte/Devices/Tools/Shovel/Shovel.ini index 8642d8403..61ec61057 100644 --- a/Ronin.rte/Devices/Tools/Shovel/Shovel.ini +++ b/Ronin.rte/Devices/Tools/Shovel/Shovel.ini @@ -1,3 +1,43 @@ +/////////////////////////////////////////////////////////////////////// +// Shovel Sounds + + +AddSoundContainer = SoundContainer + PresetName = Ronin Shovel Hit + AddSound = ContentFile + FilePath = Ronin.rte/Devices/Tools/Shovel/Sounds/Melee1.flac + AddSound = ContentFile + FilePath = Ronin.rte/Devices/Tools/Shovel/Sounds/Melee2.flac + AddSound = ContentFile + FilePath = Ronin.rte/Devices/Tools/Shovel/Sounds/Melee3.flac + AttenuationStartDistance = 160 + + +/////////////////////////////////////////////////////////////////////// +// Shovel Gibs + + +AddEffect = MOSRotating + PresetName = Ronin Shovel Gib A + Mass = 2 + HitsMOs = 1 + GetsHitByMOs = 0 + SpriteFile = ContentFile + FilePath = Ronin.rte/Devices/Tools/Shovel/Gibs/ShovelGibA.png + FrameCount = 1 + SpriteOffset = Vector + X = -7 + Y = -1 + AngularVel = 3 + AtomGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Civilian Stuff + Resolution = 4 + Depth = 0 + DeepCheck = 0 + + /////////////////////////////////////////////////////////////////////// // Shovel @@ -45,7 +85,7 @@ AddAmmo = Magazine FilePath = Ronin.rte/Devices/Tools/Shovel/Shovel.png FrameCount = 1 SpriteOffset = Vector - X = -12 + X = -13 Y = -4 AtomGroup = AtomGroup AutoGenerate = 1 @@ -76,8 +116,9 @@ AddDevice = HDFirearm AddLine = Gather dirt and turn it into sandbags using the Pie Menu. AddToGroup = Tools AddToGroup = Tools - Diggers - Mass = 4 - HitsMOs = 0 + Mass = 5 + Sharpness = 0.5 + HitsMOs = 1 GetsHitByMOs = 1 ProvidesPieMenuContext = 1 ScriptPath = Ronin.rte/Devices/Tools/Shovel/Shovel.lua @@ -85,7 +126,7 @@ AddDevice = HDFirearm FilePath = Ronin.rte/Devices/Tools/Shovel/Shovel.png FrameCount = 2 SpriteOffset = Vector - X = -12 + X = -13 Y = -4 EntryWound = AEmitter CopyOf = Dent Metal @@ -108,19 +149,20 @@ AddDevice = HDFirearm JointStrength = 90 JointStiffness = 0.5 JointOffset = Vector - X = -6 + X = -7 Y = 1 DrawAfterParent = 0 + HUDVisible = 0 StanceOffset = Vector X = 0 Y = 8 SharpStanceOffset = Vector - X = 5 + X = 4 Y = 6 SupportOffset = Vector - X = 1 + X = 0 Y = 2 - SharpLength = 80 + SharpLength = 0 Magazine = Magazine CopyOf = Magazine Ronin Shovel Flash = Attachable @@ -142,22 +184,14 @@ AddDevice = HDFirearm SharpShakeRange = 2 NoSupportFactor = 1 ParticleSpreadRange = 100 - ShellSpreadRange = 20 - ShellAngVelRange = 10 MuzzleOffset = Vector X = 7 Y = 0 - EjectionOffset = Vector - X = 11 - Y = -1 AddPieSlice = Slice Description = Fill Sandbag Direction = 3 Icon = Icon - PresetName = Ronin Shovel Icon - FrameCount = 3 - BitmapFile = ContentFile - FilePath = Ronin.rte/Devices/Tools/Shovel/PieIcons/Shovel.png + CopyOf = Ronin Shovel Icon ScriptPath = Ronin.rte/Devices/Tools/Shovel/ShovelPie.lua FunctionName = RoninCreateSandbag AddGib = Gib @@ -184,22 +218,73 @@ AddDevice = HDFirearm AddGib = Gib GibParticle = MOSParticle CopyOf = Gib Bone Micro A - Count = 2 - Spread = 2.25 - MaxVelocity = 10 - MinVelocity = 1 AddGib = Gib GibParticle = MOSParticle CopyOf = Gib Metal Rust Micro A - Count = 5 - Spread = 2.25 - MaxVelocity = 15 - MinVelocity = 5 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Grey Micro A + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Ronin Shovel Gib A + Offset = Vector + X = -6 + Y = 0 + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Gib Metal Rusty Small D + Offset = Vector + X = 7 + Y = 0 AddGib = Gib GibParticle = MOSParticle CopyOf = Gib Metal Grey Tiny A - Count = 3 - Spread = 2.25 - MaxVelocity = 15 - MinVelocity = 5 - GibWoundLimit = 18 \ No newline at end of file + Offset = Vector + X = 9 + Y = 1 + GibWoundLimit = 18 + + +AddAmmo = Magazine + PresetName = Magazine Ronin Shovel Shot + Mass = 5 + HitsMOs = 0 + GetsHitByMOs = 0 + CollidesWithTerrainWhileAttached = 1 + SpriteFile = ContentFile + FilePath = Ronin.rte/Devices/Tools/Shovel/Shovel.png + FrameCount = 1 + SpriteOffset = Vector + X = -13 + Y = -4 + AtomGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Military Stuff + Resolution = 2 + Depth = 0 + DeepGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Military Stuff + Resolution = 3 + Depth = 1 + DeepCheck = 1 + JointStrength = 200 + JointStiffness = 1 + ParentOffset = Vector + X = 11 + Y = -1 + DrawAfterParent = 0 + RoundCount = 1 + RegularRound = Round + PresetName = Round Ronin Shovel Shot + ParticleCount = 1 + Particle = HDFirearm + CopyOf = Shovel + Shell = MOSParticle + CopyOf = Explosion Smoke 1 + ShellVelocity = -3 + FireVelocity = 60 + Discardable = 0 + AIBlastRadius = 30 \ No newline at end of file diff --git a/Ronin.rte/Devices/Tools/Shovel/Shovel.lua b/Ronin.rte/Devices/Tools/Shovel/Shovel.lua index 955e902d9..4b83a12e7 100644 --- a/Ronin.rte/Devices/Tools/Shovel/Shovel.lua +++ b/Ronin.rte/Devices/Tools/Shovel/Shovel.lua @@ -1,35 +1,36 @@ function Create(self) self.origStanceOffset = Vector(0, 8); - self.rotNum = 0; + self.origSharpStanceOffset = Vector(4, 6); self.minimumRoF = self.RateOfFire * 0.5; - self.suitableMaterials = {"Sand", "Topsoil", "Earth", "Dense Earth", "Dense Red Earth", "Red Earth", "Lunar Earth", "Dense Lunar Earth", "Earth Rubble"}; - - self.resource = 0; - self.resourcePerBag = 10; + self.suitableMaterials = {"Sand", "Topsoil", "Earth", "Dense Earth", "Dense Red Earth", "Red Earth", "Lunar Earth", "Dense Lunar Earth", "Earth Rubble", "Sandbag"}; + self.collectSound = CreateSoundContainer("Device Switch", "Base.rte"); + self.hitSound = CreateSoundContainer("Ronin Shovel Hit", "Ronin.rte"); --How much the shovel tilts when firing self.angleSize = 1.0; + + self.lastVel = Vector(50 * self.FlipFactor, 0):RadRotate(self.RotAngle); + self.lastMuzzlePos = Vector(self.MuzzlePos.X, self.MuzzlePos.Y); end function Update(self) - self.RotAngle = self.RotAngle + self.rotNum * self.FlipFactor; - self.StanceOffset = Vector(self.origStanceOffset.X + self.rotNum * 5, self.origStanceOffset.Y):RadRotate(self.angleSize * 0.5 * self.rotNum); + self.StanceOffset = Vector(self.origStanceOffset.X + self.InheritedRotAngleOffset * 5, self.origStanceOffset.Y):RadRotate(self.angleSize * 0.5 * self.InheritedRotAngleOffset); + self.SharpStanceOffset = Vector(self.origSharpStanceOffset.X + self.InheritedRotAngleOffset * 5, self.origSharpStanceOffset.Y):RadRotate(self.angleSize * 0.5 * self.InheritedRotAngleOffset); --Revert rotation - if self.rotNum > 0 then - self.rotNum = math.max(self.rotNum - (0.0003 * self.RateOfFire), 0); + if self.InheritedRotAngleOffset > 0 then + self.InheritedRotAngleOffset = math.max(self.InheritedRotAngleOffset - (0.0003 * self.RateOfFire), 0); end - local actor = MovableMan:GetMOFromID(self.RootID); - if actor and IsActor(actor) then - actor = ToActor(actor); - actor:GetController():SetState(Controller.AIM_SHARP, false); - local resource = actor:GetNumberValue("RoninShovelResource"); + local parent = self:GetRootParent(); + if parent and IsActor(parent) then + parent = ToActor(parent); + local resource = parent:GetNumberValue("RoninShovelResource"); if self.FiredFrame then - self.rotNum = self.angleSize; + self.InheritedRotAngleOffset = self.angleSize; local particleCount = 3; local fireVec = Vector(60 * self.FlipFactor, 0):RadRotate(self.RotAngle):RadRotate(0.2 * self.FlipFactor); for i = 1, particleCount do --Lua-generated particles that can chip stone - local dig = CreateMOPixel("Particle Ronin Shovel 2"); + local dig = CreateMOPixel("Particle Ronin Shovel 2", "Ronin.rte"); dig.Pos = self.MuzzlePos; dig.Vel = Vector(55 * self.FlipFactor, 0):RadRotate(self.RotAngle + (-0.3 + i * 0.2) * self.FlipFactor); MovableMan:AddParticle(dig); @@ -38,9 +39,9 @@ function Update(self) --Play a radical sound if a MO is met local moCheck = SceneMan:CastMORay(self.MuzzlePos, trace, self.ID, self.Team, 0, false, 1); if moCheck ~= rte.NoMOID then - AudioMan:PlaySound("Ronin.rte/Devices/Tools/Shovel/Sounds/Melee".. math.random(3) ..".flac", self.MuzzlePos); + self.hitSound:Play(self.MuzzlePos); for i = 1, particleCount do - local damagePar = CreateMOPixel("Smack Particle"); + local damagePar = CreateMOPixel("Smack Particle", "Base.rte"); damagePar.Pos = self.MuzzlePos; damagePar.Vel = Vector(fireVec.X, fireVec.Y):RadRotate((-0.8 + i * 0.4) * self.FlipFactor); damagePar.Team = self.Team; @@ -48,7 +49,7 @@ function Update(self) damagePar.Mass = damagePar.Mass * RangeRand(0.5, 1.0); MovableMan:AddParticle(damagePar); end - elseif resource < self.resourcePerBag then + elseif resource < 10 then --Gather materials and turn them into sandbags local rayCount = 3; local hits = 0; @@ -61,8 +62,8 @@ function Update(self) if material == terrainMaterial then hits = hits + 1; if hits > rayCount * 0.5 then - actor:SetNumberValue("RoninShovelResource", resource + 1); - AudioMan:PlaySound("Base.rte/Sounds/Devices/DeviceSwitch".. math.random(3) ..".flac", self.Pos); + parent:SetNumberValue("RoninShovelResource", resource + 1); + self.collectSound:Play(self.Pos); break; end break; @@ -79,13 +80,36 @@ function Update(self) self.Magazine.RoundCount = resource > 0 and resource or -1; end - self.RateOfFire = self.minimumRoF + (self.minimumRoF) * (actor.Health/actor.MaxHealth); + self.RateOfFire = self.minimumRoF + (self.minimumRoF) * (parent.Health/parent.MaxHealth); else self.Scale = 1; if self.Magazine then self.Magazine.Scale = 0; end + if self.lastVel.Magnitude > 25 then + if self.HitWhatMOID ~= rte.NoMOID then + local mo = MovableMan:GetMOFromID(self.HitWhatMOID); + if mo then + local particleCount = 3; + local spread = self.AngularVel * TimerMan.DeltaTimeSecs * 0.5; + for i = 0, particleCount - 1 do + local damagePar = CreateMOPixel("Smack Particle", "Base.rte"); + damagePar.Mass = self.Mass--/particleCount; + damagePar.Sharpness = self.Sharpness-- * particleCount; + + damagePar.Pos = self.lastMuzzlePos; + damagePar.Vel = Vector(self.lastVel.X, self.lastVel.Y):RadRotate(spread * 0.5 - spread * i/(particleCount - 1)) * 1.5; + + damagePar:SetWhichMOToNotHit(self, -1); + MovableMan:AddParticle(damagePar); + end + self.hitSound:Play(self.MuzzlePos); + end + end + end end + self.lastVel = Vector(self.Vel.X, self.Vel.Y); + self.lastMuzzlePos = Vector(self.MuzzlePos.X, self.MuzzlePos.Y); end function OnPieMenu(item) if item and IsHDFirearm(item) and item.PresetName == "Shovel" then diff --git a/Ronin.rte/Devices/Tools/Shovel/ShovelPie.lua b/Ronin.rte/Devices/Tools/Shovel/ShovelPie.lua index 21a4f5209..649ed7a96 100644 --- a/Ronin.rte/Devices/Tools/Shovel/ShovelPie.lua +++ b/Ronin.rte/Devices/Tools/Shovel/ShovelPie.lua @@ -2,9 +2,11 @@ function RoninCreateSandbag(actor) if actor and IsAHuman(actor) then actor = ToAHuman(actor); if actor:GetNumberValue("RoninShovelResource") >= 10 then + actor:RemoveNumberValue("RoninShovelResource"); actor:AddInventoryItem(CreateThrownDevice("Ronin.rte/Sandbag")); actor:EquipNamedDevice("Sandbag", true); + else + AudioMan:PlaySound("Base.rte/Sounds/GUIs/UserError.flac", actor.Pos); end - actor:RemoveNumberValue("RoninShovelResource"); end end \ No newline at end of file diff --git a/Ronin.rte/Devices/Weapons/357Magnum/357Magnum.ini b/Ronin.rte/Devices/Weapons/357Magnum/357Magnum.ini index 44162de94..34ce483ed 100644 --- a/Ronin.rte/Devices/Weapons/357Magnum/357Magnum.ini +++ b/Ronin.rte/Devices/Weapons/357Magnum/357Magnum.ini @@ -29,6 +29,7 @@ AddAmmo = Round TrailLength = 28 Shell = MOSParticle CopyOf = Tiny Smoke Ball 1 + ShellVelocity = 3 FireVelocity = 94 Separation = 0.01 @@ -140,8 +141,8 @@ AddDevice = HDFirearm SharpShakeRange = 1 NoSupportFactor = 1.5 ParticleSpreadRange = 0 - ShellSpreadRange = 8 - ShellAngVelRange = 2 + ShellSpreadRange = 1 + ShellEjectAngle = 0 MuzzleOffset = Vector X = 9 Y = -1 diff --git a/Ronin.rte/Devices/Weapons/357Magnum/357Magnum.lua b/Ronin.rte/Devices/Weapons/357Magnum/357Magnum.lua index 7d80c91b3..9f0a2b600 100644 --- a/Ronin.rte/Devices/Weapons/357Magnum/357Magnum.lua +++ b/Ronin.rte/Devices/Weapons/357Magnum/357Magnum.lua @@ -71,9 +71,9 @@ function Update(self) end if self:IsReloading() then self.RotAngle = self.prevAngle + (self.FlipFactor * 0.42 * self.drawGunSpeed); - local spinOffset = Vector(-2 * self.FlipFactor, -2); self.JointOffset = Vector(2, 2); - self.Pos = self.Pos - spinOffset + spinOffset:RadRotate(self.RotAngle); + local jointOffset = Vector(self.JointOffset.X * self.FlipFactor, self.JointOffset.Y):RadRotate(self.RotAngle); + self.Pos = self.Pos - jointOffset + Vector(jointOffset.X, jointOffset.Y):RadRotate(-self.RotAngle); self.prevAngle = self.RotAngle; self:SetNumberValue("CowboyMode", 5); else diff --git a/Ronin.rte/Devices/Weapons/AK47/AK47000.png b/Ronin.rte/Devices/Weapons/AK47/AK47000.png index fc06a73dd..337c2bfbe 100644 Binary files a/Ronin.rte/Devices/Weapons/AK47/AK47000.png and b/Ronin.rte/Devices/Weapons/AK47/AK47000.png differ diff --git a/Ronin.rte/Devices/Weapons/AK47/AK47001.png b/Ronin.rte/Devices/Weapons/AK47/AK47001.png index 871770a0f..5c4cb1309 100644 Binary files a/Ronin.rte/Devices/Weapons/AK47/AK47001.png and b/Ronin.rte/Devices/Weapons/AK47/AK47001.png differ diff --git a/Ronin.rte/Devices/Weapons/Beretta93R/Beretta93R.ini b/Ronin.rte/Devices/Weapons/Beretta93R/Beretta93R.ini index f0e61c002..bc3157c6d 100644 --- a/Ronin.rte/Devices/Weapons/Beretta93R/Beretta93R.ini +++ b/Ronin.rte/Devices/Weapons/Beretta93R/Beretta93R.ini @@ -81,7 +81,7 @@ AddDevice = HDFirearm Description = Great standard issue sidearm for every troop. Offers five three-round bursts per clip, decent stopping power and fast reloads. AddToGroup = Weapons AddToGroup = Weapons - Secondary - Mass = 3 + Mass = 3.5 HitsMOs = 0 GetsHitByMOs = 1 ScriptPath = Base.rte/Devices/Shared/Scripts/BurstFire.lua @@ -158,7 +158,7 @@ AddDevice = HDFirearm SharpShakeRange = 4 NoSupportFactor = 1.2 ParticleSpreadRange = 0 - ShellSpreadRange = 8 + ShellSpreadRange = 16 ShellAngVelRange = 2 MuzzleOffset = Vector X = 8 diff --git a/Ronin.rte/Devices/Weapons/Chainsaw/Chainsaw.ini b/Ronin.rte/Devices/Weapons/Chainsaw/Chainsaw.ini index d73b726b4..937ddfb52 100644 --- a/Ronin.rte/Devices/Weapons/Chainsaw/Chainsaw.ini +++ b/Ronin.rte/Devices/Weapons/Chainsaw/Chainsaw.ini @@ -1,3 +1,29 @@ +/////////////////////////////////////////////////////////////////////// +// Chainsaw Sounds + + +AddSoundContainer = SoundContainer + PresetName = Ronin Chainsaw Start + AttenuationStartDistance = 120 + AddSound = ContentFile + FilePath = Ronin.rte/Devices/Weapons/Chainsaw/Sounds/Start.flac + + +AddSoundContainer = SoundContainer + PresetName = Ronin Chainsaw Loop + AttenuationStartDistance = 120 + AddSound = ContentFile + FilePath = Ronin.rte/Devices/Weapons/Chainsaw/Sounds/Loop.flac + LoopSetting = -1 + + +AddSoundContainer = SoundContainer + PresetName = Ronin Chainsaw Stop + AttenuationStartDistance = 120 + AddSound = ContentFile + FilePath = Ronin.rte/Devices/Weapons/Chainsaw/Sounds/Stop.flac + + /////////////////////////////////////////////////////////////////////// // Chainsaw @@ -146,7 +172,7 @@ AddDevice = HDFirearm SupportOffset = Vector X = 1 Y = 1 - SharpLength = 50 + SharpLength = 0 Magazine = Magazine CopyOf = Magazine Ronin Chainsaw Flash = Attachable @@ -161,10 +187,7 @@ AddDevice = HDFirearm AttenuationStartDistance = 100 CopyOf = Metal Body Blunt Hit ActiveSound = SoundContainer - AttenuationStartDistance = 185 - AddSound = ContentFile - FilePath = Ronin.rte/Devices/Weapons/Chainsaw/Sounds/Chainsaw.flac - LoopSetting = -1 + CopyOf = Ronin Chainsaw Loop Loudness = 0.5 RecoilTransmission = 0.0 RateOfFire = 4000 @@ -175,7 +198,7 @@ AddDevice = HDFirearm SharpShakeRange = 5 NoSupportFactor = 1 ParticleSpreadRange = 50 - ShellSpreadRange = 250 + ShellSpreadRange = 360 ShellAngVelRange = 10 MuzzleOffset = Vector X = 2 diff --git a/Ronin.rte/Devices/Weapons/Chainsaw/Chainsaw.lua b/Ronin.rte/Devices/Weapons/Chainsaw/Chainsaw.lua index d49c2db95..508874bd4 100644 --- a/Ronin.rte/Devices/Weapons/Chainsaw/Chainsaw.lua +++ b/Ronin.rte/Devices/Weapons/Chainsaw/Chainsaw.lua @@ -10,8 +10,11 @@ function Create(self) self.activated = false; self.actDelay = 200; - self.dismemberTimer = Timer(); + self.dismemberStrength = 250; self.length = ToMOSprite(self):GetSpriteWidth(); + + self.startSound = CreateSoundContainer("Ronin Chainsaw Start", "Ronin.rte"); + self.stopSound = CreateSoundContainer("Ronin Chainsaw Stop", "Ronin.rte"); end function Update(self) @@ -23,7 +26,7 @@ function Update(self) parent:GetController():SetState(Controller.AIM_SHARP, false); turn = math.abs(self.lastAngle - parent:GetAimAngle(false)); - local newAngle = -(-0.8 + math.sin(self.rotFactor) * 0.4 - parent:GetAimAngle(false)) * self.FlipFactor; + self.InheritedRotAngleOffset = -(-0.8 + math.sin(self.rotFactor) * 0.4); self.Scale = 1; if self.Magazine then @@ -56,7 +59,6 @@ function Update(self) self.actDelay = 200; self.StanceOffset = Vector(10 + self.rotFactor * 3, 1):RadRotate(math.sin(self.rotFactor * 0.3) - 0.3); - self.RotAngle = newAngle; self.lastAngle = parent:GetAimAngle(true); else @@ -84,18 +86,14 @@ function Update(self) self.Scale = 0; self.fired = true; --Dismemberment: detach limbs via MO detection - if self.dismemberTimer:IsPastSimMS(200) then - self.dismemberTimer:Reset(); - local moCheck = SceneMan:CastMORay(self.Pos, Vector(self.length * 0.8 * self.FlipFactor, 0):RadRotate(self.RotAngle), self.ID, self.Team, rte.airID, true, 2); - if moCheck ~= rte.NoMOID then - local mo = MovableMan:GetMOFromID(moCheck); - if mo and IsAttachable(mo) and ToAttachable(mo):IsAttached() and not (IsHeldDevice(mo) or IsThrownDevice(mo)) then - mo = ToAttachable(mo); - local chances = 1/(math.sqrt(math.abs(mo.JointStrength) + 1)); - if math.random() < chances then - mo.JointStrength = -1; - mo.GetsHitByMOs = false; -- Makes detached limbs more visible - end + local moCheck = SceneMan:CastMORay(self.Pos, Vector(self.length * 0.8 * self.FlipFactor, 0):RadRotate(self.RotAngle), self.ID, self.Team, rte.airID, true, 2); + if moCheck ~= rte.NoMOID then + local mo = MovableMan:GetMOFromID(moCheck); + if mo and IsAttachable(mo) and ToAttachable(mo):IsAttached() and not (IsHeldDevice(mo) or IsThrownDevice(mo)) then + mo = ToAttachable(mo); + local jointPos = mo.Pos + Vector(mo.JointOffset.X * mo.FlipFactor, mo.JointOffset.Y):RadRotate(mo.RotAngle); + if SceneMan:ShortestDistance(self.Pos, jointPos, SceneMan.SceneWrapsX).Magnitude < 3 and math.random(self.dismemberStrength) > mo.JointStrength then + ToMOSRotating(mo:GetParent()):RemoveAttachable(mo.UniqueID, true, true); end end end @@ -103,7 +101,7 @@ function Update(self) self.Scale = 1; self.fired = false; - AudioMan:PlaySound("Ronin.rte/Devices/Weapons/Chainsaw/Sounds/ChainsawEnd.flac", self.Pos); + self.stopSound:Play(self.Pos); if self.Magazine.RoundCount == 0 then self:Reload(); diff --git a/Ronin.rte/Devices/Weapons/Chainsaw/Sounds/Chainsaw.flac b/Ronin.rte/Devices/Weapons/Chainsaw/Sounds/Chainsaw.flac deleted file mode 100644 index cc5daf315..000000000 Binary files a/Ronin.rte/Devices/Weapons/Chainsaw/Sounds/Chainsaw.flac and /dev/null differ diff --git a/Ronin.rte/Devices/Weapons/Chainsaw/Sounds/ChainsawEnd.flac b/Ronin.rte/Devices/Weapons/Chainsaw/Sounds/ChainsawEnd.flac deleted file mode 100644 index b1cf5d12c..000000000 Binary files a/Ronin.rte/Devices/Weapons/Chainsaw/Sounds/ChainsawEnd.flac and /dev/null differ diff --git a/Ronin.rte/Devices/Weapons/DesertEagle/DesertEagle.lua b/Ronin.rte/Devices/Weapons/DesertEagle/DesertEagle.lua index b34300469..982630d6a 100644 --- a/Ronin.rte/Devices/Weapons/DesertEagle/DesertEagle.lua +++ b/Ronin.rte/Devices/Weapons/DesertEagle/DesertEagle.lua @@ -1,5 +1,4 @@ function Create(self) - self.setRecoilAngle = 0; --Suffer from fire rate loss when firing rapidly self.fireRatePenaltyPerShot = 75; self.fireRateRevertIncrement = 1; @@ -15,7 +14,7 @@ function Update(self) if self.FiredFrame then local parent = self:GetParent() and self:GetParent() or self; - self.setRecoilAngle = self.setRecoilAngle + RangeRand(1.0, 1.3)/math.sqrt(1 + parent.Mass + parent.Material.StructuralIntegrity * 0.1); + self.InheritedRotAngleOffset = self.InheritedRotAngleOffset + RangeRand(1.0, 1.3)/math.sqrt(1 + parent.Mass + parent.Material.StructuralIntegrity * 0.1); self.RateOfFire = math.max(self.RateOfFire - self.fireRatePenaltyPerShot, 1); self.fireRateRevertTimer:Reset(); @@ -25,18 +24,14 @@ function Update(self) self.fireRateRevertTimer:Reset(); end - self.RotAngle = self.RotAngle + (self.setRecoilAngle * self.FlipFactor); - local jointOffset = Vector(self.JointOffset.X * self.FlipFactor, self.JointOffset.Y):RadRotate(self.RotAngle); - self.Pos = self.Pos - jointOffset + Vector(jointOffset.X, jointOffset.Y):RadRotate(-self.setRecoilAngle * self.FlipFactor); + self.StanceOffset = Vector(self.origStanceOffset.X, self.origStanceOffset.Y):RadRotate(self.InheritedRotAngleOffset); + self.SharpStanceOffset = Vector(self.origSharpStanceOffset.X, self.origSharpStanceOffset.Y):RadRotate(self.InheritedRotAngleOffset); - self.StanceOffset = Vector(self.origStanceOffset.X, self.origStanceOffset.Y):RadRotate(self.setRecoilAngle); - self.SharpStanceOffset = Vector(self.origSharpStanceOffset.X, self.origSharpStanceOffset.Y):RadRotate(self.setRecoilAngle); + if self.InheritedRotAngleOffset > 0 then + self.InheritedRotAngleOffset = self.InheritedRotAngleOffset - 0.0001 * (self.RateOfFire/(1 + self.InheritedRotAngleOffset)); - if self.setRecoilAngle > 0 then - self.setRecoilAngle = self.setRecoilAngle - 0.0001 * (self.RateOfFire/(1 + self.setRecoilAngle)); - - if self.setRecoilAngle < 0 then - self.setRecoilAngle = 0; + if self.InheritedRotAngleOffset < 0 then + self.InheritedRotAngleOffset = 0; end end end \ No newline at end of file diff --git a/Ronin.rte/Devices/Weapons/DoubleBarreledShotgun/DoubleBarreledShotgun.ini b/Ronin.rte/Devices/Weapons/DoubleBarreledShotgun/DoubleBarreledShotgun.ini index c95b1316a..248b53a0d 100644 --- a/Ronin.rte/Devices/Weapons/DoubleBarreledShotgun/DoubleBarreledShotgun.ini +++ b/Ronin.rte/Devices/Weapons/DoubleBarreledShotgun/DoubleBarreledShotgun.ini @@ -8,11 +8,11 @@ AddAmmo = Round Particle = MOPixel PresetName = Particle Ronin Double-Barrel Shotgun ScriptPath = Base.rte/Devices/Shared/Scripts/ShotgunPellet.lua - Mass = 0.3 + Mass = 0.25 AirResistance = 0.06 RestThreshold = 500 LifeTime = 500 - Sharpness = 3 + Sharpness = 3.6 HitsMOs = 1 GetsHitByMOs = 0 Color = Color @@ -30,7 +30,7 @@ AddAmmo = Round Shell = MOSParticle CopyOf = Tiny Smoke Ball 1 FireVelocity = 100 - ShellVelocity = -1 + ShellVelocity = 5 Separation = 8 @@ -118,7 +118,7 @@ AddDevice = HDFirearm ReloadEndSound = SoundContainer AddSound = ContentFile FilePath = Ronin.rte/Devices/Weapons/DoubleBarreledShotgun/Sounds/ReloadEnd.flac - RecoilTransmission = 0.8 + RecoilTransmission = 0.7 RateOfFire = 1000 ReloadTime = 1600 FullAuto = 1 @@ -127,8 +127,8 @@ AddDevice = HDFirearm SharpShakeRange = 1 NoSupportFactor = 1.4 ParticleSpreadRange = 7 - ShellSpreadRange = 8 - ShellAngVelRange = 2 + ShellEjectAngle = 0 + ShellSpreadRange = 1 MuzzleOffset = Vector X = 14 Y = -1 diff --git a/Ronin.rte/Devices/Weapons/DoubleBarreledShotgun/DoubleBarreledShotgun000.png b/Ronin.rte/Devices/Weapons/DoubleBarreledShotgun/DoubleBarreledShotgun000.png index fd15aa5c5..0ecfa174c 100644 Binary files a/Ronin.rte/Devices/Weapons/DoubleBarreledShotgun/DoubleBarreledShotgun000.png and b/Ronin.rte/Devices/Weapons/DoubleBarreledShotgun/DoubleBarreledShotgun000.png differ diff --git a/Ronin.rte/Devices/Weapons/DoubleBarreledShotgun/DoubleBarreledShotgun001.png b/Ronin.rte/Devices/Weapons/DoubleBarreledShotgun/DoubleBarreledShotgun001.png index 270b9342b..8c11b54e2 100644 Binary files a/Ronin.rte/Devices/Weapons/DoubleBarreledShotgun/DoubleBarreledShotgun001.png and b/Ronin.rte/Devices/Weapons/DoubleBarreledShotgun/DoubleBarreledShotgun001.png differ diff --git a/Ronin.rte/Devices/Weapons/DoubleBarreledShotgun/SawedOffShotgun000.png b/Ronin.rte/Devices/Weapons/DoubleBarreledShotgun/SawedOffShotgun000.png index f2da84d96..9a2a8c9f5 100644 Binary files a/Ronin.rte/Devices/Weapons/DoubleBarreledShotgun/SawedOffShotgun000.png and b/Ronin.rte/Devices/Weapons/DoubleBarreledShotgun/SawedOffShotgun000.png differ diff --git a/Ronin.rte/Devices/Weapons/DoubleBarreledShotgun/SawedOffShotgun001.png b/Ronin.rte/Devices/Weapons/DoubleBarreledShotgun/SawedOffShotgun001.png index 09c8c161f..2ac388dd7 100644 Binary files a/Ronin.rte/Devices/Weapons/DoubleBarreledShotgun/SawedOffShotgun001.png and b/Ronin.rte/Devices/Weapons/DoubleBarreledShotgun/SawedOffShotgun001.png differ diff --git a/Ronin.rte/Devices/Weapons/K98K/K98K.ini b/Ronin.rte/Devices/Weapons/K98K/K98K.ini index 7a78e0dc5..258c0d344 100644 --- a/Ronin.rte/Devices/Weapons/K98K/K98K.ini +++ b/Ronin.rte/Devices/Weapons/K98K/K98K.ini @@ -1,3 +1,14 @@ +/////////////////////////////////////////////////////////////////////// +// K98K Sounds + + +AddSoundContainer = SoundContainer + PresetName = Ronin Kar98 Bolt Pull Sound + AttenuationStartDistance = 120 + AddSound = ContentFile + FilePath = Ronin.rte/Devices/Weapons/K98K/Sounds/Chamber.flac + + /////////////////////////////////////////////////////////////////////// // K98K Ammo @@ -32,7 +43,7 @@ AddAmmo = Round CopyOf = Tiny Smoke Ball 1 FireVelocity = 150 Separation = 1 - ShellVelocity = -1 + ShellVelocity = 5 AddAmmo = Magazine @@ -148,7 +159,7 @@ AddDevice = HDFirearm NoSupportFactor = 2.0 ParticleSpreadRange = 0 ShellSpreadRange = 1 - ShellAngVelRange = 1 + ShellEjectAngle = 0 MuzzleOffset = Vector X = 19 Y = 0 diff --git a/Ronin.rte/Devices/Weapons/K98K/K98K.lua b/Ronin.rte/Devices/Weapons/K98K/K98K.lua index 030a4c415..96c3d943a 100644 --- a/Ronin.rte/Devices/Weapons/K98K/K98K.lua +++ b/Ronin.rte/Devices/Weapons/K98K/K98K.lua @@ -1,6 +1,8 @@ function Create(self) self.pullTimer = Timer(); self.rotFactor = math.pi; + + self.boltPullSound = CreateSoundContainer("Ronin Kar98 Bolt Pull Sound", "Ronin.rte"); end function Update(self) local parent; @@ -15,11 +17,10 @@ function Update(self) self.rotFactor = math.pi; end if parent and not self.loaded and self.RoundInMagCount > 0 and not self.reloadCycle then - self:Deactivate(); if self.pullTimer:IsPastSimMS(15000/self.RateOfFire) then if not self.playedSound then parent:GetController():SetState(Controller.AIM_SHARP, false); - AudioMan:PlaySound("Ronin.rte/Devices/Weapons/K98K/Sounds/Chamber.flac", self.Pos); + self.boltPullSound:Play(self.Pos); self.playedSound = true; end if self.shell then diff --git a/Ronin.rte/Devices/Weapons/LugerP08/LugerP08.ini b/Ronin.rte/Devices/Weapons/LugerP08/LugerP08.ini index ddf4f5d2b..4029a502c 100644 --- a/Ronin.rte/Devices/Weapons/LugerP08/LugerP08.ini +++ b/Ronin.rte/Devices/Weapons/LugerP08/LugerP08.ini @@ -64,8 +64,8 @@ AddAmmo = Magazine X = 0 Y = -1 ParentOffset = Vector - X = -2 - Y = 2 + X = -3 + Y = 1 DrawAfterParent = 0 RoundCount = 8 RegularRound = Round @@ -88,13 +88,13 @@ AddDevice = HDFirearm FilePath = Ronin.rte/Devices/Weapons/LugerP08/LugerP08.png FrameCount = 2 SpriteOffset = Vector - X = -8 + X = -6 Y = -4 EntryWound = AEmitter CopyOf = Dent Metal ExitWound = AEmitter CopyOf = Dent Metal - GoldValue = 15 + GoldValue = 10 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -111,7 +111,7 @@ AddDevice = HDFirearm JointStrength = 100 JointStiffness = 0.5 JointOffset = Vector - X = -1 + X = -2 Y = 2 DrawAfterParent = 0 OneHanded = 1 @@ -129,7 +129,7 @@ AddDevice = HDFirearm Magazine = Magazine CopyOf = Magazine Ronin Luger Flash = Attachable - CopyOf = Muzzle Flash SMG + CopyOf = Muzzle Flash Pistol FireSound = SoundContainer AttenuationStartDistance = 165 AddSound = ContentFile @@ -162,11 +162,11 @@ AddDevice = HDFirearm ShellSpreadRange = 8 ShellAngVelRange = 2 MuzzleOffset = Vector - X = 9 + X = 8 Y = -1 EjectionOffset = Vector - X = 0 - Y = -1 + X = -1 + Y = -2 AddGib = Gib GibParticle = MOPixel CopyOf = Spark Yellow 1 diff --git a/Ronin.rte/Devices/Weapons/LugerP08/LugerP08000.png b/Ronin.rte/Devices/Weapons/LugerP08/LugerP08000.png index 05f746ffd..8331c37f1 100644 Binary files a/Ronin.rte/Devices/Weapons/LugerP08/LugerP08000.png and b/Ronin.rte/Devices/Weapons/LugerP08/LugerP08000.png differ diff --git a/Ronin.rte/Devices/Weapons/LugerP08/LugerP08001.png b/Ronin.rte/Devices/Weapons/LugerP08/LugerP08001.png index 017aa31da..da271a478 100644 Binary files a/Ronin.rte/Devices/Weapons/LugerP08/LugerP08001.png and b/Ronin.rte/Devices/Weapons/LugerP08/LugerP08001.png differ diff --git a/Ronin.rte/Devices/Weapons/M1Garand/Garand.lua b/Ronin.rte/Devices/Weapons/M1Garand/Garand.lua index c269fa111..663df8111 100644 --- a/Ronin.rte/Devices/Weapons/M1Garand/Garand.lua +++ b/Ronin.rte/Devices/Weapons/M1Garand/Garand.lua @@ -3,7 +3,7 @@ function Update(self) if self.FiredFrame and self.RoundInMagCount == 0 then self:Reload(); if MovableMan:IsParticle(self.lastMag) then - self.lastMag.Vel = self.lastMag.Vel + Vector(-4 * self.FlipFactor, -7):RadRotate(self.RotAngle); + self.lastMag.Vel = self.lastMag.Vel + Vector(0, -7):RadRotate(self.RotAngle); AudioMan:PlaySound("Ronin.rte/Devices/Weapons/M1Garand/Sounds/Ping.flac", self.Pos); end end diff --git a/Ronin.rte/Devices/Weapons/M60/M60.ini b/Ronin.rte/Devices/Weapons/M60/M60.ini index a37d717b3..3f59ab570 100644 --- a/Ronin.rte/Devices/Weapons/M60/M60.ini +++ b/Ronin.rte/Devices/Weapons/M60/M60.ini @@ -57,7 +57,7 @@ AddAmmo = Round Shell = MOSParticle CopyOf = Casing Long FireVelocity = 125 - ShellVelocity = 12 + ShellVelocity = 9 Separation = 1 @@ -90,7 +90,7 @@ AddAmmo = Magazine JointStrength = 200 JointStiffness = 1 ParentOffset = Vector - X = -3 + X = -1 Y = 2 DrawAfterParent = 1 RoundCount = 100 @@ -107,7 +107,7 @@ AddAmmo = Magazine AddDevice = HDFirearm PresetName = M60 - Description = Light machine gun. It's portability combined with steady rate of fire and large ammo capacity makes it a deadly weapon. + Description = The most fearsome machine gun the Ronin have to offer. Its sheer firepower is offset only by its poor accuracy. AddToGroup = Weapons AddToGroup = Weapons - Primary AddToGroup = Weapons - Heavy @@ -119,7 +119,7 @@ AddDevice = HDFirearm FilePath = Ronin.rte/Devices/Weapons/M60/M60.png FrameCount = 1 SpriteOffset = Vector - X = -17 + X = -16 Y = -4 EntryWound = AEmitter CopyOf = Dent Metal @@ -142,18 +142,18 @@ AddDevice = HDFirearm JointStrength = 100 JointStiffness = 0.5 JointOffset = Vector - X = -9 - Y = 2 + X = -6 + Y = 3 DrawAfterParent = 0 StanceOffset = Vector X = 3 Y = 7 SharpStanceOffset = Vector X = 2 - Y = 0 + Y = 1 SupportOffset = Vector - X = 0 - Y = 2 + X = 1 + Y = 3 SharpLength = 200 Magazine = Magazine CopyOf = Magazine Ronin M60 @@ -188,14 +188,14 @@ AddDevice = HDFirearm SharpShakeRange = 3 NoSupportFactor = 2 ParticleSpreadRange = 0 - ShellSpreadRange = 8 + ShellSpreadRange = 16 ShellAngVelRange = 2 MuzzleOffset = Vector - X = 18 + X = 19 Y = 0 EjectionOffset = Vector - X = -3 - Y = -2 + X = -2 + Y = -1 AddGib = Gib GibParticle = MOPixel CopyOf = Spark Yellow 1 diff --git a/Ronin.rte/Devices/Weapons/M60/M60.png b/Ronin.rte/Devices/Weapons/M60/M60.png index 945700da8..ea53dd983 100644 Binary files a/Ronin.rte/Devices/Weapons/M60/M60.png and b/Ronin.rte/Devices/Weapons/M60/M60.png differ diff --git a/Ronin.rte/Devices/Weapons/M79/M79.ini b/Ronin.rte/Devices/Weapons/M79/M79.ini index 0ec04341d..d8f82c6c4 100644 --- a/Ronin.rte/Devices/Weapons/M79/M79.ini +++ b/Ronin.rte/Devices/Weapons/M79/M79.ini @@ -131,7 +131,7 @@ AddAmmo = Round Shell = MOSParticle CopyOf = Small Smoke Ball 1 FireVelocity = 30 - ShellVelocity = 0 + ShellVelocity = 3 Separation = 5 @@ -260,8 +260,8 @@ AddDevice = HDFirearm SharpShakeRange = 1 NoSupportFactor = 1 ParticleSpreadRange = 0 - ShellSpreadRange = 8 - ShellAngVelRange = 0 + ShellSpreadRange = 1 + ShellEjectAngle = 0 MuzzleOffset = Vector X = 12 Y = 0 diff --git a/Ronin.rte/Devices/Weapons/MP5K/MP5K.ini b/Ronin.rte/Devices/Weapons/MP5K/MP5K.ini index ca4e4662b..e366bd0b7 100644 --- a/Ronin.rte/Devices/Weapons/MP5K/MP5K.ini +++ b/Ronin.rte/Devices/Weapons/MP5K/MP5K.ini @@ -11,7 +11,7 @@ AddAmmo = Round AirResistance = 0.02 AirThreshold = 50 LifeTime = 700 - Sharpness = 60 + Sharpness = 45 HitsMOs = 1 GetsHitByMOs = 0 Color = Color @@ -188,7 +188,7 @@ AddDevice = HDFirearm SharpShakeRange = 4 NoSupportFactor = 1.6 ParticleSpreadRange = 1 - ShellSpreadRange = 8 + ShellSpreadRange = 16 ShellAngVelRange = 2 MuzzleOffset = Vector X = 7 diff --git a/Ronin.rte/Devices/Weapons/Model590/Model590.ini b/Ronin.rte/Devices/Weapons/Model590/Model590.ini index fa9bacd76..f346708fa 100644 --- a/Ronin.rte/Devices/Weapons/Model590/Model590.ini +++ b/Ronin.rte/Devices/Weapons/Model590/Model590.ini @@ -1,3 +1,14 @@ +/////////////////////////////////////////////////////////////////////// +// Model 590 Sounds + + +AddSoundContainer = SoundContainer + PresetName = Ronin Model 590 Cock Sound + AttenuationStartDistance = 120 + AddSound = ContentFile + FilePath = Ronin.rte/Devices/Weapons/Model590/Sounds/Chamber.flac + + /////////////////////////////////////////////////////////////////////// // Model 590 Ammo @@ -8,11 +19,11 @@ AddAmmo = Round Particle = MOPixel PresetName = Particle Ronin Model 590 ScriptPath = Base.rte/Devices/Shared/Scripts/ShotgunPellet.lua - Mass = 0.22 + Mass = 0.2 AirResistance = 0.035 RestThreshold = 500 LifeTime = 500 - Sharpness = 4.4 + Sharpness = 4.8 HitsMOs = 1 GetsHitByMOs = 0 Color = Color @@ -134,7 +145,7 @@ AddDevice = HDFirearm FilePath = Ronin.rte/Devices/Weapons/Model590/Sounds/Insert5.flac AddSound = ContentFile FilePath = Ronin.rte/Devices/Weapons/Model590/Sounds/Insert6.flac - RecoilTransmission = 0.8 + RecoilTransmission = 0.7 RateOfFire = 108 ReloadTime = 250 FullAuto = 0 diff --git a/Ronin.rte/Devices/Weapons/Model590/Model590.lua b/Ronin.rte/Devices/Weapons/Model590/Model590.lua index b2fbe59ac..5b7af7c36 100644 --- a/Ronin.rte/Devices/Weapons/Model590/Model590.lua +++ b/Ronin.rte/Devices/Weapons/Model590/Model590.lua @@ -1,8 +1,9 @@ function Create(self) self.pullTimer = Timer(); - self.loaded = false; self.rotFactor = math.pi; + + self.cockSound = CreateSoundContainer("Ronin Model 590 Cock Sound", "Ronin.rte"); end function Update(self) local actor = self:GetRootParent(); @@ -16,10 +17,9 @@ function Update(self) self.rotFactor = math.pi; end if not self.loaded and self.RoundInMagCount > 0 and not self.reloadCycle then - self:Deactivate(); if self.pullTimer:IsPastSimMS(15000/self.RateOfFire) then if not self.playedSound then - AudioMan:PlaySound("Ronin.rte/Devices/Weapons/Model590/Sounds/Chamber.flac", self.Pos); + self.cockSound:Play(self.Pos); self.playedSound = true; end if self.shell then diff --git a/Ronin.rte/Devices/Weapons/RPG7/RPG7.ini b/Ronin.rte/Devices/Weapons/RPG7/RPG7.ini index 7e9d6ad11..f5b410233 100644 --- a/Ronin.rte/Devices/Weapons/RPG7/RPG7.ini +++ b/Ronin.rte/Devices/Weapons/RPG7/RPG7.ini @@ -277,7 +277,7 @@ AddAmmo = Magazine JointStrength = 200 JointStiffness = 1 ParentOffset = Vector - X = 15 + X = 14 Y = -1 DrawAfterParent = 0 RoundCount = 1 @@ -302,11 +302,12 @@ AddDevice = HDFirearm HitsMOs = 0 GetsHitByMOs = 1 ScriptPath = Base.rte/Devices/Shared/Scripts/AutoReload.lua + ScriptPath = Ronin.rte/Devices/Weapons/RPG7/RPG7.lua SpriteFile = ContentFile FilePath = Ronin.rte/Devices/Weapons/RPG7/RPGLauncher.png FrameCount = 1 SpriteOffset = Vector - X = -17 + X = -18 Y = -6 EntryWound = AEmitter CopyOf = Dent Metal @@ -329,17 +330,17 @@ AddDevice = HDFirearm JointStrength = 100 JointStiffness = 0.5 JointOffset = Vector - X = 2 + X = 1 Y = 4 DrawAfterParent = 0 StanceOffset = Vector - X = 8 + X = 7 Y = 1 SharpStanceOffset = Vector - X = 9 + X = 8 Y = 1 SupportOffset = Vector - X = 10 + X = 9 Y = 5 SharpLength = 250 Magazine = Magazine @@ -368,12 +369,21 @@ AddDevice = HDFirearm SharpShakeRange = 1 NoSupportFactor = 1 ParticleSpreadRange = 0 + ShellSpreadRange = 1 + ShellEjectAngle = 0 MuzzleOffset = Vector - X = 15 + X = 14 Y = 0 EjectionOffset = Vector - X = -17 + X = -19 Y = 1 + AddPieSlice = Slice + Description = Insert Ammo + Direction = 2 + Icon = Icon + CopyOf = Ronin Shovel Icon + ScriptPath = Ronin.rte/Devices/Weapons/RPG7/RPG7Pie.lua + FunctionName = RoninRPGSwitchAmmo AddGib = Gib GibParticle = MOPixel CopyOf = Spark Yellow 1 diff --git a/Ronin.rte/Devices/Weapons/RPG7/RPG7.lua b/Ronin.rte/Devices/Weapons/RPG7/RPG7.lua new file mode 100644 index 000000000..3d5a12f6e --- /dev/null +++ b/Ronin.rte/Devices/Weapons/RPG7/RPG7.lua @@ -0,0 +1,10 @@ +function Update(self) + if self:DoneReloading() then + self:SetNextMagazineName("Magazine Ronin RPG-7"); + end +end +function OnPieMenu(self) + if not (self:GetRootParent():HasObject("Shovel") and (not self.Magazine or self.Magazine.PresetName ~= "Magazine Ronin Shovel Shot")) then + ToGameActivity(ActivityMan:GetActivity()):RemovePieMenuSlice("Insert Ammo", "RoninRPGSwitchAmmo"); + end +end \ No newline at end of file diff --git a/Ronin.rte/Devices/Weapons/RPG7/RPG7Pie.lua b/Ronin.rte/Devices/Weapons/RPG7/RPG7Pie.lua new file mode 100644 index 000000000..85b641fa4 --- /dev/null +++ b/Ronin.rte/Devices/Weapons/RPG7/RPG7Pie.lua @@ -0,0 +1,12 @@ +function RoninRPGSwitchAmmo(actor) + local gun = ToAHuman(actor).EquippedItem; + if gun and actor:HasObject("Shovel") then + local gun = ToHDFirearm(gun); + local magSwitchName = "Magazine Ronin Shovel Shot"; + if gun.Magazine == nil or gun.Magazine.PresetName ~= magSwitchName then + actor:RemoveInventoryItem("Shovel"); + gun:SetNextMagazineName(magSwitchName); + gun:Reload(); + end + end +end \ No newline at end of file diff --git a/Ronin.rte/Devices/Weapons/RocketPropelledChainsaw/RPCShot.lua b/Ronin.rte/Devices/Weapons/RocketPropelledChainsaw/RPCShot.lua index d141933ef..1382899c9 100644 --- a/Ronin.rte/Devices/Weapons/RocketPropelledChainsaw/RPCShot.lua +++ b/Ronin.rte/Devices/Weapons/RocketPropelledChainsaw/RPCShot.lua @@ -6,18 +6,10 @@ function Create(self) self.angleCorrectionRatio = 0.8; self.toGibCounter = 0; - self.dismemberTimer = Timer(); self.dismemberStrength = 300; - self.length = ToMOSprite(self):GetSpriteWidth(); + self.length = ToMOSprite(self):GetSpriteWidth() * 0.5; end function Update(self) - for i = 1, 2 do - local randomVec = Vector(math.random(3), 0):RadRotate(math.random() * (math.pi * 2)); - local part = randomVec.Magnitude < 1 and CreateMOSParticle("Small Smoke Ball 1") or CreateMOSParticle("Tiny Smoke Ball 1"); - part.Pos = self.Pos + randomVec; - part.Vel = self.Vel/i + randomVec; - MovableMan:AddParticle(part); - end self.AngularVel = self.AngularVel * 0.99; self.Vel = self.Vel * 0.99; @@ -33,35 +25,37 @@ function Update(self) if moCheck ~= rte.NoMOID then local mo = MovableMan:GetMOFromID(moCheck); if mo then - local moVelFactor = mo.Vel * (0.7 - 0.7/(math.sqrt(mo.Mass/self.Mass + 1))); - self.Vel = self.Vel/math.sqrt(velFactor + 1) + moVelFactor + Vector(2/(velFactor + 1), 0):RadRotate(self.firstAngle); + if mo.Material.StructuralIntegrity > self.Mass * self.Sharpness then + local dist = SceneMan:ShortestDistance(self.Pos, mo.Pos, SceneMan.SceneWrapsX); + self:AddWound(CreateAEmitter(self:GetEntryWoundPresetName()), Vector(math.random(1 + self.length), 0), true); + + self.Vel = (mo.Vel - dist:SetMagnitude(self.Vel.Magnitude):RadRotate(RangeRand(-1, 1))) * 0.5; + self.AngularVel = self.AngularVel + math.random(-5, 5); + else + local moVelFactor = mo.Vel * (0.7 - 0.7/(math.sqrt(mo.Mass/self.Mass + 1))); + self.Vel = self.Vel/math.sqrt(velFactor + 1) + moVelFactor + Vector(2/(velFactor + 1) * self.FlipFactor, 0):RadRotate(self.firstAngle); - self.AngularVel = self.AngularVel * 0.9 + math.random(-1, 1); - self.angleCorrectionRatio = self.angleCorrectionRatio - 0.02; - --Count towards gib counter as well (the -1 revert still applies, making this net + 0.5) - self.toGibCounter = self.toGibCounter + 1.5; - for i = 1, velFactor do - local randVel = Vector(velFactor, 0):RadRotate(math.random() * (math.pi * 2)); - local pix = CreateMOPixel("Ronin Chainsaw Saw Pixel ".. math.random(2)); - pix.Pos = self.Pos; - pix.Vel = randVel + Vector((50 + velFactor) * self.FlipFactor, 0):RadRotate(self.RotAngle); - MovableMan:AddParticle(pix); - end - if self.dismemberTimer:IsPastSimMS(100) then - self.dismemberTimer:Reset(); + self.AngularVel = self.AngularVel * 0.9 + math.random(-1, 1); + self.angleCorrectionRatio = self.angleCorrectionRatio - 0.02; + --Count towards gib counter as well (the -1 revert still applies, making this net + 0.5) + self.toGibCounter = self.toGibCounter + 1.5; + for i = 1, velFactor do + local randVel = Vector(velFactor, 0):RadRotate(math.random() * (math.pi * 2)); + local pix = CreateMOPixel("Ronin Chainsaw Saw Pixel ".. math.random(2)); + pix.Pos = self.Pos; + pix.Vel = randVel + Vector((50 + velFactor) * self.FlipFactor, 0):RadRotate(self.RotAngle); + MovableMan:AddParticle(pix); + end if IsAttachable(mo) and ToAttachable(mo):IsAttached() and not (IsHeldDevice(mo) or IsThrownDevice(mo)) then mo = ToAttachable(mo); - if math.random(self.dismemberStrength) > mo.JointStrength then - mo.JointStrength = -1; - mo.GetsHitByMOs = false; + local jointPos = mo.Pos + Vector(mo.JointOffset.X * mo.FlipFactor, mo.JointOffset.Y):RadRotate(mo.RotAngle); + if SceneMan:ShortestDistance(self.Pos, jointPos, SceneMan.SceneWrapsX).Magnitude < 3 and math.random(self.dismemberStrength) > mo.JointStrength then + ToMOSRotating(mo:GetParent()):RemoveAttachable(mo.UniqueID, true, true); end end end end end - if self.lifeTimer:IsPastSimMS(4000) then - self.toGib = true; - end if self.Vel.Magnitude < 2 then --Countdown to explode if too still self.toGibCounter = self.toGibCounter + 1; local newVel = Vector(-3/(self.Vel.Magnitude + 1) * self.FlipFactor, 0):RadRotate(self.RotAngle + RangeRand(-1.5, 1.5)); @@ -70,21 +64,14 @@ function Update(self) self.toGibCounter = math.abs(self.toGibCounter - 1); --Revert gib countdown if math.random() < self.angleCorrectionRatio then --Maintain straighter angle, making it easier to go through lots of objects - self.AngularVel = self.AngularVel * 0.99 - (self.RotAngle - self.firstAngle); - self.RotAngle = (self.RotAngle + self.Vel.AbsRadAngle + self.firstAngle)/3; + if math.abs(self.RotAngle) < math.pi then + self.AngularVel = self.AngularVel * 0.99 - (self.RotAngle - self.firstAngle) * 2; + self.RotAngle = self.RotAngle * (1 - self.OrientToVel) + self.firstAngle * self.OrientToVel; + end end end if self.toGibCounter == 60 then --60 frames have passed while still (or 90 inside a MO) - self.toGib = true; - end - if self.toGib then - local explosion = CreateMOSRotating("Ronin RPC Explosion"); - explosion.Pos = self.Pos; - explosion:GibThis(); - MovableMan:AddParticle(explosion); - self.ToDelete = true; - else - self.ToDelete = false; + self:GibThis(); end self.lastAngle = self.RotAngle; end \ No newline at end of file diff --git a/Ronin.rte/Devices/Weapons/RocketPropelledChainsaw/RocketPropelledChainsaw.ini b/Ronin.rte/Devices/Weapons/RocketPropelledChainsaw/RocketPropelledChainsaw.ini index e3dd7761b..f9861eb87 100644 --- a/Ronin.rte/Devices/Weapons/RocketPropelledChainsaw/RocketPropelledChainsaw.ini +++ b/Ronin.rte/Devices/Weapons/RocketPropelledChainsaw/RocketPropelledChainsaw.ini @@ -1,120 +1,37 @@ -/////////////////////////////////////////////////////////////////////// -// RPC Effects - - -AddEffect = MOSRotating - PresetName = Ronin RPC Explosion - Mass = 0 - HitsMOs = 0 - GetsHitByMOs = 0 - SpriteFile = ContentFile - FilePath = Base.rte/Null.png - FrameCount = 1 - SpriteOffset = Vector - X = -1 - Y = -1 - AtomGroup = AtomGroup - AutoGenerate = 1 - Material = Material - CopyOf = Concrete - Resolution = 2 - Depth = 0 - DeepGroup = AtomGroup - AutoGenerate = 1 - Material = Material - CopyOf = Concrete - Resolution = 4 - Depth = 1 - DeepCheck = 1 - GibSound = SoundContainer - AttenuationStartDistance = 230 - AddSound = ContentFile - FilePath = Base.rte/Sounds/Explosions/Explode1.flac - AddSound = ContentFile - FilePath = Base.rte/Sounds/Explosions/Explode2.flac - AddSound = ContentFile - FilePath = Base.rte/Sounds/Explosions/Explode3.flac - AddGib = Gib - GibParticle = MOSParticle - CopyOf = Gib Metal Rust Tiny A - Count = 3 - Spread = 3.14 - MaxVelocity = 30 - MinVelocity = 10 - AddGib = Gib - GibParticle = MOSParticle - CopyOf = Gib Metal Grey Tiny A - Count = 3 - Spread = 3.14 - MaxVelocity = 30 - MinVelocity = 10 - AddGib = Gib - GibParticle = MOPixel - CopyOf = Grenade Fragment Gray - Count = 11 - MinVelocity = 20 - MaxVelocity = 40 - AddGib = Gib - GibParticle = MOPixel - CopyOf = Grenade Fragment Yellow - Count = 11 - MinVelocity = 20 - MaxVelocity = 40 - AddGib = Gib - GibParticle = MOPixel - CopyOf = Air Blast - Count = 11 - MinVelocity = 20 - MaxVelocity = 50 - AddGib = Gib - GibParticle = MOSParticle - CopyOf = Fire Puff Large - Count = 3 - Spread = 3.14 - MaxVelocity = 4 - MinVelocity = 1 - InheritsVel = 0 - LifeVariation = 0.10 - AddGib = Gib - GibParticle = MOSParticle - CopyOf = Fire Puff Medium - Count = 4 - Spread = 3.14 - MinVelocity = 8 - MaxVelocity = 2 - InheritsVel = 0 - LifeVariation = 0.10 - AddGib = Gib - GibParticle = PEmitter - CopyOf = Fuel Fire Trace Black - Count = 3 - Spread = 3.14 - MaxVelocity = 12 - MinVelocity = 4 - InheritsVel = 0 - LifeVariation = 0.10 - - /////////////////////////////////////////////////////////////////////// // RPC Ammo AddEffect = AEmitter PresetName = Particle Ronin RPC Shot - Mass = 20 + LifeTime = 4000 + Mass = 10 + Sharpness = 1 RestThreshold = -500 - OrientToVel = 0.1 + OrientToVel = 0.2 GlobalAccScalar = 0.2 AirThreshold = 10 HitsMOs = 0 GetsHitByMOs = 0 ScriptPath = Ronin.rte/Devices/Weapons/RocketPropelledChainsaw/RPCShot.lua + ScriptPath = Base.rte/Scripts/Shared/GibOverLifeTime.lua + ScriptPath = Base.rte/Scripts/Shared/SmokeTrail.lua + AddCustomValue = NumberValue + SmokeTrailLifeTime = 1000 + AddCustomValue = NumberValue + SmokeTrailTwirl = 5 SpriteFile = ContentFile FilePath = Ronin.rte/Devices/Weapons/RocketPropelledChainsaw/RPC.png FrameCount = 1 SpriteOffset = Vector X = -11 Y = -2.5 + EntryWound = AEmitter + CopyOf = Dent Metal + PresetName = Dent RPC + BurstSound = SoundContainer + CopyOf = Ricochet + BurstScale = 5 AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -145,8 +62,8 @@ AddEffect = AEmitter EmittedParticle = MOPixel CopyOf = Jetpack Blast 1 Spread = 0.1 - MaxVelocity = 20 - MinVelocity = 15 + MaxVelocity = 15 + MinVelocity = 10 PushesEmitter = 1 ParticlesPerMinute = 4000 AddEmission = Emission @@ -179,6 +96,122 @@ AddEffect = AEmitter Flash = Attachable CopyOf = Muzzle Flash Pistol FlashOnlyOnBurst = 0 + GibWoundLimit = 2 + AddGib = Gib + GibParticle = MOPixel + CopyOf = Spark Yellow 1 + Count = 10 + MaxVelocity = 20 + MinVelocity = 10 + LifeVariation = 0.5 + AddGib = Gib + GibParticle = MOPixel + CopyOf = Drop Oil + Count = 5 + MaxVelocity = 10 + MinVelocity = 1 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Dark Micro A + Offset = Vector + X = -5 + Y = 0 + MaxVelocity = 1 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Panel Orange Tiny A + Offset = Vector + X = -3 + Y = 0 + MaxVelocity = 1 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Panel Orange Micro A + Offset = Vector + X = -3 + Y = 0 + MaxVelocity = 1 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Grey Tiny A + Offset = Vector + X = 2 + Y = 0 + MaxVelocity = 1 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Grey Tiny A + Offset = Vector + X = 8 + Y = 0 + MaxVelocity = 1 + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Gib Pipe Small C + Offset = Vector + X = 5 + Y = 0 + MaxVelocity = 1 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Grey Micro A + Offset = Vector + X = 10 + Y = 0 + MaxVelocity = 1 + GibSound = SoundContainer + AttenuationStartDistance = 230 + AddSound = ContentFile + FilePath = Base.rte/Sounds/Explosions/Explode1.flac + AddSound = ContentFile + FilePath = Base.rte/Sounds/Explosions/Explode2.flac + AddSound = ContentFile + FilePath = Base.rte/Sounds/Explosions/Explode3.flac + AddGib = Gib + GibParticle = MOPixel + CopyOf = Grenade Fragment Gray + Count = 11 + MinVelocity = 20 + MaxVelocity = 40 + AddGib = Gib + GibParticle = MOPixel + CopyOf = Grenade Fragment Yellow + Count = 11 + MinVelocity = 20 + MaxVelocity = 40 + AddGib = Gib + GibParticle = MOPixel + CopyOf = Air Blast + Count = 11 + MinVelocity = 20 + MaxVelocity = 50 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Fire Puff Large + Count = 3 + Spread = 3.14 + MaxVelocity = 4 + MinVelocity = 1 + InheritsVel = 0 + LifeVariation = 0.10 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Fire Puff Medium + Count = 4 + Spread = 3.14 + MinVelocity = 8 + MaxVelocity = 2 + InheritsVel = 0 + LifeVariation = 0.10 + AddGib = Gib + GibParticle = PEmitter + CopyOf = Fuel Fire Trace Black + Count = 3 + Spread = 3.14 + MaxVelocity = 12 + MinVelocity = 4 + InheritsVel = 0 + LifeVariation = 0.10 AddAmmo = Round @@ -191,7 +224,7 @@ AddAmmo = Round PresetName = Ronin RPC Back Blast GlobalAccScalar = -0.4 LifeTime = 420 - FireVelocity = 28 + FireVelocity = 30 ShellVelocity = 8 Separation = -1 @@ -288,6 +321,7 @@ AddDevice = HDFirearm AttenuationStartDistance = 150 AddSound = ContentFile FilePath = Ronin.rte/Devices/Weapons/RocketPropelledChainsaw/Sounds/ReloadEnd.flac + RecoilTransmission = 0.1 RateOfFire = 60 ReloadTime = 4000 FullAuto = 0 diff --git a/Ronin.rte/Devices/Weapons/SPAS12/SPAS12.ini b/Ronin.rte/Devices/Weapons/SPAS12/SPAS12.ini index b7394d982..f45f6979e 100644 --- a/Ronin.rte/Devices/Weapons/SPAS12/SPAS12.ini +++ b/Ronin.rte/Devices/Weapons/SPAS12/SPAS12.ini @@ -1,3 +1,14 @@ +/////////////////////////////////////////////////////////////////////// +// SPAS12 Sounds + + +AddSoundContainer = SoundContainer + PresetName = Ronin SPAS 12 Cock Sound + AttenuationStartDistance = 120 + AddSound = ContentFile + FilePath = Ronin.rte/Devices/Weapons/SPAS12/Sounds/Chamber.flac + + /////////////////////////////////////////////////////////////////////// // SPAS12 Ammo @@ -73,6 +84,7 @@ AddDevice = HDFirearm GetsHitByMOs = 1 ScriptPath = Base.rte/Devices/Shared/Scripts/ShotgunReload.lua ScriptPath = Base.rte/Devices/Shared/Scripts/RecoilTilt.lua + ScriptPath = Ronin.rte/Devices/Weapons/SPAS12/SPAS12.lua AddCustomValue = NumberValue RecoilAngleVariation = 0.3 SpriteFile = ContentFile diff --git a/Ronin.rte/Devices/Weapons/SPAS12/SPAS12.lua b/Ronin.rte/Devices/Weapons/SPAS12/SPAS12.lua new file mode 100644 index 000000000..8fe283db2 --- /dev/null +++ b/Ronin.rte/Devices/Weapons/SPAS12/SPAS12.lua @@ -0,0 +1,42 @@ +function Create(self) + self.pullTimer = Timer(); + self.loaded = false; + self.rotFactor = math.pi; + + self.cockSound = CreateSoundContainer("Ronin SPAS 12 Cock Sound", "Ronin.rte"); +end +function Update(self) + local actor = self:GetRootParent(); + if not (actor and IsAHuman(actor)) then + self.pullTimer:Reset(); + end + if self.FiredFrame and self.RoundInMagCount == 0 then + self.loaded = false; + self.playedSound = false; + self.rotFactor = math.pi; + end + if not self.loaded and self.RoundInMagCount > 0 and not self.reloadCycle then + self:Deactivate(); + if self.pullTimer:IsPastSimMS(30000/self.RateOfFire) then + if not self.playedSound then + self.cockSound:Play(self.Pos); + self.playedSound = true; + end + self.Frame = 1; + self.SupportOffset = Vector(-2, 4); + local rotTotal = math.sin(self.rotFactor) * 0.2; + self.RotAngle = self.RotAngle + self.FlipFactor * rotTotal; + local jointOffset = Vector(self.JointOffset.X * self.FlipFactor, self.JointOffset.Y):RadRotate(self.RotAngle); + self.Pos = self.Pos - jointOffset + Vector(jointOffset.X, jointOffset.Y):RadRotate(-rotTotal * self.FlipFactor); + self.rotFactor = self.rotFactor - 0.15; + end + if self.rotFactor <= 0 then + self.loaded = true; + self.Frame = 0; + self.SupportOffset = Vector(1, 3); + self.rotFactor = 0; + end + else + self.pullTimer:Reset(); + end +end \ No newline at end of file diff --git a/Ronin.rte/Devices/Weapons/Stoner63/Sounds/Chamber.flac b/Ronin.rte/Devices/Weapons/Stoner63/Sounds/Chamber.flac new file mode 100644 index 000000000..099129a30 Binary files /dev/null and b/Ronin.rte/Devices/Weapons/Stoner63/Sounds/Chamber.flac differ diff --git a/Ronin.rte/Devices/Weapons/Stoner63/Sounds/Fire1.flac b/Ronin.rte/Devices/Weapons/Stoner63/Sounds/Fire1.flac new file mode 100644 index 000000000..e1ac66f3d Binary files /dev/null and b/Ronin.rte/Devices/Weapons/Stoner63/Sounds/Fire1.flac differ diff --git a/Ronin.rte/Devices/Weapons/Stoner63/Sounds/Fire2.flac b/Ronin.rte/Devices/Weapons/Stoner63/Sounds/Fire2.flac new file mode 100644 index 000000000..9cac4f310 Binary files /dev/null and b/Ronin.rte/Devices/Weapons/Stoner63/Sounds/Fire2.flac differ diff --git a/Ronin.rte/Devices/Weapons/Stoner63/Sounds/Fire3.flac b/Ronin.rte/Devices/Weapons/Stoner63/Sounds/Fire3.flac new file mode 100644 index 000000000..71470fdb8 Binary files /dev/null and b/Ronin.rte/Devices/Weapons/Stoner63/Sounds/Fire3.flac differ diff --git a/Ronin.rte/Devices/Weapons/Stoner63/Sounds/Fire4.flac b/Ronin.rte/Devices/Weapons/Stoner63/Sounds/Fire4.flac new file mode 100644 index 000000000..0d617be7d Binary files /dev/null and b/Ronin.rte/Devices/Weapons/Stoner63/Sounds/Fire4.flac differ diff --git a/Ronin.rte/Devices/Weapons/Stoner63/Sounds/NonBelt/Fire1.flac b/Ronin.rte/Devices/Weapons/Stoner63/Sounds/NonBelt/Fire1.flac new file mode 100644 index 000000000..0de5f6587 Binary files /dev/null and b/Ronin.rte/Devices/Weapons/Stoner63/Sounds/NonBelt/Fire1.flac differ diff --git a/Ronin.rte/Devices/Weapons/Stoner63/Sounds/NonBelt/Fire2.flac b/Ronin.rte/Devices/Weapons/Stoner63/Sounds/NonBelt/Fire2.flac new file mode 100644 index 000000000..62329244b Binary files /dev/null and b/Ronin.rte/Devices/Weapons/Stoner63/Sounds/NonBelt/Fire2.flac differ diff --git a/Ronin.rte/Devices/Weapons/Stoner63/Sounds/NonBelt/Fire3.flac b/Ronin.rte/Devices/Weapons/Stoner63/Sounds/NonBelt/Fire3.flac new file mode 100644 index 000000000..f75825744 Binary files /dev/null and b/Ronin.rte/Devices/Weapons/Stoner63/Sounds/NonBelt/Fire3.flac differ diff --git a/Ronin.rte/Devices/Weapons/Stoner63/Sounds/NonBelt/Fire4.flac b/Ronin.rte/Devices/Weapons/Stoner63/Sounds/NonBelt/Fire4.flac new file mode 100644 index 000000000..29f98d8d2 Binary files /dev/null and b/Ronin.rte/Devices/Weapons/Stoner63/Sounds/NonBelt/Fire4.flac differ diff --git a/Ronin.rte/Devices/Weapons/Stoner63/Sounds/NonBelt/ReloadEnd.flac b/Ronin.rte/Devices/Weapons/Stoner63/Sounds/NonBelt/ReloadEnd.flac new file mode 100644 index 000000000..558d14849 Binary files /dev/null and b/Ronin.rte/Devices/Weapons/Stoner63/Sounds/NonBelt/ReloadEnd.flac differ diff --git a/Ronin.rte/Devices/Weapons/Stoner63/Sounds/NonBelt/ReloadStart.flac b/Ronin.rte/Devices/Weapons/Stoner63/Sounds/NonBelt/ReloadStart.flac new file mode 100644 index 000000000..1c5098555 Binary files /dev/null and b/Ronin.rte/Devices/Weapons/Stoner63/Sounds/NonBelt/ReloadStart.flac differ diff --git a/Ronin.rte/Devices/Weapons/Stoner63/Sounds/ReloadEnd.flac b/Ronin.rte/Devices/Weapons/Stoner63/Sounds/ReloadEnd.flac new file mode 100644 index 000000000..cf65bf099 Binary files /dev/null and b/Ronin.rte/Devices/Weapons/Stoner63/Sounds/ReloadEnd.flac differ diff --git a/Ronin.rte/Devices/Weapons/Stoner63/Sounds/ReloadStart.flac b/Ronin.rte/Devices/Weapons/Stoner63/Sounds/ReloadStart.flac new file mode 100644 index 000000000..5d7c2ea3e Binary files /dev/null and b/Ronin.rte/Devices/Weapons/Stoner63/Sounds/ReloadStart.flac differ diff --git a/Ronin.rte/Devices/Weapons/Stoner63/Stoner63.ini b/Ronin.rte/Devices/Weapons/Stoner63/Stoner63.ini new file mode 100644 index 000000000..71256420e --- /dev/null +++ b/Ronin.rte/Devices/Weapons/Stoner63/Stoner63.ini @@ -0,0 +1,256 @@ +/////////////////////////////////////////////////////////////////////// +// Stoner 63 Ammo + + +AddAmmo = Round + PresetName = Round Ronin Stoner 63 + ParticleCount = 1 + Particle = MOPixel + PresetName = Bullet Ronin Stoner 63 + Mass = 0.25 + AirResistance = 0.005 + AirThreshold = 80 + LifeTime = 800 + Sharpness = 12 + HitsMOs = 1 + GetsHitByMOs = 0 + WoundDamageMultiplier = 1.15 + Color = Color + R = 184 + G = 153 + B = 118 + Atom = Atom + Material = Material + CopyOf = Bullet Metal + TrailColor = Color + R = 184 + G = 153 + B = 118 + TrailLength = 37 + Shell = MOSParticle + CopyOf = Casing Long + FireVelocity = 125 + ShellVelocity = 13 + Separation = 1 + + +AddAmmo = Round + PresetName = Tracer Ronin Stoner 63 + ParticleCount = 1 + Particle = MOPixel + CopyOf = Bullet Ronin Stoner 63 + PresetName = Tracer Ronin Stoner 63 + Mass = 0.3 + Sharpness = 10 + Color = Color + R = 250 + G = 246 + B = 145 + Atom = Atom + Material = Material + CopyOf = Bullet Metal + TrailColor = Color + R = 250 + G = 246 + B = 145 + TrailLength = 44 + Shell = MOSParticle + CopyOf = Casing Long + FireVelocity = 125 + ShellVelocity = 10 + Separation = 1 + + +AddAmmo = Magazine + PresetName = Magazine Ronin Stoner 63 + Mass = 4 + HitsMOs = 0 + GetsHitByMOs = 0 + CollidesWithTerrainWhileAttached = 1 + SpriteFile = ContentFile + FilePath = Ronin.rte/Devices/Weapons/Stoner63/Stoner63Magazine.png + FrameCount = 1 + SpriteOffset = Vector + X = -3 + Y = -4 + AtomGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Military Stuff + Resolution = 2 + Depth = 0 + DeepGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Military Stuff + Resolution = 3 + Depth = 1 + DeepCheck = 0 + JointStrength = 200 + JointStiffness = 1 + ParentOffset = Vector + X = -2 + Y = 3 + DrawAfterParent = 1 + RoundCount = 75 + RTTRatio = 5 + RegularRound = Round + CopyOf = Round Ronin Stoner 63 + TracerRound = Round + CopyOf = Tracer Ronin Stoner 63 + + +/////////////////////////////////////////////////////////////////////// +// Stoner 63 + + +AddDevice = HDFirearm + PresetName = Stoner 63 + Description = Light machine gun. Its portability combined with steady rate of fire and large ammo capacity makes it a deadly weapon. + AddToGroup = Weapons + AddToGroup = Weapons - Primary + AddToGroup = Weapons - Heavy + Mass = 19 + HitsMOs = 0 + GetsHitByMOs = 1 + ScriptPath = Base.rte/Devices/Shared/Scripts/RecoilTilt.lua + AddCustomValue = NumberValue + RecoilRevertSpeed = 0.9 + SpriteFile = ContentFile + FilePath = Ronin.rte/Devices/Weapons/Stoner63/Stoner63.png + FrameCount = 1 + SpriteOffset = Vector + X = -16 + Y = -5 + EntryWound = AEmitter + CopyOf = Dent Metal + ExitWound = AEmitter + CopyOf = Dent Metal + GoldValue = 90 + AtomGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Military Stuff + Resolution = 4 + Depth = 0 + DeepGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Military Stuff + Resolution = 4 + Depth = 10 + DeepCheck = 0 + JointStrength = 100 + JointStiffness = 0.5 + JointOffset = Vector + X = -7 + Y = 4 + DrawAfterParent = 0 + StanceOffset = Vector + X = 3 + Y = 7 + SharpStanceOffset = Vector + X = 2 + Y = 1 + SupportOffset = Vector + X = 1 + Y = 3 + SharpLength = 175 + Magazine = Magazine + CopyOf = Magazine Ronin Stoner 63 + Flash = Attachable + CopyOf = Muzzle Flash Shotgun + FireSound = SoundContainer + AttenuationStartDistance = 190 + AddSound = ContentFile + FilePath = Ronin.rte/Devices/Weapons/Stoner63/Sounds/Fire1.flac + AddSound = ContentFile + FilePath = Ronin.rte/Devices/Weapons/Stoner63/Sounds/Fire2.flac + AddSound = ContentFile + FilePath = Ronin.rte/Devices/Weapons/Stoner63/Sounds/Fire3.flac + AddSound = ContentFile + FilePath = Ronin.rte/Devices/Weapons/Stoner63/Sounds/Fire4.flac + EmptySound = SoundContainer + AddSound = ContentFile + FilePath = Base.rte/Sounds/Devices/EmptyClick1.flac + ReloadStartSound = SoundContainer + AttenuationStartDistance = 120 + AddSound = ContentFile + FilePath = Ronin.rte/Devices/Weapons/Stoner63/Sounds/ReloadStart.flac + ReloadEndSound = SoundContainer + AttenuationStartDistance = 140 + AddSound = ContentFile + FilePath = Ronin.rte/Devices/Weapons/Stoner63/Sounds/ReloadEnd.flac + RateOfFire = 700 + ReloadTime = 2300 + FullAuto = 1 + FireIgnoresThis = 1 + ShakeRange = 9 + SharpShakeRange = 4 + NoSupportFactor = 2 + ParticleSpreadRange = 0 + ShellSpreadRange = 16 + ShellAngVelRange = 2 + MuzzleOffset = Vector + X = 16 + Y = -1 + EjectionOffset = Vector + X = -3 + Y = -1 + AddGib = Gib + GibParticle = MOPixel + CopyOf = Spark Yellow 1 + Count = 6 + Spread = 2.25 + MaxVelocity = 20 + MinVelocity = 8 + AddGib = Gib + GibParticle = MOPixel + CopyOf = Spark Yellow 2 + Count = 5 + Spread = 2.25 + MaxVelocity = 20 + MinVelocity = 8 + AddGib = Gib + GibParticle = MOPixel + CopyOf = Drop Oil + Count = 6 + Spread = 2.25 + MaxVelocity = 10 + MinVelocity = 1 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Rust Micro A + Count = 12 + Spread = 2.25 + MaxVelocity = 15 + MinVelocity = 5 + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Metal Grey Micro A + Count = 15 + Spread = 2.25 + MaxVelocity = 15 + MinVelocity = 5 + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Gib Ronin Weapon A + Count = 1 + Spread = 2.25 + MaxVelocity = 10 + MinVelocity = 1 + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Gib Ronin Weapon B + Count = 1 + Spread = 2.25 + MaxVelocity = 10 + MinVelocity = 1 + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Gib Ronin Weapon D + Count = 1 + Spread = 2.25 + MaxVelocity = 10 + MinVelocity = 1 + GibWoundLimit = 10 \ No newline at end of file diff --git a/Ronin.rte/Devices/Weapons/Stoner63/Stoner63.png b/Ronin.rte/Devices/Weapons/Stoner63/Stoner63.png new file mode 100644 index 000000000..ad236a48b Binary files /dev/null and b/Ronin.rte/Devices/Weapons/Stoner63/Stoner63.png differ diff --git a/Ronin.rte/Devices/Weapons/Stoner63/Stoner63Magazine.png b/Ronin.rte/Devices/Weapons/Stoner63/Stoner63Magazine.png new file mode 100644 index 000000000..919b42ce3 Binary files /dev/null and b/Ronin.rte/Devices/Weapons/Stoner63/Stoner63Magazine.png differ diff --git a/Ronin.rte/Devices/Weapons/UZI/UZI.ini b/Ronin.rte/Devices/Weapons/UZI/UZI.ini index 178ca6e8d..59ca271fe 100644 --- a/Ronin.rte/Devices/Weapons/UZI/UZI.ini +++ b/Ronin.rte/Devices/Weapons/UZI/UZI.ini @@ -188,7 +188,7 @@ AddDevice = HDFirearm SharpShakeRange = 3 NoSupportFactor = 1.4 ParticleSpreadRange = 1 - ShellSpreadRange = 8 + ShellSpreadRange = 16 ShellAngVelRange = 2 MuzzleOffset = Vector X = 9 diff --git a/Ronin.rte/Effects/Wounds.ini b/Ronin.rte/Effects/Wounds.ini index 74a8c74ac..88bd81719 100644 --- a/Ronin.rte/Effects/Wounds.ini +++ b/Ronin.rte/Effects/Wounds.ini @@ -4,7 +4,6 @@ AddEffect = AEmitter PresetName = Wound Ronin Apparel - LifeTime = 10 Mass = 0.0001 HitsMOs = 0 GetsHitByMOs = 0 diff --git a/Ronin.rte/Loadouts.ini b/Ronin.rte/Loadouts.ini index 9a045acd9..57818870f 100644 --- a/Ronin.rte/Loadouts.ini +++ b/Ronin.rte/Loadouts.ini @@ -21,8 +21,8 @@ AddActor = AHuman AddActor = AHuman CopyOf = Ronin Heavy PresetName = Ronin Infantry CQB - Description = Ronin Soldier equipped with a protective mask, shotgun and secondary weapons. - GoldValue = 140 + Description = Ronin Soldier equipped with protective gear, shotgun and secondary weapons. + GoldValue = 150 Buyable = 0 @@ -75,6 +75,8 @@ AddLoadout = Loadout PresetName = Ronin.rte/Desert Eagle AddCargoItem = HDFirearm PresetName = Ronin.rte/Desert Eagle + AddCargoItem = HDFirearm + PresetName = Base.rte/Constructor AddLoadout = Loadout diff --git a/Ronin.rte/Loadouts.lua b/Ronin.rte/Loadouts.lua index ed2c76f48..2b3391268 100644 --- a/Ronin.rte/Loadouts.lua +++ b/Ronin.rte/Loadouts.lua @@ -8,14 +8,13 @@ RoninLoadouts["Light"]["Tertiary"] = {"Luger P08", "Beretta 93R", "Shovel", "Med RoninLoadouts["Light"]["Throwable"] = {"M67 Grenade", "M24 Potato Masher", "Molotov Cocktail"}; RoninLoadouts["Heavy"]["Headgear"] = {"Soldier Helmet", "Motorcycle Helmet", "Dummy Mask", "Browncoat Mask"}; -RoninLoadouts["Heavy"]["Armor"] = {"Chest Plate"}; -RoninLoadouts["Heavy"]["Primary"] = {"M60"}; +RoninLoadouts["Heavy"]["Primary"] = {"M60", "Stoner 63"}; RoninLoadouts["Heavy"]["Secondary"] = {"Luger P08", "Beretta 93R"}; RoninLoadouts["Heavy"]["Tertiary"] = {"Luger P08", "Beretta 93R"}; RoninLoadouts["CQB"]["Headgear"] = {"Dummy Mask", "Browncoat Mask"}; RoninLoadouts["CQB"]["Primary"] = {"Model 590", "SPAS 12"}; -RoninLoadouts["CQB"]["Secondary"] = {".357 Magnum", "Desert Eagle", "UZI", "MP5K"}; +RoninLoadouts["CQB"]["Secondary"] = {".357 Magnum", "Desert Eagle", "UZI", "MP5K", "Sawed-Off Shotgun"}; RoninLoadouts["CQB"]["Tertiary"] = {"Luger P08", "Beretta 93R", "Chainsaw"}; RoninLoadouts["Grenadier"]["Headgear"] = {"Soldier Helmet"}; diff --git a/Techion.rte/Actors/Infantry/SilverMan/SilverMan.ini b/Techion.rte/Actors/Infantry/SilverMan/SilverMan.ini index 313ba8660..cc2b00d09 100644 --- a/Techion.rte/Actors/Infantry/SilverMan/SilverMan.ini +++ b/Techion.rte/Actors/Infantry/SilverMan/SilverMan.ini @@ -165,9 +165,9 @@ AddActor = Attachable X = -5 Y = -5 EntryWound = AEmitter - CopyOf = Dent Metal Heavy + CopyOf = Dent Metal Techion ExitWound = AEmitter - CopyOf = Dent Metal Heavy + CopyOf = Dent Metal Techion AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -181,12 +181,12 @@ AddActor = Attachable Resolution = 8 Depth = 2 DeepCheck = 1 - JointStrength = 220 + JointStrength = 250 JointStiffness = 0.3 BreakWound = AEmitter CopyOf = Dent Metal Heavy ParentBreakWound = AEmitter - CopyOf = Dent Metal Heavy + CopyOf = Leaking Machinery JointOffset = Vector X = 0 Y = 4 @@ -247,7 +247,7 @@ AddActor = Attachable Spread = 2.25 MaxVelocity = 2 MinVelocity = 0 - GibImpulseLimit = 110 + GibImpulseLimit = 500 GibWoundLimit = 9 @@ -263,9 +263,9 @@ AddActor = Arm X = -7 Y = -4 EntryWound = AEmitter - CopyOf = Dent Metal Heavy + CopyOf = Dent Metal Techion ExitWound = AEmitter - CopyOf = Dent Metal Heavy + CopyOf = Dent Metal Techion AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -339,7 +339,7 @@ AddActor = Arm Spread = 2.25 MaxVelocity = 15 MinVelocity = 5 - GibImpulseLimit = 45 + GibImpulseLimit = 720 GibWoundLimit = 8 @@ -364,9 +364,9 @@ AddActor = Attachable X = -3 Y = -1 EntryWound = AEmitter - CopyOf = Dent Metal Heavy + CopyOf = Dent Metal Techion ExitWound = AEmitter - CopyOf = Dent Metal Heavy + CopyOf = Dent Metal Techion AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -411,9 +411,9 @@ AddActor = Leg X = -7 Y = -6 EntryWound = AEmitter - CopyOf = Dent Metal Heavy + CopyOf = Dent Metal Techion ExitWound = AEmitter - CopyOf = Dent Metal Heavy + CopyOf = Dent Metal Techion AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -436,7 +436,7 @@ AddActor = Leg JointOffset = Vector X = -6 Y = 1 - DrawAfterParent = 0 + DrawAfterParent = 1 Foot = Attachable CopyOf = Techion Silver Man FG Foot ParentOffset = Vector @@ -494,7 +494,7 @@ AddActor = Leg Spread = 2.25 MaxVelocity = 15 MinVelocity = 5 - GibImpulseLimit = 75 + GibImpulseLimit = 1000 GibWoundLimit = 8 @@ -525,9 +525,9 @@ AddActor = AHuman X = -4 Y = -10 EntryWound = AEmitter - CopyOf = Dent Metal Heavy + CopyOf = Dent Metal Techion ExitWound = AEmitter - CopyOf = Dent Metal Heavy + CopyOf = Dent Metal Techion AtomGroup = AtomGroup AutoGenerate = 1 Material = Material @@ -548,7 +548,7 @@ AddActor = AHuman DeathSound = SoundContainer CopyOf = Robot Death DeviceSwitchSound = SoundContainer - CopyOf = Device Switch + CopyOf = Robot Stride Health = 100 ImpulseDamageThreshold = 2800 AimDistance = 30 @@ -569,6 +569,7 @@ AddActor = AHuman Y = -3 DrawAfterParent = 0 JumpTime = 2 + JumpAngleRange = 0.2 FGArm = Arm CopyOf = Techion Silver Man FG Arm ParentOffset = Vector @@ -621,6 +622,9 @@ AddActor = AHuman CopyOf = Human Walk Path CrouchLimbPath = LimbPath CopyOf = Human Crouch Path + CrouchLimbPathBG = LimbPath + CopyOf = Human Crouch Path BG + CrouchRotAngleTarget = -0.5 CrawlLimbPath = LimbPath CopyOf = Human Crawl Path ArmCrawlLimbPath = LimbPath diff --git a/Techion.rte/Actors/Infantry/WhiteBot/BodyA.png b/Techion.rte/Actors/Infantry/WhiteBot/BodyA.png index 9898e4c3f..3c2f04fe1 100644 Binary files a/Techion.rte/Actors/Infantry/WhiteBot/BodyA.png and b/Techion.rte/Actors/Infantry/WhiteBot/BodyA.png differ diff --git a/Techion.rte/Actors/Infantry/WhiteBot/ChestPlateA.png b/Techion.rte/Actors/Infantry/WhiteBot/ChestPlateA.png index 8e7c22706..5d0827e42 100644 Binary files a/Techion.rte/Actors/Infantry/WhiteBot/ChestPlateA.png and b/Techion.rte/Actors/Infantry/WhiteBot/ChestPlateA.png differ diff --git a/Techion.rte/Actors/Infantry/WhiteBot/HeadA.png b/Techion.rte/Actors/Infantry/WhiteBot/HeadA.png index 3a1cda956..84e5d23df 100644 Binary files a/Techion.rte/Actors/Infantry/WhiteBot/HeadA.png and b/Techion.rte/Actors/Infantry/WhiteBot/HeadA.png differ diff --git a/Techion.rte/Actors/Infantry/WhiteBot/LegFGA000.png b/Techion.rte/Actors/Infantry/WhiteBot/LegFGA000.png index 6a4462c09..4d4ebf29e 100644 Binary files a/Techion.rte/Actors/Infantry/WhiteBot/LegFGA000.png and b/Techion.rte/Actors/Infantry/WhiteBot/LegFGA000.png differ diff --git a/Techion.rte/Actors/Infantry/WhiteBot/LegFGA001.png b/Techion.rte/Actors/Infantry/WhiteBot/LegFGA001.png index ee2047f8f..5c2f6e356 100644 Binary files a/Techion.rte/Actors/Infantry/WhiteBot/LegFGA001.png and b/Techion.rte/Actors/Infantry/WhiteBot/LegFGA001.png differ diff --git a/Techion.rte/Actors/Infantry/WhiteBot/LegFGA002.png b/Techion.rte/Actors/Infantry/WhiteBot/LegFGA002.png index b2bfd759a..f1cbe0a6d 100644 Binary files a/Techion.rte/Actors/Infantry/WhiteBot/LegFGA002.png and b/Techion.rte/Actors/Infantry/WhiteBot/LegFGA002.png differ diff --git a/Techion.rte/Actors/Infantry/WhiteBot/LegFGA003.png b/Techion.rte/Actors/Infantry/WhiteBot/LegFGA003.png index 1c73487d0..859b457d3 100644 Binary files a/Techion.rte/Actors/Infantry/WhiteBot/LegFGA003.png and b/Techion.rte/Actors/Infantry/WhiteBot/LegFGA003.png differ diff --git a/Techion.rte/Actors/Infantry/WhiteBot/LegFGA004.png b/Techion.rte/Actors/Infantry/WhiteBot/LegFGA004.png index 90778164c..74b2295f9 100644 Binary files a/Techion.rte/Actors/Infantry/WhiteBot/LegFGA004.png and b/Techion.rte/Actors/Infantry/WhiteBot/LegFGA004.png differ diff --git a/Techion.rte/Actors/Infantry/WhiteBot/LegFGA005.png b/Techion.rte/Actors/Infantry/WhiteBot/LegFGA005.png index a9630c4d1..c6f47378f 100644 Binary files a/Techion.rte/Actors/Infantry/WhiteBot/LegFGA005.png and b/Techion.rte/Actors/Infantry/WhiteBot/LegFGA005.png differ diff --git a/Techion.rte/Actors/Infantry/WhiteBot/WhiteBot.ini b/Techion.rte/Actors/Infantry/WhiteBot/WhiteBot.ini index 9f45ee690..fe2851823 100644 --- a/Techion.rte/Actors/Infantry/WhiteBot/WhiteBot.ini +++ b/Techion.rte/Actors/Infantry/WhiteBot/WhiteBot.ini @@ -117,7 +117,7 @@ AddActor = Attachable FrameCount = 1 SpriteOffset = Vector X = -6 - Y = -8 + Y = -7 EntryWound = AEmitter CopyOf = Dent Metal ExitWound = AEmitter @@ -145,7 +145,16 @@ AddActor = Attachable X = 0 Y = 0 DrawAfterParent = 1 - GibImpulseLimit = 3000 + AddGib = Gib + GibParticle = MOSRotating + CopyOf = Gib Panel Dark Small A + AddGib = Gib + GibParticle = MOSParticle + CopyOf = Gib Panel Dark Tiny A + Count = 5 + MaxVelocity = 15 + MinVelocity = 5 + GibImpulseLimit = 2000 GibWoundLimit = 12 @@ -181,7 +190,7 @@ AddActor = Attachable Resolution = 6 Depth = 3 DeepCheck = 0 - JointStrength = 220 + JointStrength = 250 JointStiffness = 0.3 BreakWound = AEmitter CopyOf = Leaking Machinery @@ -310,7 +319,7 @@ AddActor = Arm Spread = 2.25 MaxVelocity = 15 MinVelocity = 5 - GibImpulseLimit = 1000 + GibImpulseLimit = 720 GibWoundLimit = 6 @@ -404,7 +413,7 @@ AddActor = Leg JointOffset = Vector X = -5 Y = 0 - DrawAfterParent = 0 + DrawAfterParent = 1 Foot = Attachable CopyOf = Techion Whitebot Foot FG ParentOffset = Vector @@ -462,7 +471,7 @@ AddActor = Leg Spread = 2.25 MaxVelocity = 15 MinVelocity = 5 - GibImpulseLimit = 2500 + GibImpulseLimit = 1000 GibWoundLimit = 7 @@ -518,7 +527,7 @@ AddActor = AHuman DeathSound = SoundContainer CopyOf = Robot Death DeviceSwitchSound = SoundContainer - CopyOf = Device Switch + CopyOf = Servo Sound Health = 100 ImpulseDamageThreshold = 3000 AimDistance = 30 @@ -531,7 +540,7 @@ AddActor = AHuman CopyOf = Techion Whitebot Chest Plate A ParentOffset = Vector X = 1 - Y = 0 + Y = -1 Head = Attachable CopyOf = Techion Whitebot Head ParentOffset = Vector @@ -557,7 +566,7 @@ AddActor = AHuman FGLeg = Leg CopyOf = Techion Whitebot Leg FG ParentOffset = Vector - X = 0 + X = -1 Y = 4 BGLeg = Leg CopyOf = Techion Whitebot Leg BG @@ -626,22 +635,22 @@ AddActor = AHuman X = -3 Y = 1 AddSegment = Vector - X = 0 - Y = -2 + X = 1 + Y = -3 + AddSegment = Vector + X = 7 + Y = -4 + EndSegCount = 2 SlowTravelSpeed = 1.5 NormalTravelSpeed = 4 FastTravelSpeed = 6 PushForce = 6000 + WalkRotAngleTarget = -0.1 CrouchLimbPath = LimbPath - PresetName = Whitebot Crouch Path - StartOffset = Vector - X = 12 - Y = 0 - StartSegCount = 0 - SlowTravelSpeed = 0.1 - NormalTravelSpeed = 0.5 - FastTravelSpeed = 1.5 - PushForce = 5000 + CopyOf = Human Crouch Path + CrouchLimbPathBG = LimbPath + CopyOf = Human Crouch Path BG + CrouchRotAngleTarget = -0.7 CrawlLimbPath = LimbPath PresetName = Whitebot Crawl Path StartOffset = Vector diff --git a/Techion.rte/Actors/Shared.ini b/Techion.rte/Actors/Shared.ini index 2a011eb2a..5e0bdc883 100644 --- a/Techion.rte/Actors/Shared.ini +++ b/Techion.rte/Actors/Shared.ini @@ -2,6 +2,66 @@ // Actors Shared Assets +AddEffect = AEmitter + PresetName = Dent Metal Techion + Mass = 0.0001 + HitsMOs = 0 + GetsHitByMOs = 0 + SpriteFile = ContentFile + FilePath = Base.rte/Effects/Wounds/MetalWoundB.png + FrameCount = 1 + SpriteOffset = Vector + X = -2 + Y = -2 + AtomGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Military Stuff + Resolution = 2 + Depth = 5 + DeepGroup = AtomGroup + AutoGenerate = 1 + Material = Material + CopyOf = Military Stuff + Resolution = 3 + Depth = 5 + DeepCheck = 0 + JointStrength = 10000 + JointStiffness = 1 + DrawAfterParent = 1 + AddEmission = Emission + EmittedParticle = MOPixel + CopyOf = Spark Blue 1 + LifeVariation = 0.25 + StopTimeMS = 50 + Spread = 0.2 + MaxVelocity = 20 + MinVelocity = 8 + BurstSize = 5 + ParticlesPerMinute = 2500 + AddEmission = Emission + EmittedParticle = MOSParticle + CopyOf = Tiny Smoke Ball 1 Glow Blue + PresetName = Tiny Smoke Ball 1 Glow Blue Short + LifeTime = 200 + EffectStopTime = 200 + LifeVariation = 0.50 + Spread = 0.1 + MaxVelocity = 16 + MinVelocity = 12 + BurstSize = 1 + ParticlesPerMinute = 0 + PushesEmitter = 0 + BurstSound = SoundContainer + CopyOf = Metal Penetration Hit //Replace with custom sound!! + EmissionEnabled = 1 + EmissionsIgnoreThis = 1 + BurstScale = 2 + BurstDamage = 1 + BurstTriggered = 1 + EmissionDamage = 0 + + AddEffect = AEmitter PresetName = Techion Jetpack Mass = 0 diff --git a/Techion.rte/Devices/Explosives/WarpGrenade/WarpGrenade.lua b/Techion.rte/Devices/Explosives/WarpGrenade/WarpGrenade.lua index 9cb6c11f7..11ac668d7 100644 --- a/Techion.rte/Devices/Explosives/WarpGrenade/WarpGrenade.lua +++ b/Techion.rte/Devices/Explosives/WarpGrenade/WarpGrenade.lua @@ -28,7 +28,7 @@ function Update(self) MovableMan:AddParticle(effect); effect:GibThis(); - self.holder.Pos = self.Pos + Vector(0, -self.holder.Radius * 1.5); + self.holder.Pos = self.Pos + Vector(0, -self.holder.Radius * 0.5); self.holder:FlashWhite(200); --Telefrag! Kill actors if you teleport directly on top of them for actor in MovableMan.Actors do diff --git a/Techion.rte/Devices/Shared.ini b/Techion.rte/Devices/Shared.ini index 78c8f6138..e9e590b95 100644 --- a/Techion.rte/Devices/Shared.ini +++ b/Techion.rte/Devices/Shared.ini @@ -119,16 +119,11 @@ AddEffect = AEmitter MinVelocity = -5 LifeVariation = 0.50 BurstSound = SoundContainer - AddSound = ContentFile - FilePath = Techion.rte/Devices/Shared/Sounds/LaserDissipate1.flac - AddSound = ContentFile - FilePath = Techion.rte/Devices/Shared/Sounds/LaserDissipate2.flac - AddSound = ContentFile - FilePath = Techion.rte/Devices/Shared/Sounds/LaserDissipate3.flac + CopyOf = Dissipate Sound AddEffect = MOPixel - PresetName = Techion Pulse Shot Trail Glow + PresetName = Particle Techion Pulse Shot Trail Glow Mass = 0 LifeTime = 500 RestThreshold = -500 @@ -150,13 +145,6 @@ AddEffect = MOPixel EffectStopStrength = 0.0 -AddEffect = MOPixel - CopyOf = Techion Pulse Shot Trail Glow - PresetName = Techion Pulse Shot Trail Glow Small - ScreenEffect = ContentFile - FilePath = Base.rte/Effects/Glows/BlueSmall.png - - AddParticle = MOPixel PresetName = Particle Techion Pulse Shot ScriptPath = Techion.rte/Devices/Shared/Scripts/PulseShot.lua diff --git a/Techion.rte/Devices/Shared/Scripts/Disintegrator.lua b/Techion.rte/Devices/Shared/Scripts/Disintegrator.lua index 19fb86155..38975aa46 100644 --- a/Techion.rte/Devices/Shared/Scripts/Disintegrator.lua +++ b/Techion.rte/Devices/Shared/Scripts/Disintegrator.lua @@ -3,6 +3,8 @@ function Create(self) self.effectSpeed = 0.01; self.setScale = 1; self.minScale = 0.1; + + self.disintegrationSound = CreateSoundContainer("Disintegration Sound", "Techion.rte"); local target; local strength = math.random(self.PinStrength * 0.5, self.PinStrength); @@ -52,8 +54,8 @@ function Create(self) self.target.MissionCritical = true; --This ensures that the target Actor doesn't settle during the effect self.target.HitsMOs = false; self.target.AngularVel = self.target.AngularVel * 0.5 - self.target.Vel.X + self.target.FlipFactor; - - AudioMan:PlaySound("Techion.rte/Devices/Shared/Sounds/Disintegrate".. math.random(3) ..".flac", self.target.Pos); + + self.disintegrationSound:Play(self.target.Pos); end --Flag this actor as being hit by a disintegrator particle ToActor(target):SetNumberValue("ToDisintegrate", ToActor(target):GetNumberValue("ToDisintegrate") + 1); diff --git a/Techion.rte/Devices/Shared/Scripts/PulseShot.lua b/Techion.rte/Devices/Shared/Scripts/PulseShot.lua index b43ae147e..564e5f122 100644 --- a/Techion.rte/Devices/Shared/Scripts/PulseShot.lua +++ b/Techion.rte/Devices/Shared/Scripts/PulseShot.lua @@ -4,7 +4,7 @@ function Create(self) --Check backward (second argument) on the first frame as the projectile might be bouncing off something immediately PulsarDissipate(self, true); - self.trailPar = CreateMOPixel("Techion Pulse Shot Trail Glow"); + self.trailPar = CreateMOPixel(self.PresetName .. " Trail Glow", "Techion.rte"); self.trailPar.Pos = self.Pos - (self.Vel * rte.PxTravelledPerFrame); self.trailPar.Vel = self.Vel * 0.1; self.trailPar.Lifetime = 60; @@ -15,25 +15,30 @@ function Update(self) if self.explosion then self.ToDelete = true; else - PulsarDissipate(self, false); + if PulsarDissipate(self, false) == false then + self.EffectRotAngle = self.Vel.AbsRadAngle; + end if self.trailPar and MovableMan:IsParticle(self.trailPar) then - self.trailPar.Pos = self.Pos - Vector(self.Vel.X, self.Vel.Y):SetMagnitude(6); + self.trailPar.Pos = self.Pos - Vector(self.Vel.X, self.Vel.Y):SetMagnitude(self.TrailLength - 1); self.trailPar.Vel = self.Vel * 0.5; self.trailPar.Lifetime = self.Age + TimerMan.DeltaTimeMS; + else + self.trailPar = nil; end end - self.EffectRotAngle = self.Vel.AbsRadAngle; end function PulsarDissipate(self, inverted) + self.lastVel = self.lastVel or Vector(self.Vel.X, self.Vel.Y); local trace = inverted and Vector(-self.Vel.X, -self.Vel.Y):SetMagnitude(GetPPM()) or Vector(self.Vel.X, self.Vel.Y):SetMagnitude(self.Vel.Magnitude * rte.PxTravelledPerFrame + 1); - local hit; - local hitPos = Vector(); + local hit = false; + local hitPos = Vector(self.Pos.X, self.Pos.Y); local skipPx = math.sqrt(self.Vel.Magnitude) * 0.5; - local ray = SceneMan:CastObstacleRay(self.Pos, trace, hitPos, Vector(), self.ID, self.Team, rte.airID, skipPx); - if ray >= 0 then - local mo = MovableMan:GetMOFromID(SceneMan:GetMOIDPixel(hitPos.X, hitPos.Y)); + local moid = SceneMan:CastObstacleRay(self.Pos, trace, hitPos, Vector(), self.ID, self.Team, rte.airID, skipPx) >= 0 and SceneMan:GetMOIDPixel(hitPos.X, hitPos.Y) or self.HitWhatMOID; + + if moid ~= rte.NoMOID then + local mo = MovableMan:GetMOFromID(moid); if mo then hit = true; @@ -41,16 +46,18 @@ function PulsarDissipate(self, inverted) melt.Pos = self.Pos; melt.Team = self.Team; melt.Sharpness = mo.RootID; - melt.PinStrength = self.disintegrationStrength; + melt.PinStrength = self.disintegrationStrength or 1; MovableMan:AddMO(melt); - else - local penetration = self.Mass * self.Sharpness * self.Vel.Magnitude; - if SceneMan:GetMaterialFromID(SceneMan:GetTerrMatter(hitPos.X, hitPos.Y)).StructuralIntegrity > penetration then - hit = true; - end + end + else + local penetration = self.Mass * self.Sharpness * self.Vel.Magnitude; + if SceneMan:GetMaterialFromID(SceneMan:GetTerrMatter(hitPos.X, hitPos.Y)).StructuralIntegrity > penetration then + hit = true; + elseif self.Vel.Magnitude < self.lastVel.Magnitude * 0.5 then + hit = true; end end - if hit or self.Vel.Magnitude < 5 then + if hit then local offset = Vector(self.Vel.X, self.Vel.Y):SetMagnitude(skipPx); self.explosion = CreateAEmitter("Techion.rte/Laser Dissipate Effect"); self.explosion.Pos = hitPos - offset; @@ -59,6 +66,9 @@ function PulsarDissipate(self, inverted) self.explosion.Vel = offset; MovableMan:AddParticle(self.explosion); end + self.lastVel = Vector(self.Vel.X, self.Vel.Y); + + return hit; end --[[ To-do: Use this system instead function OnCollideWithMO(self, mo, parentMO) diff --git a/Techion.rte/Devices/Tools/Nanolyzer/Nanolyzer.lua b/Techion.rte/Devices/Tools/Nanolyzer/Nanolyzer.lua index 987b39ed4..75b7faf9b 100644 --- a/Techion.rte/Devices/Tools/Nanolyzer/Nanolyzer.lua +++ b/Techion.rte/Devices/Tools/Nanolyzer/Nanolyzer.lua @@ -19,14 +19,16 @@ function Create(self) --How many pixels to skip when detecting MOs, for optimization reasons self.skipPixels = 1; + + --Sounds + self.dissipateSound = CreateSoundContainer("Dissipate Sound", "Techion.rte"); + self.disintegrationSound = CreateSoundContainer("Disintegration Sound", "Techion.rte"); end function Update(self) if self.FiredFrame then - local aimAngle = self.RotAngle; - if self.HFlipped then - aimAngle = aimAngle + math.pi; - end + local aimAngle = self.HFlipped and self.RotAngle + math.pi or self.RotAngle; + local aimVec = Vector(self.range, 0):RadRotate(aimAngle); local aimUp = Vector(aimVec.X, aimVec.Y):RadRotate(math.pi * 0.5):Normalize(); local hitPos = Vector(); @@ -49,8 +51,9 @@ function Update(self) glow.Pos = hitPos; MovableMan:AddParticle(glow); - if not self.sound or not self.sound:IsBeingPlayed() then - self.sound = AudioMan:PlaySound("Techion.rte/Devices/Shared/Sounds/LaserDissipate".. math.random(3) ..".flac", hitPos, -1, 0, 128, RangeRand(0.7, 1.3), math.random(100), false); + if self.dissipateSound:IsBeingPlayed() then + self.dissipateSound.Pitch = RangeRand(RangeRand(0.7, 1.3)); + self.dissipateSound:Play(hitPos); end end end @@ -89,8 +92,9 @@ function Update(self) piece.AirResistance = RangeRand(0.1, 0.2); MovableMan:AddParticle(piece); end - if not self.sound or not self.sound:IsBeingPlayed() then - self.sound = AudioMan:PlaySound("Techion.rte/Devices/Shared/Sounds/LaserDissipate".. math.random(3) ..".flac", actor.Pos, -1, 0, 128, RangeRand(0.7, 1.3), math.random(100), false); + if self.dissipateSound:IsBeingPlayed() then + self.dissipateSound.Pitch = RangeRand(RangeRand(0.7, 1.3)); + self.dissipateSound:Play(actor.Pos); end end end @@ -102,8 +106,8 @@ function Update(self) if dustTarget then local parts = {dustTarget}; --Measure the corners of a box that the Actor is supposedly inside of - local topLeft = Vector(-dustTarget.Radius, -dustTarget.Radius); - local bottomRight = Vector(dustTarget.Radius, dustTarget.Radius); + local topLeft = Vector(-dustTarget.IndividualRadius, -dustTarget.IndividualRadius); + local bottomRight = Vector(dustTarget.IndividualRadius, dustTarget.IndividualRadius); for att in dustTarget.Attachables do if IsAttachable(att) then local dist = SceneMan:ShortestDistance(dustTarget.Pos, att.Pos, SceneMan.SceneWrapsX); @@ -150,7 +154,7 @@ function Update(self) glow.Vel = mo.Vel; MovableMan:AddParticle(glow); end - AudioMan:PlaySound("Techion.rte/Devices/Shared/Sounds/DisintegrateAlt".. math.random(3) ..".flac", dustTarget.Pos); + self.disintegrationSound:Play(dustTarget.Pos); dustTarget.ToDelete = true; end end diff --git a/Techion.rte/Devices/Weapons/GigaPulsar/GigaPulsar.ini b/Techion.rte/Devices/Weapons/GigaPulsar/GigaPulsar.ini index e0438ef65..70e2e3302 100644 --- a/Techion.rte/Devices/Weapons/GigaPulsar/GigaPulsar.ini +++ b/Techion.rte/Devices/Weapons/GigaPulsar/GigaPulsar.ini @@ -13,6 +13,8 @@ AddEffect = AEmitter CopyOf = Null AtomGroup JointStrength = 10000 JointStiffness = 1 + EmissionAngle = Matrix + AngleDegrees = 180 BurstSound = SoundContainer AttenuationStartDistance = 120 AddSound = ContentFile @@ -20,12 +22,22 @@ AddEffect = AEmitter AddEmission = Emission EmittedParticle = MOSParticle CopyOf = Small Smoke Ball 1 - ParticlesPerMinute = 1 - BurstSize = 5 + BurstSize = 3 Spread = 0.5 - MaxVelocity = 6 + MaxVelocity = 5 MinVelocity = 0 PushesEmitter = 0 + LifeVariation = 0.3 + AddEmission = Emission + EmittedParticle = MOSParticle + CopyOf = Small Smoke Ball 1 Glow Blue + BurstSize = 3 + Spread = 0.3 + MaxVelocity = 6 + MinVelocity = 1 + PushesEmitter = 0 + LifeVariation = 0.3 + ParticlesPerMinute = 1 EmissionEnabled = 1 EmissionsIgnoreThis = 0 BurstTriggered = 1 diff --git a/Techion.rte/Devices/Weapons/GigaPulsar/GigaPulsar.lua b/Techion.rte/Devices/Weapons/GigaPulsar/GigaPulsar.lua index 86667b81e..c831f2d31 100644 --- a/Techion.rte/Devices/Weapons/GigaPulsar/GigaPulsar.lua +++ b/Techion.rte/Devices/Weapons/GigaPulsar/GigaPulsar.lua @@ -1,6 +1,5 @@ function Create(self) self.dinSound = false; - self.lastAmmo = self.RoundInMagCount; self.origActivationDelay = self.ActivationDelay; self.origDeactivationDelay = self.DeactivationDelay; @@ -9,21 +8,21 @@ end function Update(self) if self.Magazine then self.lastMag = self.Magazine; - self.lastAmmo = self.Magazine.RoundCount; self.dingSound = false; - if self.Magazine.RoundCount <= 0 then + if self.Magazine.RoundCount == 0 then self:Reload(); end else if self.dingSound == false then if MovableMan:IsParticle(self.lastMag) then self.lastMag.Sharpness = 1; - self.lastMag.Vel = self.lastMag.Vel + Vector(-12 * self.FlipFactor, 0):RadRotate(self.RotAngle); + self.lastMag.Vel = self.lastMag.Vel + Vector(-10 * self.FlipFactor, 0):RadRotate(self.RotAngle); - local soundfx = CreateAEmitter("Techion Giga Pulsar Magazine Eject Effect"); - soundfx.Pos = self.lastMag.Pos; - soundfx.RotAngle = Vector(-1 * self.FlipFactor, 0):RadRotate(self.RotAngle).AbsRadAngle; - MovableMan:AddParticle(soundfx); + local effect = CreateAEmitter("Techion Giga Pulsar Magazine Eject Effect", "Techion.rte"); + effect.Pos = self.lastMag.Pos; + effect.RotAngle = self.RotAngle; + effect.HFlipped = self.HFlipped; + MovableMan:AddParticle(effect); end end self.dingSound = true; diff --git a/Techion.rte/Devices/Weapons/GigaPulsar/GigaPulsarMagazine.lua b/Techion.rte/Devices/Weapons/GigaPulsar/GigaPulsarMagazine.lua index f9d4ece5a..a17d5bc17 100644 --- a/Techion.rte/Devices/Weapons/GigaPulsar/GigaPulsarMagazine.lua +++ b/Techion.rte/Devices/Weapons/GigaPulsar/GigaPulsarMagazine.lua @@ -8,8 +8,8 @@ function Update(self) self.smokeDelay = self.smokeDelay * (1 + self.RoundCount/self.Capacity) + 1; local smoke = CreateMOSParticle("Tiny Smoke Ball 1"); - smoke.Pos = self.Pos; - smoke.Vel = self.Vel + Vector(RangeRand(-2.5, 2.5), RangeRand(-2.5, 2.5)); + smoke.Pos = self.Pos + Vector(math.random(-1, 1), math.random(-1, 1)); + smoke.Vel = self.Vel + Vector(RangeRand(-2, 2), RangeRand(-2, 2)); smoke.Lifetime = smoke.Lifetime * RangeRand(0.5, 1.0); MovableMan:AddParticle(smoke); end diff --git a/Techion.rte/Devices/Weapons/MicroPulsar/HomingPulsarShot.lua b/Techion.rte/Devices/Weapons/MicroPulsar/HomingPulsarShot.lua index 179eba1a5..9a496b54a 100644 --- a/Techion.rte/Devices/Weapons/MicroPulsar/HomingPulsarShot.lua +++ b/Techion.rte/Devices/Weapons/MicroPulsar/HomingPulsarShot.lua @@ -1,19 +1,17 @@ function Create(self) - self.disintegrationStrength = 50; - self.adjustmentAmount = 2; + self.adjustmentAmount = 1; self.delayTimer = Timer(); - self.target = null; local longDist = 800; local shortDist = 98; - + --To-do: fix this garbage targeting system? for i = 1, MovableMan:GetMOIDCount() - 1 do local mo = MovableMan:GetMOFromID(i); - if mo and (mo.Team ~= self.Team or mo.ClassName == "TDExplosive" or mo.ClassName == "MOSRotating" or (mo.ClassName == "AEmitter" and mo.RootID == moCheck)) then + if mo and mo.ClassName ~= "ADoor" and (mo.Team ~= self.Team or mo.ClassName == "TDExplosive" or mo.ClassName == "MOSRotating" or (mo.ClassName == "AEmitter" and mo.RootID == moCheck)) then - local distCheck = SceneMan:ShortestDistance(self.Pos, mo.Pos, SceneMan.SceneWrapsX); + local distCheck = SceneMan:ShortestDistance(self.Pos, mo.Pos, SceneMan.SceneWrapsX); if distCheck.Magnitude - mo.Radius < longDist then local toCheckPos = Vector(distCheck.Magnitude, 0):RadRotate(self.Vel.AbsRadAngle); @@ -39,16 +37,9 @@ function Create(self) end end end - PulsarDissipate(self, true); - - self.trailPar = CreateMOPixel("Techion Pulse Shot Trail Glow Small"); - self.trailPar.Pos = self.Pos - (self.Vel * rte.PxTravelledPerFrame); - self.trailPar.Vel = self.Vel * 0.1; - self.trailPar.Lifetime = 60; - MovableMan:AddParticle(self.trailPar); end function Update(self) - if self.delayTimer:IsPastSimMS(25) and self.target ~= null and self.target.ID ~= rte.NoMOID then + if self.delayTimer:IsPastSimMS(25) and self.target and self.target.ID ~= rte.NoMOID then local checkVel = SceneMan:ShortestDistance(self.Pos, self.target.Pos, SceneMan.SceneWrapsX); checkVel = checkVel:SetMagnitude(checkVel.Magnitude - self.target.Radius); if SceneMan:CastStrengthRay(self.Pos, checkVel, 0, Vector(), 3, rte.airID, SceneMan.SceneWrapsX) == false then @@ -56,16 +47,4 @@ function Update(self) self.Vel = Vector(self.Vel.Magnitude, 0):RadRotate(aimVel.AbsRadAngle); end end - self.ToSettle = false; - if self.explosion then - self.ToDelete = true; - else - PulsarDissipate(self, false); - if self.trailPar and MovableMan:IsParticle(self.trailPar) then - self.trailPar.Pos = self.Pos - Vector(self.Vel.X, self.Vel.Y):SetMagnitude(3); - self.trailPar.Vel = self.Vel * 0.5; - self.trailPar.Lifetime = self.Age + TimerMan.DeltaTimeMS; - end - end - self.EffectRotAngle = self.Vel.AbsRadAngle; end \ No newline at end of file diff --git a/Techion.rte/Devices/Weapons/MicroPulsar/MicroPulsar.ini b/Techion.rte/Devices/Weapons/MicroPulsar/MicroPulsar.ini index 3911c9c30..f6ea94711 100644 --- a/Techion.rte/Devices/Weapons/MicroPulsar/MicroPulsar.ini +++ b/Techion.rte/Devices/Weapons/MicroPulsar/MicroPulsar.ini @@ -2,20 +2,17 @@ // Micro Pulsar Effects +AddEffect = MOPixel + CopyOf = Particle Techion Pulse Shot Trail Glow + PresetName = Particle Techion Micro Pulsar Trail Glow + ScreenEffect = ContentFile + FilePath = Base.rte/Effects/Glows/BlueSmall.png + + AddParticle = MOPixel + CopyOf = Particle Techion Pulse Shot PresetName = Particle Techion Micro Pulsar ScriptPath = Techion.rte/Devices/Weapons/MicroPulsar/HomingPulsarShot.lua - Mass = 0.01 - RestThreshold = -1 - LifeTime = 500 - Sharpness = 1 - HitsMOs = 0 - GetsHitByMOs = 0 - GlobalAccScalar = 0.1 - Color = Color - R = 255 - G = 255 - B = 255 Atom = Atom Material = Material CopyOf = Air @@ -26,11 +23,6 @@ AddParticle = MOPixel TrailLength = 4 ScreenEffect = ContentFile FilePath = Techion.rte/Devices/Shared/Glows/PulseShotGlowShort.png - EffectAlwaysShows = 1 - EffectStartTime = 1 - EffectStopTime = 500 - EffectStartStrength = 1.0 - EffectStopStrength = 0.6 /////////////////////////////////////////////////////////////////////// diff --git a/Techion.rte/Devices/Weapons/MicroPulsar/MicroPulsar.lua b/Techion.rte/Devices/Weapons/MicroPulsar/MicroPulsar.lua index a26165244..a64f07e5b 100644 --- a/Techion.rte/Devices/Weapons/MicroPulsar/MicroPulsar.lua +++ b/Techion.rte/Devices/Weapons/MicroPulsar/MicroPulsar.lua @@ -18,7 +18,7 @@ function Update(self) local shortDist = 98; for i = 1, MovableMan:GetMOIDCount() - 1 do local mo = MovableMan:GetMOFromID(i); - if mo and (mo.Team ~= self.Team or mo.ClassName == "TDExplosive" or mo.ClassName == "MOSRotating" or (mo.ClassName == "AEmitter" and mo.RootID == moCheck)) then + if mo and mo.ClassName ~= "ADoor" and (mo.Team ~= self.Team or mo.ClassName == "TDExplosive" or mo.ClassName == "MOSRotating" or (mo.ClassName == "AEmitter" and mo.RootID == moCheck)) then local distCheck = SceneMan:ShortestDistance(self.MuzzlePos, mo.Pos, SceneMan.SceneWrapsX); if distCheck.Magnitude - mo.Radius < longDist then diff --git a/Techion.rte/Devices/Weapons/NanoRifle/NanoRifle.ini b/Techion.rte/Devices/Weapons/NanoRifle/NanoRifle.ini index 4a590f49c..f2f50357f 100644 --- a/Techion.rte/Devices/Weapons/NanoRifle/NanoRifle.ini +++ b/Techion.rte/Devices/Weapons/NanoRifle/NanoRifle.ini @@ -25,6 +25,29 @@ AddEffect = MOPixel EffectStopStrength = 0.1 +AddEffect = MOPixel + PresetName = Nano Rifle Trail Glow + Mass = 0 + LifeTime = 780 + RestThreshold = -1 + GlobalAccScalar = 0 + AirThreshold = 1 + HitsMOs = 0 + GetsHitByMOs = 0 + Color = Color + R = 200 + G = 216 + B = 232 + Atom = Atom + Material = Material + CopyOf = Bullet Metal + ScreenEffect = ContentFile + FilePath = Base.rte/Effects/Glows/LightBlueHuge.png + EffectStartStrength = 0.3 + EffectStopStrength = 0.0 + EffectAlwaysShows = 1 + + AddEffect = MOPixel PresetName = Nanobot Damage Mass = 0.01 @@ -61,7 +84,7 @@ AddEffect = MOPixel FilePath = Base.rte/Effects/Glows/BlueTiny.png EffectStartTime = 0 EffectStopTime = 400 - EffectStartStrength = 5 + EffectStartStrength = 1 EffectStopStrength = 0 EffectAlwaysShows = 1 @@ -166,11 +189,11 @@ AddAmmo = Round B = 232 TrailLength = 50 ScreenEffect = ContentFile - FilePath = Base.rte/Effects/Glows/BlueTiny.png + FilePath = Base.rte/Effects/Glows/LightBlueBig.png EffectStartTime = 0 EffectStopTime = 700 - EffectStartStrength = 1 - EffectStopStrength = 0.5 + EffectStartStrength = 0.1 + EffectStopStrength = 0 Shell = MOSParticle CopyOf = Casing FireVelocity = 190 @@ -237,8 +260,8 @@ AddDevice = HDFirearm FilePath = Techion.rte/Devices/Weapons/NanoRifle/NanoRifle.png FrameCount = 2 SpriteOffset = Vector - X = -12 - Y = -3 + X = -13 + Y = -4 EntryWound = AEmitter CopyOf = Dent Metal ExitWound = AEmitter @@ -260,8 +283,8 @@ AddDevice = HDFirearm JointStrength = 100 JointStiffness = 0.5 JointOffset = Vector - X = -7 - Y = 3 + X = -6 + Y = 4 DrawAfterParent = 0 StanceOffset = Vector X = 3 @@ -307,7 +330,7 @@ AddDevice = HDFirearm ShellSpreadRange = 8 ShellAngVelRange = 2 MuzzleOffset = Vector - X = 18 + X = 17 Y = 0 EjectionOffset = Vector X = -1 diff --git a/Techion.rte/Devices/Weapons/NanoRifle/NanoShot.lua b/Techion.rte/Devices/Weapons/NanoRifle/NanoShot.lua index 4d710381c..b512cd4e9 100644 --- a/Techion.rte/Devices/Weapons/NanoRifle/NanoShot.lua +++ b/Techion.rte/Devices/Weapons/NanoRifle/NanoShot.lua @@ -19,22 +19,37 @@ function Create(self) end end end - --Speed at which this can actually activate. self.speedThreshold = 100; self.deleteNextFrame = false; --Check backward. self.CheckCollision(Vector(self.Vel.X, self.Vel.Y):RadRotate(math.pi)); + + self.trailLength = 50; + + self.trailPar = CreateMOPixel("Nano Rifle Trail Glow"); + self.trailPar.Pos = self.Pos; + self.trailPar.Vel = self.Vel * 0.1; + self.trailPar.Lifetime = 60; + MovableMan:AddParticle(self.trailPar); + + self.lastVel = Vector(self.Vel.X, self.Vel.Y); end function Update(self) + if not self.ToDelete and self.trailPar and MovableMan:IsParticle(self.trailPar) then + self.trailPar.Pos = self.Pos - Vector(self.lastVel.X, self.lastVel.Y):SetMagnitude(math.min(self.lastVel.Magnitude * rte.PxTravelledPerFrame, self.trailLength) * 0.5); + self.trailPar.Vel = self.lastVel * 0.5; + self.trailPar.Lifetime = self.Age + TimerMan.DeltaTimeMS; + end if self.deleteNextFrame then self.ToDelete = true; elseif self.Vel.Magnitude >= self.speedThreshold then --Check forward. self.CheckCollision(self.Vel); end + self.lastVel = Vector(self.Vel.X, self.Vel.Y); end function OnCollideWithTerrain(self, terrainID) diff --git a/Techion.rte/Devices/Weapons/NucleoSwarm/NucleoSwarmShot.lua b/Techion.rte/Devices/Weapons/NucleoSwarm/NucleoSwarmShot.lua index e2649a943..d05681d87 100644 --- a/Techion.rte/Devices/Weapons/NucleoSwarm/NucleoSwarmShot.lua +++ b/Techion.rte/Devices/Weapons/NucleoSwarm/NucleoSwarmShot.lua @@ -18,12 +18,11 @@ function Create(self) checkPos = Vector(SceneMan.SceneWidth + checkPos.X, checkPos.Y); end end - local terrCheck = SceneMan:GetTerrMatter(checkPos.X, checkPos.Y); - if terrCheck == rte.airID then + if SceneMan:GetTerrMatter(checkPos.X, checkPos.Y) == rte.airID then local moCheck = SceneMan:GetMOIDPixel(checkPos.X, checkPos.Y); if moCheck ~= rte.NoMOID then local actor = MovableMan:GetMOFromID(MovableMan:GetMOFromID(moCheck).RootID); - if actor.Team ~= self.Team then + if actor and actor.Team ~= self.Team then self.target = actor; break; end @@ -71,7 +70,7 @@ function Update(self) for actor in MovableMan.Actors do if actor.Team ~= self.Team then self.potentialtargetdist = SceneMan:ShortestDistance(self.Pos, actor.Pos, SceneMan.SceneWrapsX); - if (self.lastdist == nil or (self.lastdist ~= nil and self.potentialtargetdist.Magnitude < self.lastdist)) and self.potentialtargetdist.Magnitude <= 500 and SceneMan:CastStrengthRay(self.Pos, self.potentialtargetdist:SetMagnitude(self.potentialtargetdist.Magnitude - actor.Radius), 0, Vector(), 5, 0, SceneMan.SceneWrapsX) == false then + if (self.lastdist == nil or (self.lastdist ~= nil and self.potentialtargetdist.Magnitude < self.lastdist)) and self.potentialtargetdist.Magnitude <= 500 and SceneMan:CastStrengthRay(self.Pos, self.potentialtargetdist:SetMagnitude(self.potentialtargetdist.Magnitude - actor.Radius), 0, Vector(), 5, rte.airID, SceneMan.SceneWrapsX) == false then self.lastdist = self.potentialtargetdist.Magnitude; self.target = actor; self.lasttargetpos = Vector(self.target.Pos.X, self.target.Pos.Y); @@ -85,8 +84,7 @@ function Update(self) self:GibThis(); end - local terrCheck = SceneMan:GetTerrMatter(self.Pos.X, self.Pos.Y); - if terrCheck == rte.airID then + if SceneMan:GetTerrMatter(self.Pos.X, self.Pos.Y) == rte.airID then local moCheck = SceneMan:GetMOIDPixel(self.Pos.X, self.Pos.Y); if moCheck ~= rte.NoMOID then local actor = MovableMan:GetMOFromID(MovableMan:GetMOFromID(moCheck).RootID); diff --git a/Techion.rte/Index.ini b/Techion.rte/Index.ini index 916c02492..15c9d224f 100644 --- a/Techion.rte/Index.ini +++ b/Techion.rte/Index.ini @@ -4,6 +4,7 @@ DataModule FilePath = Techion.rte/ModuleIcon.png Description = The Techion were formed by a small group of elite corporations focusing on high-tech research and manufacture. They are sometimes employed and trusted by the TradeStars to do guard and escort duty. CrabToHumanSpawnRatio = 0 + IncludeFile = Techion.rte/Sounds.ini IncludeFile = Techion.rte/Effects.ini IncludeFile = Techion.rte/Devices.ini IncludeFile = Techion.rte/Actors.ini diff --git a/Techion.rte/Sounds.ini b/Techion.rte/Sounds.ini new file mode 100644 index 000000000..89528ad79 --- /dev/null +++ b/Techion.rte/Sounds.ini @@ -0,0 +1,24 @@ +/////////////////////////////////////////////////////////////////////// +// Sound Effects + + +AddSoundContainer = SoundContainer + PresetName = Dissipate Sound + AttenuationStartDistance = 100 + AddSound = ContentFile + FilePath = Techion.rte/Devices/Shared/Sounds/LaserDissipate1.flac + AddSound = ContentFile + FilePath = Techion.rte/Devices/Shared/Sounds/LaserDissipate2.flac + AddSound = ContentFile + FilePath = Techion.rte/Devices/Shared/Sounds/LaserDissipate3.flac + + +AddSoundContainer = SoundContainer + PresetName = Disintegration Sound + AttenuationStartDistance = 110 + AddSound = ContentFile + FilePath = Techion.rte/Devices/Shared/Sounds/Disintegrate1.flac + AddSound = ContentFile + FilePath = Techion.rte/Devices/Shared/Sounds/Disintegrate2.flac + AddSound = ContentFile + FilePath = Techion.rte/Devices/Shared/Sounds/Disintegrate3.flac \ No newline at end of file diff --git a/Uzira.rte/Actors/Shared/Undead.lua b/Uzira.rte/Actors/Shared/Undead.lua index 7f0666f33..f9fbd4f8b 100644 --- a/Uzira.rte/Actors/Shared/Undead.lua +++ b/Uzira.rte/Actors/Shared/Undead.lua @@ -1,5 +1,6 @@ function Update(self) - if self.FGArm and (self.FGLeg or self.BGLeg) then - self.Health = self.MaxHealth; + if self.Health > 0 and self.FGArm and (self.FGLeg or self.BGLeg) then + local limbs = {self.Head, self.FGArm, self.BGArm, self.FGLeg, self.BGLeg}; + self.Health = self.MaxHealth * (1 - self.WoundCount/self:GetGibWoundLimit(true, false, false)) * #limbs/5; end end \ No newline at end of file diff --git a/Uzira.rte/Actors/Undead/Skeletons/Skeletons.ini b/Uzira.rte/Actors/Undead/Skeletons/Skeletons.ini index d33bfc50a..4e8fe5565 100644 --- a/Uzira.rte/Actors/Undead/Skeletons/Skeletons.ini +++ b/Uzira.rte/Actors/Undead/Skeletons/Skeletons.ini @@ -761,7 +761,7 @@ AddActor = Leg JointOffset = Vector X = -3 Y = 1 - DrawAfterParent = 0 + DrawAfterParent = 1 Foot = Attachable CopyOf = Skeleton FG Foot ParentOffset = Vector diff --git a/Uzira.rte/Actors/Undead/Zombies/Zombies.ini b/Uzira.rte/Actors/Undead/Zombies/Zombies.ini index e4afcad2c..ec42be721 100644 --- a/Uzira.rte/Actors/Undead/Zombies/Zombies.ini +++ b/Uzira.rte/Actors/Undead/Zombies/Zombies.ini @@ -274,7 +274,7 @@ AddEffect = MOSRotating AddActor = Attachable PresetName = Zombie Head A - Mass = 21.71 + Mass = 19 HitsMOs = 1 GetsHitByMOs = 1 SpriteFile = ContentFile @@ -379,7 +379,7 @@ AddActor = Attachable AddActor = Attachable PresetName = Zombie Head B - Mass = 16.22 + Mass = 16 HitsMOs = 1 GetsHitByMOs = 1 SpriteFile = ContentFile @@ -484,7 +484,7 @@ AddActor = Attachable AddActor = Attachable PresetName = Zombie Head C - Mass = 21.71 + Mass = 18 HitsMOs = 1 GetsHitByMOs = 1 SpriteFile = ContentFile @@ -754,7 +754,7 @@ AddEffect = MOSRotating AddActor = Arm PresetName = Zombie Arm FG A - Mass = 23.17 + Mass = 10 HitsMOs = 0 GetsHitByMOs = 1 SpriteFile = ContentFile @@ -911,7 +911,7 @@ AddActor = Attachable AddActor = Leg PresetName = Zombie Leg FG A - Mass = 42.30 + Mass = 15 HitsMOs = 0 GetsHitByMOs = 1 SpriteFile = ContentFile @@ -941,7 +941,7 @@ AddActor = Leg JointOffset = Vector X = -3 Y = 1 - DrawAfterParent = 0 + DrawAfterParent = 1 Foot = Attachable CopyOf = Zombie Foot FG A ParentOffset = Vector @@ -995,7 +995,7 @@ AddActor = Leg AddActor = Leg PresetName = Zombie Leg BG A - Mass = 42.30 + Mass = 15 HitsMOs = 0 GetsHitByMOs = 1 SpriteFile = ContentFile @@ -1075,7 +1075,7 @@ AddActor = Leg AddEffect = Leg PresetName = Zombie Leg FG B - Mass = 47.40 + Mass = 20 HitsMOs = 0 GetsHitByMOs = 1 SpriteFile = ContentFile @@ -1105,7 +1105,7 @@ AddEffect = Leg JointOffset = Vector X = -3 Y = 1 - DrawAfterParent = 0 + DrawAfterParent = 1 Foot = Attachable CopyOf = Zombie Foot FG A ParentOffset = Vector @@ -1177,7 +1177,7 @@ AddEffect = Leg AddEffect = Leg PresetName = Zombie Leg BG B - Mass = 47.40 + Mass = 20 HitsMOs = 0 GetsHitByMOs = 1 SpriteFile = ContentFile @@ -1542,6 +1542,10 @@ AddActor = AHuman NormalTravelSpeed = 2.5 FastTravelSpeed = 4.5 PushForce = 10000 + StandRotAngleTarget = -0.3 + WalkRotAngleTarget = -0.3 + CrouchRotAngleTarget = -0.3 + JumpRotAngleTarget = -0.3 GibImpulseLimit = 1850 GibWoundLimit = 9 GibSound = SoundContainer @@ -1971,6 +1975,10 @@ AddActor = AHuman NormalTravelSpeed = 2.5 FastTravelSpeed = 4.5 PushForce = 10000 + StandRotAngleTarget = -0.2 + WalkRotAngleTarget = -0.2 + CrouchRotAngleTarget = -0.2 + JumpRotAngleTarget = -0.2 GibImpulseLimit = 1950 GibWoundLimit = 14 GibSound = SoundContainer