Index: Daodan/src/Daodan_BSL.c
===================================================================
--- Daodan/src/Daodan_BSL.c	(revision 440)
+++ Daodan/src/Daodan_BSL.c	(revision 441)
@@ -3,5 +3,7 @@
 #include "Daodan_BSL.h"
 #include "BFW_ScriptingLanguage.h"
-
+#include <stdio.h>
+#include "Oni.h"
+#include "Oni_Character.h"
 #include "dSFMT\dSFMT.h"
 
@@ -14,4 +16,34 @@
 	return 0;
 }
+
+uint16_t ONICALL bsl_getkills(void* dontuse0, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret)
+{
+
+	//void* GS = (short int**)(ONgGameState);
+
+	//if (numargs < 2)
+	//	return 1;
+	
+	//fix the AC struct :(
+	//ret->value_int32 = ((ActiveCharacter *)(ONgGameState+0xB6268))->NumberOfKills;
+	//short int index =;
+	//char temp_bitset[2];
+	int index2;
+	if (numargs == 0) index2 = 0;
+	else index2 = args[0].value_int32;
+	char* active_index = ONgGameState + index2 * 0x16A0 +  0x1260 + 2;
+	//index = *(*()+ 0x1260 +2);
+	//ret->value_int32 = *((signed int*)(ONgGameState)) +0xB6268+(*(((signed int*)(ONgGameState)) + 0xAC)+2)*0x2838+0x1670;
+	//ret->value_int32 = *(int*)(ONgGameState +0xB6268 + index2 * 0x2838 + 0x1670);
+	
+	//TODO: Clean up this mess...
+//	ret->value_int32 = *active_index;
+	
+	ret->value_int32 = ((uint32_t*)(ONgGameState +0xB6268+(int)(*active_index)*0x2838+0x1670));
+
+	ret->type = sl_int32;
+	return 0;
+}
+
 
 uint16_t ONICALL bsl_mul(void* dontuse0, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret)
@@ -69,4 +101,30 @@
 	return 0;
 }
+uint16_t ONICALL bsl_sprintf(void* dontuse0, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret)
+{
+	if (numargs < 2)
+		return 1;
+	
+
+<<<<<<< .mine
+	char output[255];
+	char temp[255];
+	int i = 1;
+	for(i; i < numargs; i++)	{
+		sprintf(output, args[0].value_str32, args[i].value_str32);/*
+		if(args[i].type == sl_int32 || args[i].type == sl_bool) {
+			sprintf(temp, "%i",args[i].value_int32);
+			sprintf(output, args[0].value_str32, temp); }
+		else if(args[i].type == sl_float) {
+			sprintf(temp, "%f",args[i].value_float);
+			sprintf(output, args[0].value_str32, temp); }
+		else */
+	}
+	
+	ret->value_str32 = output;
+	ret->type = sl_str32;
+	return 0;
+}
+
 
 uint16_t ONICALL bsl_int32rand(void* dontuse0, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret)
@@ -96,4 +154,5 @@
 }
 
+
 void SLrDaodan_Initalize()
 {
@@ -103,6 +162,13 @@
 	SLrScript_Command_Register_ReturnType("int32div", "Divides two numbers", "n1:int n2:int", sl_int32, bsl_int32div);
 	SLrScript_Command_Register_ReturnType("div", "Divides two numbers", "[int1:int|float1:float] [int2:int|float2:float]", sl_float, bsl_div);
+
+	
+	SLrScript_Command_Register_ReturnType("sprintf", "sprintf", "str1:format str2:value [str3:...]", sl_str32, bsl_sprintf);
+
+	SLrScript_Command_Register_ReturnType("getkills","Gets the number of kills", "[n1:int]", sl_int32, bsl_getkills);
+
 	
 	dsfmt_gv_init_gen_rand((uint32_t)time(NULL));
 	SLrScript_Command_Register_ReturnType("int32rand", "Returns a pseudo-random number between two numbers (inclusive).", "start:int end:int", sl_int32, bsl_int32rand);
+>>>>>>> .r440
 }
Index: Daodan/src/Oni_Character.h
===================================================================
--- Daodan/src/Oni_Character.h	(revision 440)
+++ Daodan/src/Oni_Character.h	(revision 441)
@@ -536,19 +536,19 @@
 };
 
-
-int	chr_isplayer			=		0x00000001;	//is player character
-int	chr_randomskin			=		0x00000002;	//gets random skin from ONCV
-int	chr_notprespawned		=		0x00000004;	//isn't spawned at level creation
-int	chr_noncombatant		=		0x00000008;	//doesn't fight
-int	chr_multispawnable		=		0x00000010;	//can spawn up to 5 without forcing
-int	chr_unknown				=		0x00000020;	//
-int	chr_unkillable			=		0x00000040;	//can only be brought to 1 hp
-int	chr_superammo			=		0x00000080;	//infinite ammo
-int	chr_omniscient			=		0x00000100;	//touchofdeath
-int	chr_haslsi				=		0x00000200;	//drops an lsi
-int	chr_boss				=		0x00000400;	//is a boss character
-int	chr_upgradedifficulty	=		0x00000800;	//upgrade the difficulty if you play on med\hard
-int	chr_noautodrop			=		0x00001000;	//uses drop fields instead of has fields on death
-
+enum {
+chr_isplayer			=		0x00000001,	//is player character
+chr_randomskin			=		0x00000002,	//gets random skin from ONCV
+chr_notprespawned		=		0x00000004,	//isn't spawned at level creation
+chr_noncombatant		=		0x00000008,	//doesn't fight
+chr_multispawnable		=		0x00000010,	//can spawn up to 5 without forcing
+chr_unknown				=		0x00000020,	//
+chr_unkillable			=		0x00000040,	//can only be brought to 1 hp
+chr_superammo			=		0x00000080,	//infinite ammo
+chr_omniscient			=		0x00000100,	//touchofdeath
+chr_haslsi				=		0x00000200,	//drops an lsi
+chr_boss				=		0x00000400,	//is a boss character
+chr_upgradedifficulty	=		0x00000800,	//upgrade the difficulty if you play on med\hard
+chr_noautodrop			=		0x00001000,	//uses drop fields instead of has fields on death
+}; //
 int16_t ONICALL ONrGameState_NewCharacter(CharacterObject* CHAR, void* AISA, void* flag, int* list_location);
 //int16_t ONICALL ONrGameState_GetPlayerCharacter();
