Index: Daodan/src/Daodan.c
===================================================================
--- Daodan/src/Daodan.c	(revision 883)
+++ Daodan/src/Daodan.c	(revision 893)
@@ -2,4 +2,5 @@
 #include <string.h>
 #include <stdio.h>
+#include <time.h>
 
 #include "Daodan.h"
@@ -11,4 +12,5 @@
 #include "Daodan_Config.h"
 #include "patches/Patches.h"
+#include "_Version.h"
 
 #include "Oni.h"
@@ -22,5 +24,13 @@
 void __cdecl DDrMain(int argc, char* argv[])
 {
-	DDrStartupMessage("Daodan: Daodan attached!");
+	time_t rawtime;
+	struct tm* timeinfo;
+	char buffer[80];
+	time(&rawtime);
+	timeinfo = localtime(&rawtime);
+	strftime(buffer, 80, "Daodan: %Y-%m-%d %H:%M:%S", timeinfo);
+
+	DDrStartupMessage("Daodan: Daodan v."DAODAN_VERSION_STRING" attached!");
+	DDrStartupMessage(buffer);
 	
 	DDrConfig(argc, argv);
Index: Daodan/src/Daodan_Config.c
===================================================================
--- Daodan/src/Daodan_Config.c	(revision 883)
+++ Daodan/src/Daodan_Config.c	(revision 893)
@@ -37,4 +37,5 @@
 bool patch_projaware = true;
 bool patch_safeprintf = true;
+bool patch_showalllasersights = false;
 bool patch_throwtest = false;
 bool patch_usedaodangl = true;
@@ -152,4 +153,6 @@
 			else if (!_stricmp(name, "safeprintf"))
 				patch_safeprintf = !_stricmp(inifile_cleanstr(value), "true");
+			else if (!_stricmp(name, "showalllasersights"))
+				patch_showalllasersights = !_stricmp(inifile_cleanstr(value), "true");
 			else if (!_stricmp(name, "throwtest"))
 				patch_throwtest = !_stricmp(inifile_cleanstr(value), "true");
Index: Daodan/src/Daodan_Config.h
===================================================================
--- Daodan/src/Daodan_Config.h	(revision 883)
+++ Daodan/src/Daodan_Config.h	(revision 893)
@@ -32,4 +32,5 @@
 extern bool patch_projaware;
 extern bool patch_safeprintf;
+extern bool patch_showalllasersights;
 extern bool patch_throwtest;
 extern bool patch_usedaodangl;
Index: Daodan/src/Daodan_GL.c
===================================================================
--- Daodan/src/Daodan_GL.c	(revision 883)
+++ Daodan/src/Daodan_GL.c	(revision 893)
@@ -85,4 +85,6 @@
 			if (dm.dmBitsPerPel < DD_MIN_DEPTH || dm.dmPelsWidth < 640 || dm.dmPelsHeight < 480)
 				continue;
+			if (dm.dmPelsWidth < dm.dmPelsHeight)
+				continue;
 
 			// Already exists? Search backwards as modes are sorted most of the times
Index: Daodan/src/Oni_Symbols.h
===================================================================
--- Daodan/src/Oni_Symbols.h	(revision 883)
+++ Daodan/src/Oni_Symbols.h	(revision 893)
@@ -82,4 +82,7 @@
 #define OBJgTriggerVolume_Visible	(*((bool*)0x005ec6c4))
 
+//#define OBJgFlag_DrawFlags	(*((void*)0x005ec624))
+//#define OBJgFlag_ViewPrefix	(*((void*)0x005ec650))
+//#define OBJgFlag_DrawNameDistance	(*((void*)0x005ec634))
 
 // Method signature for script (BSL) functions
@@ -206,4 +209,5 @@
 
 DefFunc(int, OBJrObjectType_EnumerateObjects, ONICALL, (int inObjectType, OBJtEnumCallback_Object inEnumCallback, int inUserData), 0x004D0080);
+//DefFunc(void, OBJrTriggerVolume_IntersectsCharacter, ONICALL, (), 0x004cc680);
 
 DefFunc(void, OBJrDoor_Open, ONICALL, (DoorObject *inObject, Character *inCharacter), 0x004C26C0);
@@ -215,5 +219,19 @@
 DefFunc(void, ONiDrawWeaponSight, ONICALL, (Character* Char), 0x004E1900);
 DefFunc(void, AI2rDisplayDebuggingInfo, ONICALL, (Character* Char), 0x0048C5F0);
-DefFunc(uint32_t, M3rTextureMap_New, ONICALL, (short width, short height, int type, int allocated, int flags, char* name, void** output), 0x041EB00);
+DefFunc(uint32_t, M3rTextureMap_New, ONICALL, (short width, short height, int type, int allocated, int flags, char* name, void** output), 0x0041EB00);
+/*
+DefFunc(void, M3rGeom_Line_Light, ONICALL, (), 0x0041f440);
+DefFunc(void, M3rMatrixStack_Push, ONICALL, (), 0x0041baa0);
+DefFunc(void, M3rMatrixStack_Get, ONICALL, (), 0x0041bb20);
+DefFunc(void, M3rMatrixStack_Pop, ONICALL, (), 0x0041bb30);
+DefFunc(void, M3rMatrixStack_Identity, ONICALL, (), 0x0041bba0);
+DefFunc(void, M3rMatrixStack_Rotate, ONICALL, (), 0x0041bbe0);
+DefFunc(void, M3rMatrixStack_UniformScale, ONICALL, (), 0x0041bc20);
+DefFunc(void, M3rMatrixStack_Translate, ONICALL, (), 0x0041bc40);
+DefFunc(void, M3rMatrixStack_Multiply, ONICALL, (), 0x0041bc70);
+DefFunc(void, M3rGeom_State_Commit, ONICALL, (), 0x0041e870);
+
+DefFunc(void, MUrPoint_Distance, ONICALL, (), 0x00433270);
+*/
 
 // Make a dialog element (in)visible and change its position
Index: Daodan/src/_Version.h
===================================================================
--- Daodan/src/_Version.h	(revision 883)
+++ Daodan/src/_Version.h	(revision 893)
@@ -6,5 +6,5 @@
 
 #define DAODAN_VERSION_MAJOR 3
-#define DAODAN_VERSION_MINOR 3
+#define DAODAN_VERSION_MINOR 4
 #define DAODAN_VERSION_STRING STRINGIZE(DAODAN_VERSION_MAJOR) "." STRINGIZE(DAODAN_VERSION_MINOR)
 
Index: Daodan/src/patches/Patches.c
===================================================================
--- Daodan/src/patches/Patches.c	(revision 883)
+++ Daodan/src/patches/Patches.c	(revision 893)
@@ -13,4 +13,5 @@
 #include "../flatline/Flatline_Hooks.h"
 #include "../Oni.h"
+//#include "Objt.h"
 
 typedef int (__cdecl *CHINESEPROC)(DWORD ThreadId); 
@@ -247,5 +248,4 @@
 void DD_Patch_Flatline()
 {
-	DDrPatch_NOOP((char*)(OniExe + 0x000E1957), 6 );
 	DDrPatch_MakeCall((void*)(OniExe + 0x000E17F6), FLrHook_Lasers );
 	
@@ -379,4 +379,10 @@
 }
 
+// Show all (also enemies') lasersights
+void DD_Patch_ShowAllLasersights()
+{
+	DDrPatch_NOOP((char*)(OniExe + 0x000E1957), 6 );
+}
+
 // Experiment with allowing enemies to be thrown over railings
 void DD_Patch_Throwtest()
@@ -479,4 +485,16 @@
 }
 
+/*
+void DD_Patch_ShowTriggerVolumes()
+{
+	DDrPatch_Int32((int*)(OniExe + 0x000cc9bb+4), (uint32_t)DD_OBJiTriggerVolume_Draw);
+}
+
+void DD_Patch_ShowFlags()
+{
+	DDrPatch_Int32((int*)(OniExe + 0x000c4ed4+4), (uint32_t)DD_OBJiFlag_Draw);
+}
+*/
+
 bool DD_Patch_Init()
 {
@@ -560,4 +578,7 @@
 	if (patch_safeprintf)
 		DD_Patch_SafePrintf();
+
+	if (patch_showalllasersights)
+		DD_Patch_ShowAllLasersights();
 	
 	if (patch_throwtest)
@@ -582,5 +603,8 @@
 
 	DD_Patch_ShowNames();
-
+/*
+	DD_Patch_ShowTriggerVolumes();
+	DD_Patch_ShowFlags();
+*/
 	if (patch_flatline)
 		DD_Patch_Flatline();
