Index: /Daodan/build.bat
===================================================================
--- /Daodan/build.bat	(revision 436)
+++ /Daodan/build.bat	(revision 437)
@@ -1,1 +1,1 @@
-gcc -O3 -s -Wall -shared -fomit-frame-pointer -o build\binkw32.dll src\Oni_Symbols.S src\Daodan.c src\Daodan_DLLStubs.c src\Daodan_Patch.c src\Daodan_Utility.c src\Daodan_Win32.c src\Daodan_Cheater.c src\Daodan_Persistence.c src\Daodan_WindowHack.c src\daodan_gl.c src\Daodan_Character.c src\inifile_reader.c -lgdi32
+gcc -O3 -s -Wall -shared -fomit-frame-pointer -o build\binkw32.dll src\Oni_Symbols.S src\Daodan.c src\Daodan_DLLStubs.c src\Daodan_Patch.c src\Daodan_Utility.c src\Daodan_Win32.c src\Daodan_Cheater.c src\Daodan_Persistence.c src\Daodan_WindowHack.c src\daodan_gl.c src\Daodan_Character.c src\Daodan_Console.c src\inifile_reader.c -lgdi32
Index: /Daodan/src/BFW_Utility.h
===================================================================
--- /Daodan/src/BFW_Utility.h	(revision 436)
+++ /Daodan/src/BFW_Utility.h	(revision 437)
@@ -14,5 +14,12 @@
 void    ONICALL UUrPlatform_Terminate();
 
+void ONICALL COrTextArea_Print(uint32_t area, uint32_t priority, uint32_t textshade, uint32_t textshadowshade, const char* text, uint32_t unk_alwaws_0, uint32_t fadetime);
+
 int __cdecl AUrMessageBox(int Buttons, char *Message, ...);
+
+extern uint32_t COgConsoleLines;
+extern uint32_t COgFadeTimeValue;
+extern uint32_t COgDefaultTextShade;
+extern uint32_t COgDefaultTextShadow;
 
 extern FILE* ONgFileStartup;
Index: /Daodan/src/Daodan_Console.c
===================================================================
--- /Daodan/src/Daodan_Console.c	(revision 437)
+++ /Daodan/src/Daodan_Console.c	(revision 437)
@@ -0,0 +1,25 @@
+#include <stdlib.h>
+#include <stdarg.h>
+#include <stdint.h>
+
+#include "Daodan_Console.h"
+#include "BFW_Utility.h"
+
+void DDrConsole_Print(const char* text)
+{
+	COrTextArea_Print(COgConsoleLines, 1, COgDefaultTextShade, COgDefaultTextShadow, text, 0, COgFadeTimeValue);
+}
+
+void DDrConsole_PrintF(const char* fmt, ...)
+{
+	va_list ap;
+	va_start(ap, fmt);
+	char* buffer = malloc(vsnprintf(NULL, 0, fmt, ap) + 1);
+	
+	vsprintf(buffer, fmt, ap);
+	va_end(ap);
+
+	DDrConsole_Print(buffer);
+	free(buffer);
+	return;
+}
Index: /Daodan/src/Daodan_Console.h
===================================================================
--- /Daodan/src/Daodan_Console.h	(revision 437)
+++ /Daodan/src/Daodan_Console.h	(revision 437)
@@ -0,0 +1,12 @@
+#pragma once
+#ifndef DAODAN_PERSISTENCE_H
+#define DAODAN_PERSISTENCE_H
+
+#include <stdint.h>
+
+#include "Daodan.h"
+
+void DDrConsole_Print(const char* text);
+void DDrConsole_PrintF(const char* fmt, ...);
+
+#endif
Index: /Daodan/src/Oni.h
===================================================================
--- /Daodan/src/Oni.h	(revision 436)
+++ /Daodan/src/Oni.h	(revision 437)
@@ -18,3 +18,5 @@
 extern ONtPlatformData ONgPlatformData;
 
+extern void* ONgGameState;
+
 #endif
Index: /Daodan/src/Oni_Character.h
===================================================================
--- /Daodan/src/Oni_Character.h	(revision 436)
+++ /Daodan/src/Oni_Character.h	(revision 437)
@@ -5,4 +5,5 @@
 #include "Daodan.h"
 #include <stdint.h>
+#include <stdbool.h>
 
 typedef struct {
@@ -22,5 +23,5 @@
 	float RotationScale[9];
 	Vector3 Translation;
-} Matrix4x3
+} Matrix4x3;
 
 typedef struct {
@@ -83,5 +84,5 @@
 	Action2_Fire1                    = 0x40,
 	Action2_Fire2                    = 0x80,
-	Action2_Fire3                    = 0x100
+	Action2_Fire3                    = 0x100,
 };
 
@@ -193,4 +194,5 @@
 	int32_t Bone; //duh
 } AttachedParticle;
+
 typedef struct { //Inventory
 	int32_t Weapons[3];
@@ -213,5 +215,5 @@
 } Inventory;
 
-typedef strcut { //ActiveCharacter
+typedef struct { //ActiveCharacter
 	int16_t Number;
 	int16_t field_2; //probably Number is an int32
@@ -492,5 +494,5 @@
 	int32_t field_8BB; 
 	int32_t PatrolPathOSD[10];	//actually another struct. Not needed atm.
-	int32_t PatrolPathPoints[5][64] //64 of another struct 
+	int32_t PatrolPathPoints[5][64]; //64 of another struct 
 	int32_t field_DE8[98];	//DE8-F70
 	int32_t CombatStatePtr;
Index: /Daodan/src/Oni_Symbols.S
===================================================================
--- /Daodan/src/Oni_Symbols.S	(revision 436)
+++ /Daodan/src/Oni_Symbols.S	(revision 437)
@@ -17,4 +17,5 @@
 symbol ( _g_Instance                         , 0x0021f9e4 )
 symbol ( _ONgPlatformData                    , 0x0023100c )
+symbol ( _ONgGameState                       , 0x001ece7c )
 
 //Oni Persistance
@@ -49,4 +50,11 @@
 
 // Character
-symbol ( @ONrGameState_NewCharacter@16       , 0x000daC50 )
-symbol ( ONrGameState_GetPlayerCharacter@0	 , 0x000B63A7 )
+symbol ( @ONrGameState_NewCharacter@16       , 0x000dac50 )
+symbol ( @ONrGameState_GetPlayerCharacter@0  , 0x000b63a7 )
+
+// Console
+symbol ( @COrTextArea_Print@28               , 0x00031340 )
+symbol ( _COgConsoleLines                    , 0x001cb468 )
+symbol ( _COgFadeTimeValue                   , 0x00133f68 )
+symbol ( _COgDefaultTextShade                , 0x00133f70 )
+symbol ( _COgDefaultTextShadow               , 0x00133f74 )
