Index: Daodan/src/Daodan.c
===================================================================
--- Daodan/src/Daodan.c	(revision 272)
+++ Daodan/src/Daodan.c	(revision 273)
@@ -3,4 +3,5 @@
 #include "Daodan_Utility.h"
 
+#include "Oni.h"
 #include "BFW_Utility.h"
 
@@ -55,4 +56,14 @@
 }
 
+void DDrMain(int argc, char* argv[])
+{
+	DDrPatch_Init();
+	
+	// Safe startup message printer
+	DDrPatch_MakeJump(UUrStartupMessage, DDrStartupMessage);
+	
+	ONiMain(argc, argv);
+}
+
 BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
 {
@@ -63,6 +74,6 @@
 			DDrONiModule = GetModuleHandle(NULL);
 			
-			DDrPatch_MakeJump(UUrStartupMessage, DDrStartupMessage);
-			DDrPatch_Init();
+			DDrPatch_MakeCall((void*)0x00400000 + 0x0010fb49, DDrMain);
+			
 			break;
 	}
Index: Daodan/src/Daodan.h
===================================================================
--- Daodan/src/Daodan.h	(revision 272)
+++ Daodan/src/Daodan.h	(revision 273)
@@ -6,4 +6,6 @@
 #include <stdbool.h>
 
+#define ONICALL __fastcall
+
 extern HMODULE DDrDLLModule;
 extern HMODULE DDrONiModule;
Index: Daodan/src/Oni.h
===================================================================
--- Daodan/src/Oni.h	(revision 273)
+++ Daodan/src/Oni.h	(revision 273)
@@ -0,0 +1,7 @@
+#pragma once
+#ifndef ONI_H
+#define ONI_H
+
+void __cdecl ONiMain(int ArgCount, char *ArgList[]);
+
+#endif
Index: Daodan/src/Oni_Symbols.S
===================================================================
--- Daodan/src/Oni_Symbols.S	(revision 272)
+++ Daodan/src/Oni_Symbols.S	(revision 273)
@@ -1,49 +1,3 @@
 #define symbol(name, value) .global name; .set name, 0x00400000 + value
-
-// Patch locations
-// Font texture cache doubled
-symbol ( Patch_FontCache1      , 0x00020ea7 )
-symbol ( Patch_FontCache2      , 0x00020f4a )
-
-// Now supports textures up to 512x512
-symbol ( Patch_TextureSize     , 0x00005251 )
-
-// Non-"_Final" levels are now valid
-symbol ( Patch_LevelPlugins    , 0x000206a8 )
-
-// Pathfinding grid cache size x8
-symbol ( Patch_PathFind1       , 0x0010b03b )
-symbol ( Patch_PathFind2       , 0x0010b04c )
-
-// Projectile awareness fixed
-symbol ( Patch_Projectile1     , 0x0009c07c )
-symbol ( Patch_Projectile2     , 0x0009c080 )
-symbol ( Patch_Projectile3     , 0x0009c084 )
-symbol ( Patch_Projectile4     , 0x0009c110 )
-
-// Forced DirectInput (for Windows NT)
-symbol ( Patch_DInput          , 0x00002e6d )
-
-// Makes wp_fadetime actually have a function
-symbol ( Patch_WP_Fadetime1    , 0x0011a889 )
-symbol ( Patch_WP_Fadetime2    , 0x0011a560 )
-
-// Weapon fadetime
-symbol ( Patch_Fadetime        , 0x0011ab0e )
-
-// Kicking guns fix
-symbol ( Patch_GunsKick        , 0x000DC420 )
-
-// Cooldown timer exploit fix ^_^
-symbol ( Patch_Cooldown        , 0x0011A825 )
-
-// Replaces the pointer door_drawframes with the pointer for the "Last Man Standing" cheat.
-symbol ( Patch_Door_DFramesPtr , 0x000D8AA0 )
-
-// Replaces the variable name "door_drawframes" with the variable name "chr_lms"
-symbol ( Patch_Door_DFramesStr , 0x0015058C )
-
-// Replaces the description "draws doorframes for all unplaced doors(1 null)" with "turns on Last Man Standing mode(9 nulls)" 
-symbol ( Patch_Door_DFramesDes , 0x00150564 )
 
 // MSVC6.0 stdlib
@@ -52,4 +6,7 @@
 symbol ( _oni_fflush           , 0x0011eab2 )
 
+// Oni Engine
+symbol ( _ONiMain              , 0x000d3280 )
+
 // BFW_Utility
 symbol ( _UUrStartupMessage    , 0x00024860 )
