diff --git a/Images/Enhanced Transform.png b/Images/Enhanced Transform.png
new file mode 100644
index 0000000..9b06549
Binary files /dev/null and b/Images/Enhanced Transform.png differ
diff --git a/Images/Look At.png b/Images/Look At.png
new file mode 100644
index 0000000..083c778
Binary files /dev/null and b/Images/Look At.png differ
diff --git a/README.md b/README.md
index b145308..21568f2 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
# Created-Armory-Nodes
-These are Armory Nodes I've Made...
+These are Armory Nodes I've Made...
- Enhanced Transform
@@ -13,3 +13,7 @@ I want to add the following:
- Near
- Track To
+
+# Images
+![1 Enhanced Transform](Images/Enhanced Transform.png)
+![2 Pane View](Images/Look At.png)
diff --git a/Sources/armory/logicnode/EnhancedTransformNode.hx b/Sources/armory/logicnode/EnhancedTransformNode.hx
new file mode 100644
index 0000000..96099e0
--- /dev/null
+++ b/Sources/armory/logicnode/EnhancedTransformNode.hx
@@ -0,0 +1,43 @@
+package armory.logicnode;
+
+import iron.object.Object;
+import iron.math.Vec4;
+import armory.trait.physics.RigidBody;
+
+
+class EnhancedTransformNode extends LogicNode {
+
+ public function new(tree:LogicTree) {
+ super(tree);
+ }
+
+ override function run() {
+ var object:Object = inputs[1].get();
+ var loc:Vec4 = inputs[2].get();
+ var rot:Vec4 = inputs[3].get();
+ var scale:Vec4 = inputs[4].get();
+
+ if (loc == null || rot == null || scale == null) return;
+
+ // Location transform
+ object.transform.loc.x = loc.x;
+ object.transform.loc.y = loc.y;
+ object.transform.loc.z = loc.z;
+
+ // Rotation transform
+ object.transform.rot.fromEuler(rot.x, rot.y, rot.z);
+ object.transform.buildMatrix();
+
+ // Scale transform
+ object.transform.scale.x = scale.x;
+ object.transform.scale.y = scale.y;
+ object.transform.scale.z = scale.z;
+
+ #if arm_physics
+ var rigidBody = object.getTrait(RigidBody);
+ if (rigidBody != null) rigidBody.syncTransform();
+ #end
+
+ super.run();
+ }
+}
diff --git a/Sources/armory/logicnode/LookAtNode.hx b/Sources/armory/logicnode/LookAtNode.hx
new file mode 100644
index 0000000..e3c8f00
--- /dev/null
+++ b/Sources/armory/logicnode/LookAtNode.hx
@@ -0,0 +1,49 @@
+package armory.logicnode;
+
+import iron.object.Object;
+import iron.math.Vec3;
+import armory.trait.physics.RigidBody;
+
+
+class LookAtNode extends LogicNode {
+
+ public function new(tree:LogicTree) {
+ super(tree);
+ }
+
+ override function run() {
+ var targeter:Object = inputs[1].get();
+ var target:Object = inputs[2].get();
+ var threeDeeTrack:Bool = inputs[3].get();
+
+ var targeterRot:Vec3;
+ var targetLoc:Vec3;
+
+ if (targeter == null || target == null) return;
+
+ targeterRot = new Vec3(targeter.transform.rot.x,
+ targeter.transform.rot.y,
+ targeter.transform.rot.z);
+
+ targetLoc = new Vec3(target.transform.loc.x,
+ target.transform.loc.y,
+ target.transform.loc.z);
+
+ var newZLook = targeterRot.z + (targeterRot.z - (targetLoc.y / targetLoc.x));
+
+ if ( threeDeeTrack == true ) {
+ targeter.transform
+ .setRotation(targeterRot.x, targetLoc.y, newZLook);
+ } else {
+ targeter.transform
+ .setRotation(targeterRot.x, targeterRot.y, newZLook);
+ }
+
+ #if arm_physics
+ var rigidBody = targeter.getTrait(RigidBody);
+ if (rigidBody != null) rigidBody.syncTransform();
+ #end
+
+ super.run();
+ }
+}
diff --git a/blender.py b/blender.py
new file mode 100644
index 0000000..be1dc20
--- /dev/null
+++ b/blender.py
@@ -0,0 +1,40 @@
+from bpy.types import Node
+from arm.logicnode.arm_nodes import *
+import arm.nodes_logic
+
+class EnhancedTransformNode(Node, ArmLogicTreeNode):
+ '''EnhancedTransformNode'''
+ bl_idname = 'LNEnhancedTransformNode'
+ bl_label = 'Enhanced Transform'
+ bl_icon = 'GAME'
+
+ def init(self, context):
+ self.inputs.new('ArmNodeSocketAction', 'In')
+ self.inputs.new('ArmNodeSocketObject', 'Object')
+ self.inputs.new('NodeSocketVector', 'Location')
+ self.inputs.new('NodeSocketVector', 'Rotation')
+ self.inputs.new('NodeSocketVector', 'Scale')
+ self.inputs[-1].default_value = [1.0, 1.0, 1.0]
+ self.outputs.new('ArmNodeSocketAction', 'Out')
+
+class LookAtNode(Node, ArmLogicTreeNode):
+ '''LookAtNode'''
+ bl_idname = 'LNLookAtNode'
+ bl_label = 'Look At'
+ bl_icon = 'GAME'
+
+ def init(self, context):
+ self.inputs.new('ArmNodeSocketAction', 'In')
+ self.inputs.new('ArmNodeSocketObject', 'Object')
+ self.inputs.new('ArmNodeSocketObject', 'Object')
+ self.inputs.new('NodeSocketBool', '3D Track')
+ self.outputs.new('ArmNodeSocketAction', 'Out')
+
+
+def register():
+ # Add custom nodes
+ add_node(EnhancedTransformNode, category='Action')
+ add_node(LookAtNode, category='Action')
+
+ # Register newly added nodes
+ arm.nodes_logic.register_nodes()