diff --git a/DungeonGenerator.h b/DungeonGenerator.h
index ba8388969bbd5d568e3e6f3809eaf4445f3a2ae6..d100a2cfb46553d5917ad3171ce6843efbe1d5d7 100644
--- a/DungeonGenerator.h
+++ b/DungeonGenerator.h
@@ -1,4 +1,9 @@
 #pragma once
+#include <memory>
+
+namespace entities {
+	class PlayerEntity;
+}
 
 class GameClient;
 
@@ -8,6 +13,6 @@ class GameClient;
 class DungeonGenerator
 {
 public:
-	virtual void generate(GameClient& client) = 0;
+	virtual std::shared_ptr<entities::PlayerEntity> generate(GameClient& client) = 0;
 };
 
diff --git a/Entity.cpp b/Entity.cpp
index ff0c886949dfd6f181f83793bb70f3b71c00ed8b..8f54a5ca11fd35b386d578a2e32b8f154d023861 100644
--- a/Entity.cpp
+++ b/Entity.cpp
@@ -5,7 +5,7 @@ using namespace std;
 using namespace olc;
 
 // fine tuning the collision engine, the edges of a box won't collide
-const float ignoreDistance = 0.08f;
+const float ignoreDistance = 0.1f;
 
 namespace entities {
 	/*
diff --git a/TestGenerator.cpp b/TestGenerator.cpp
index ee0244d040a6d5a1b71fde14f7372bbef578183b..e1dd538c5580a455683482fc86dbef79c60ba17d 100644
--- a/TestGenerator.cpp
+++ b/TestGenerator.cpp
@@ -8,7 +8,7 @@
 using namespace entities;
 using namespace std;
 
-void TestGenerator::generate(GameClient& client)
+shared_ptr<PlayerEntity> TestGenerator::generate(GameClient& client)
 {
 	auto* asd = new WallEntity({ -1, 0 });
 	//some random walls, just because why not???
@@ -19,5 +19,8 @@ void TestGenerator::generate(GameClient& client)
 	client += make_shared<WallEntity>(*new WallEntity(olc::vf2d(-1, -1)));
 	client += make_shared<WallEntity>(*asd);
 
-	client += make_shared<PlayerEntity>(*new PlayerEntity({ 0, -4 }, render::CharacterTexture::EngineerTexture));
+	shared_ptr<PlayerEntity> player(new PlayerEntity({ 0, -4 }, render::CharacterTexture::MageTexture));
+
+	client += player;
+	return player;
 }
diff --git a/TestGenerator.h b/TestGenerator.h
index dd534e9f7ba2145bf03cc0e4a64606f89b2d86b7..a16fa5fc19348ee1b93c903870538a777943bd87 100644
--- a/TestGenerator.h
+++ b/TestGenerator.h
@@ -4,6 +4,6 @@ class TestGenerator :
     public DungeonGenerator
 {
 public:
-	void generate(GameClient& client) override;
+	std::shared_ptr<entities::PlayerEntity> generate(GameClient& client) override;
 };
 
diff --git a/mainGame.cpp b/mainGame.cpp
index 7f8c3a1a02a8c39130469d23cdab8b5b0a32badc..5c3678d42a25e594c835eea35250db503bf02ee3 100644
--- a/mainGame.cpp
+++ b/mainGame.cpp
@@ -9,6 +9,9 @@ using namespace std;
 using namespace entities;
 using namespace olc;
 
+const float screenMoveScale = 8;
+const int worldToScreenScale = 16;
+
 GameClient& GameClient::createInstance(bool debug)
 {
 	instance = new GameClient(debug);
@@ -26,6 +29,12 @@ DynamicArray<std::shared_ptr<entities::Entity>>& GameClient::getEntities()
 	return this->entities;
 }
 
+void GameClient::updateWorldOffset(float dTick)
+{
+	vf2d delta = scene.GetWorldOffset() + this->GetScreenPixelSize()/2.f + vf2d(4, 0);
+	scene.MoveWorldOffset((player->getPos() - delta) * dTick * screenMoveScale);
+}
+
 GameClient& GameClient::getInstance()
 {
 	return *instance;
@@ -37,10 +46,10 @@ bool GameClient::OnUserCreate()
 	//Set resource parent!
 	render::ResourceManager::createInstance();
 
-	scene.Initialise(this->GetWindowSize(), {16, 16}); // uh. idk. maybe that's the best option
+	scene.Initialise(this->GetScreenPixelSize(), {worldToScreenScale, worldToScreenScale}); // uh. idk. maybe that's the best option
 	
 	TestGenerator generator;
-	generator.generate(*this);
+	player = generator.generate(*this);
 
 	
 	return true;
@@ -69,7 +78,8 @@ bool GameClient::OnUserUpdate(float fElapsedTime)
 			return !entity->isAlive();
 		});
 
-	scene.SetWorldOffset(this->viewArea);
+	this->updateWorldOffset(fElapsedTime);
+	
 	
 	for(auto& entity : entities){
 		// I literally add entities to the scene :D
diff --git a/mainGame.h b/mainGame.h
index 2a675433c796d89143ac4e538538d1996ca38f98..aa0dd5d5ad3f3999186627dccb0a010f679c437b 100644
--- a/mainGame.h
+++ b/mainGame.h
@@ -3,6 +3,7 @@
 #include "DynamicArray.hpp"
 #include <memory>
 #include "Entity.h"
+#include "PlayerEntity.h"
 
 
 class GameClient :
@@ -17,6 +18,8 @@ private:
 	//olc::vf2d viewScale = {2, 2};
 	bool debug;
 	olc::TransformedView scene;
+	std::shared_ptr<entities::PlayerEntity>	player;
+	void updateWorldOffset(float dTick);
 public:
 	static GameClient& getInstance();