[CE] Carbon Engine | Revolutionary FPS Combat Technology

Hey, i love this system and everything with it and am working for some time but i came with a problem tho.
Is there a way to modifiy knifing as a whole? The purpose is weird but i would like to have custom knifing animations and functions with it that turns it more to a weapon melee.

Mind if you would like to help?

Yeah, I’d love for that to happen. Also pls let us do custom animations for guns, and fix the scope sens @TridentXR

Custom Animations are technically already possible. If you want to modifiy gun animations you got to edit the server script or the CConfig

1 Like

Amazing, Im sure plenty of games will use this.

Do I use C-Frames? Blender? Roblox Animating? How do I configure the animations??

1 Like

Well you see it works not like you expect it to, it works via distinct coordinates that are tied together and made to instead of clipping or teleport are given the time to move towards each other,

this makes them when timed properly look like they are animating distinctly by different programs like blender or roblox studio.

an prime example of one is here

--// Positioning
	RightArmPos = CFrame.new(-0.833141267, 0.712866187, -1.55439997, 0.99999994, 0, 0, 0, -4.37113883e-08, 1, 0, -1, -4.37113883e-08);
	LeftArmPos = CFrame.new(1.05448234, 1.38951778, -2.68849277, 0.875340223, -0.16773127, 0.453481704, -0.483504236, -0.30026567, 0.822231114, -0.00174888968, -0.938992321, -0.343933403);
	GunPos = CFrame.new(0.204508483, -0.422405183, 1.2574358, 0.99999994, 0, 0, 0, -4.37113883e-08, -1, 0, 1, -4.37113883e-08);
	SprintPos = CFrame.new(0, 0, 0, 0.748408914, -0.36141631, 0.556113422, 0.252163291, 0.930573106, 0.265419006, -0.613430977, -0.05841057, 0.787585199);

the coordinates are the numbers between the Parentheses and form the basic setup for the 1st person gun pose


(example of what it would look like of a M4a1 where the script is from)

when a different one is made and linked with the coordinates you just saw you see the animation’s it makes and switches to this complex sequence that all line up the reload sequence with small but incredibly precise timing

IdleAnim = function(char, speed, objs, armData)
		if not armData[1] then
			ts:Create(objs[2],TweenInfo.new(0.25),{C1 = require(script).RightArmPos}):Play() -- require(script).FakeRightPos (For fake arms) | require(script).RightArmPos (For real arms)
			ts:Create(objs[3],TweenInfo.new(0.25),{C1 = require(script).LeftArmPos}):Play() -- require(script).FakeLeftPos (For fake arms) | require(script).LeftArmPos (For real arms)
			wait(0.18)
		else
			ts:Create(objs[2],TweenInfo.new(0.25),{C1 = require(script).armData[2]}):Play() -- require(script).FakeRightPos (For fake arms) | require(script).RightArmPos (For real arms)
			ts:Create(objs[3],TweenInfo.new(0.25),{C1 = require(script).armData[3]}):Play() -- require(script).FakeLeftPos (For fake arms) | require(script).LeftArmPos (For real arms)
			wait(0.18)
		end
	end;
	
	FireModeAnim = function(char, speed, objs)
		ts:Create(objs[1],TweenInfo.new(0.25),{C1 = CFrame.new(0.340285569, 0, -0.0787199363, 0.962304771, 0.271973342, 0, -0.261981696, 0.926952124, -0.268561482, -0.0730415657, 0.258437991, 0.963262498)}):Play()
		wait(0.1)
		ts:Create(objs[2],TweenInfo.new(0.25),{C1 = CFrame.new(0.67163527, -0.310947895, -1.34432662, 0.766044378, -2.80971371e-008, 0.642787576, -0.620885074, -0.258818865, 0.739942133, 0.166365519, -0.965925872, -0.198266774)}):Play()
		wait(0.25)
		objs[4]:WaitForChild("Click"):Play()		
	end;
	
	ReloadAnim = function(char, speed, objs)
		ts:Create(objs[2],TweenInfo.new(0.5),{C1 = CFrame.new(-1.83314121, 0.112866193, -0.954399943, 0.758022368, -0.558526218, -0.336824089, 0.157115281, -0.344846308, 0.925416529, -0.633021891, -0.75440675, -0.173648208)}):Play()
		ts:Create(objs[3],TweenInfo.new(0.5),{C1 = CFrame.new(-0.570892751, 0.765644431, -2.10391617, 0.545084536, -0.836516321, 0.0558858961, -0.482962906, -0.258818835, 0.836516321, -0.685295284, -0.482962966, -0.545084476)}):Play()
		wait(0.5)		
		
		local MagC = objs[4]:clone()
		MagC:FindFirstChild("Mag"):Destroy()
		MagC.Parent = objs[10]
		MagC.Name = "MagC"
		local MagCW = Instance.new("Motor6D")
		MagCW.Part0 = MagC
		MagCW.Part1 = objs[5]
		MagCW.Parent = MagC
		MagCW.C1 = MagC.CFrame:toObjectSpace(objs[4].CFrame)
		objs[4].Transparency = 1
		
		objs[6]:WaitForChild("MagOut"):Play()		
		
		ts:Create(objs[3],TweenInfo.new(0.4),{C1 = CFrame.new(-0.970892727, 0.365644425, -3.30391622, 0.545084536, -0.836516321, 0.0558858961, -0.482962906, -0.258818835, 0.836516321, -0.685295284, -0.482962966, -0.545084476)}):Play()
		ts:Create(objs[2],TweenInfo.new(0.13),{C1 = CFrame.new(-1.83314121, 0.112866193, -1.15439999, 0.758022368, -0.558526218, -0.336824089, 0.157115281, -0.344846308, 0.925416529, -0.633021891, -0.75440675, -0.173648208)}):Play()
		wait(0.1)
		ts:Create(objs[2],TweenInfo.new(0.4),{C1 = CFrame.new(-1.83314121, 0.112866193, -0.954399943, 0.758022368, -0.558526218, -0.336824089, 0.157115281, -0.344846308, 0.925416529, -0.633021891, -0.75440675, -0.173648208)}):Play()
		ts:Create(objs[3],TweenInfo.new(0.5),{C1 = CFrame.new(-2.63354445, 0.365644455, -0.92290014, -0.0482801795, -0.826441228, 0.560948968, 0.376857162, 0.505025029, 0.776484549, -0.925012231, 0.248886406, 0.287067622)}):Play()
		wait(0.55)
		ts:Create(objs[3],TweenInfo.new(0.3),{C1 = CFrame.new(-1.98033559, 0.365644455, -1.12859631, -0.281058222, -0.892398655, -0.353031129, -0.101086289, -0.338284373, 0.935598731, -0.954351902, 0.298644274, 0.00486823916)}):Play()
		wait(0.22)
		ts:Create(objs[3],TweenInfo.new(0.3),{C1 = CFrame.new(-0.970892727, 0.365644425, -3.30391622, 0.545084536, -0.836516321, 0.0558858961, -0.482962906, -0.258818835, 0.836516321, -0.685295284, -0.482962966, -0.545084476)}):Play()
		wait(0.22)
		objs[6]:WaitForChild('MagIn'):Play()
		ts:Create(objs[3],TweenInfo.new(0.2),{C1 = CFrame.new(-0.570892751, 0.765644431, -2.10391617, 0.545084536, -0.836516321, 0.0558858961, -0.482962906, -0.258818835, 0.836516321, -0.685295284, -0.482962966, -0.545084476)}):Play()
		wait(0.16)
		ts:Create(objs[2],TweenInfo.new(0.13),{C1 = CFrame.new(-1.83314121, 0.112866186, -0.954399943, 0.758022368, -0.558526218, -0.336824089, 0.0448053852, -0.470608532, 0.881203771, -0.650687635, -0.683063805, -0.331706822)}):Play()
		ts:Create(objs[3],TweenInfo.new(0.13),{C1 = CFrame.new(-0.543338716, 0.753075361, -2.10391617, 0.491499543, -0.870869577, -0.00377259403, -0.594625771, -0.338752329, 0.729154944, -0.63627702, -0.356136084, -0.684338093)}):Play()
		wait(0.13)
		MagC:Destroy()
		objs[4].Transparency = 0
	end;

	BoltBackAnim = function(char, speed, objs)
		ts:Create(objs[3],TweenInfo.new(0.25),{C1 = CFrame.new(-0.833141267, 0.773836195, -2.03858113, 0.99999994, 0, 0, 0, -0.342020392, 0.939692557, 0, -0.939692557, -0.342020392)}):Play()
		ts:Create(objs[2],TweenInfo.new(0.25),{C1 = CFrame.new(0.913142264, 0.148002237, -1.70057297, 0.830184042, -0.282718122, 0.480483919, -0.557166755, -0.450079024, 0.697849274, 0.0189610645, -0.84705317, -0.531169653)}):Play()
		wait(0.26)
		objs[5]:WaitForChild("BoltBack"):Play()
		ts:Create(objs[2],TweenInfo.new(0.2),{C1 = CFrame.new(0.628990233, -0.319528729, -1.57020211, 0.830184042, -0.282718122, 0.480483919, -0.557166755, -0.450079024, 0.697849274, 0.0189610645, -0.84705317, -0.531169653)}):Play()
		ts:Create(objs[1],TweenInfo.new(0.2),{C1 = CFrame.new(0, 0, 0.381301403, 1, 0, 0, 0, 1, 0, 0, 0, 1)}):Play()
		ts:Create(objs[3],TweenInfo.new(0.2),{C1 = CFrame.new(-0.833141267, 0.690030336, -2.03858113, 0.99999994, 0, 0, 0, -0.342020392, 0.939692557, 0, -0.939692557, -0.342020392)}):Play()
		wait(0.2)
	end;
	
	BoltForwardAnim = function(char, speed, objs)
		objs[5]:WaitForChild("BoltForward"):Play()
		ts:Create(objs[1],TweenInfo.new(0.1),{C1 = CFrame.new()}):Play()
		ts:Create(objs[2],TweenInfo.new(0.1),{C1 = CFrame.new(0.628990233, -0.87456286, -1.57020211, 0.830184042, -0.282718122, 0.480483919, -0.557166755, -0.450079024, 0.697849274, 0.0189610645, -0.84705317, -0.531169653)}):Play()
		ts:Create(objs[3],TweenInfo.new(0.2),{C1 = CFrame.new(-0.833141267, 1.07258713, -2.03858113, 0.99999994, 0, 0, 0, -0.342020392, 0.939692557, 0, -0.939692557, -0.342020392)}):Play()
		wait(0.2)
	end;
	
	BoltingBackAnim = function(char, speed, objs)
		ts:Create(objs[1],TweenInfo.new(0.1),{C1 = CFrame.new(0, 0, 0.273770154, 1, 0, 0, 0, 1, 0, 0, 0, 1)}):Play()
	end;
	
	BoltingForwardAnim = function(char, speed, objs)
		ts:Create(objs[1],TweenInfo.new(0.1),{C1 = CFrame.new()}):Play()
	end;
	
	nadeReload = function(char, speed, objs)
		ts:Create(objs[1], TweenInfo.new(0.6), {C1 = CFrame.new(-0.902175903, -1.15645337, -1.32277012, 0.984807789, -0.163175702, -0.0593911409, 0, -0.342020363, 0.939692557, -0.17364797, -0.925416529, -0.336824328)}):Play()
		ts:Create(objs[2], TweenInfo.new(0.6), {C1 = CFrame.new(0.805950999, 0.654529691, -1.92835355, 0.787567914, -0.220087856, 0.575584888, -0.323594928, 0.647189975, 0.690240026, -0.524426222, -0.72986728, 0.438486755)}):Play()
		wait(0.6)
		ts:Create(objs[2], TweenInfo.new(0.6), {C1 = CFrame.new(0.805950999, 0.559619546, -1.73060048, 0.802135408, -0.348581612, 0.484839559, -0.597102284, -0.477574915, 0.644508123, 0.00688350201, -0.806481719, -0.59121877)}):Play()
		wait(0.6)		
	end;
	
	fireAnim = function(char, speed, objs)
		-- You can do pretty much anything here like for a sidearm, you can have the hammer animate or any number of things :)
	end;

}

I hope this helps i like to monologue like a villian lmaoz.

1 Like

@TridentXR should make it easier to do it, or have different ways to animate it. That’d be lovely!

1 Like

its good practise, you just gotta find out rotation and position and it will probably will be fine

1 Like

Not just yet. I haven’t had the chance to update it yet.

1 Like

Sure I can do a gun bash animation.

2 Likes

@ShadowAlien98 If it helps you guys, I’m working on creating a Carbon Engine Academy. It teaches you everything you need to know about CE in order to succeed.

3 Likes

Hey! I recently found this new engine and hope to make those plank games. i was wondering how to add custom guns (the guns i got is CE) it says Client, Server, StarterPack. Idk where to put them tho. @TridentXR

1 Like

Search up “Client” in the toolbox, and you know the stuff that are in the folder “Client” in workspace? Put those contents in the “Client” in replicated storage. Do the same thing for server. And the starterpack one, put the stuff that are in there inside of starterpack.

You can also search carbon engine in toolbox, and put the models inside of client into client in replicated storage, same with server. Then put the tools into starterpack.

1 Like

NEVER USE TOOLBOX MODELS! I can’t gaurantee your game’s safety if you use anything from the toolbox other than the official plugin by CarbonFiber09. The plugin has the most up-to-date versions always and is secure. The rest are from other people.

3 Likes

Also, How do i make like a GUI to select the weapons.

Wdym “select the weapons”. Just clone them into the backpack?

image Like this.

1 Like

When the button is pressed, the player gets the tool. (Server script)

button = script.Parent
 --gun name
gun = "G19"
--where gun is located (EX: inside of tools folder in lighting)
location = game.Lighting.Tools[gun] 
--click button
button.MouseButton1Down:Connect(function(plr)
--clone the tool and put it in backpack
location:Clone().Parent = plr.Backpack
end)
3 Likes

Well if he makes it to standard roblox animation, People that dont know how to animate in Normal roblox animator or blender will have a hard time.

2 Likes