Index: /Daodan/src/Daodan.c
===================================================================
--- /Daodan/src/Daodan.c	(revision 454)
+++ /Daodan/src/Daodan.c	(revision 455)
@@ -436,5 +436,10 @@
 	
 	if (patch_cheater)
+	{
 		DDrPatch_MakeCall(OniExe + 0x000f618f, DDrCheater);
+		DDrPatch_Int16(OniExe + 0x000deb45, 0x5590);
+		DDrPatch_MakeCall(OniExe + 0x000deb47, FallingFrames);
+		DDrPatch_MakeJump(OniExe + 0x0010f021, DDrCheater_LevelLoad);
+	}
 	
 	init_daodan_gl();
Index: /Daodan/src/Daodan_Cheater.c
===================================================================
--- /Daodan/src/Daodan_Cheater.c	(revision 454)
+++ /Daodan/src/Daodan_Cheater.c	(revision 455)
@@ -1,3 +1,4 @@
 #include <string.h>
+#include <stdbool.h>
 
 #include "Oni.h"
@@ -71,7 +72,16 @@
 #define ONCC_bodysize_max (0x00000C8C) /* float */
 
+#define kangaroo_h     (60)
+#define kangaroo_jp    (0.06)
+#define marypoppins_jp (0.14)
+
 uint16_t cheat_oldshield = 0;
 int32_t cheat_oldhealth = 0;
 int32_t cheat_oldmaxhealth = 0;
+float cheat_oldjet_accel = 0.03f;
+uint16_t cheat_oldjet_timer = 20;
+float cheat_oldheight1 = 45;
+float cheat_oldheight2 = 135;
+bool inc_fallingframes = true;
 
 uint8_t ONICALL DDrCheater(uint32_t cheat)
@@ -107,4 +117,78 @@
 				cheat_oldshield = *(unsigned short*)(player + CHR_shield);
 				*(unsigned short*)(player + CHR_shield) = 100;
+				return 1;
+			}
+		}
+		case cheat_kangaroo:
+		{
+			char* player = *((char**)(ONgGameState + GSA_player));
+			char* oncc = *(char**)(player + CHR_oncc);
+			if (!inc_fallingframes)
+				inc_fallingframes = true;
+			if (*(unsigned int*)(oncc + ONCC_jet_timer) == kangaroo_h)
+			{
+				*(float*)(oncc + ONCC_jet_accel) = cheat_oldjet_accel;
+				*(unsigned short*)(oncc + ONCC_jet_timer) = cheat_oldjet_timer;
+				*(float*)(oncc + ONCC_height1) = cheat_oldheight1;
+				*(float*)(oncc + ONCC_height2) = cheat_oldheight2;
+				return 0;
+			}
+			else if (*(unsigned int*)(oncc + ONCC_jet_timer) == 0xFFFF)
+			{
+				*(float*)(oncc + ONCC_jet_accel) = kangaroo_jp;
+				*(unsigned short*)(oncc + ONCC_jet_timer) = kangaroo_h;
+				*(float*)(oncc + ONCC_height1) = 0x7f800000;
+				*(float*)(oncc + ONCC_height2) = 0x7f800000;
+				return 1;
+			}
+			else
+			{
+				cheat_oldjet_accel = *(float*)(oncc + ONCC_jet_accel);
+				cheat_oldjet_timer = *(unsigned short*)(oncc + ONCC_jet_timer);
+				cheat_oldheight1 = *(float*)(oncc + ONCC_height1);
+				cheat_oldheight2 = *(float*)(oncc + ONCC_height2);
+				*(float*)(oncc + ONCC_jet_accel) = kangaroo_jp;
+				*(unsigned short*)(oncc + ONCC_jet_timer) = kangaroo_h;
+				*(float*)(oncc + ONCC_height1) = 0x7f800000;
+				*(float*)(oncc + ONCC_height2) = 0x7f800000;
+				return 1;
+			}
+		}
+		case cheat_marypoppins:
+		{
+			char* player = *((char**)(ONgGameState + GSA_player));
+			char* oncc = *(char**)(player + CHR_oncc);
+			if (!inc_fallingframes)
+			{
+				inc_fallingframes = true;
+				if (*(unsigned int*)(oncc + ONCC_jet_timer) == 0xFFFF)
+				{
+					*(float*)(oncc + ONCC_jet_accel) = cheat_oldjet_accel;
+					*(unsigned short*)(oncc + ONCC_jet_timer) = cheat_oldjet_timer;
+					*(float*)(oncc + ONCC_height1) = cheat_oldheight1;
+					*(float*)(oncc + ONCC_height2) = cheat_oldheight2;
+				}
+				return 0;
+			}
+			else if (*(unsigned int*)(oncc + ONCC_jet_timer) == kangaroo_h)
+			{
+				*(float*)(oncc + ONCC_jet_accel) = marypoppins_jp;
+				*(unsigned short*)(oncc + ONCC_jet_timer) = 0xFFFF;
+				*(float*)(oncc + ONCC_height1) = 0x7f800000;
+				*(float*)(oncc + ONCC_height2) = 0x7f800000;
+				inc_fallingframes = false;
+				return 1;
+			}
+			else
+			{
+				cheat_oldjet_accel = *(float*)(oncc + ONCC_jet_accel);
+				cheat_oldjet_timer = *(unsigned short*)(oncc + ONCC_jet_timer);
+				cheat_oldheight1 = *(float*)(oncc + ONCC_height1);
+				cheat_oldheight2 = *(float*)(oncc + ONCC_height2);
+				*(float*)(oncc + ONCC_jet_accel) = marypoppins_jp;
+				*(unsigned short*)(oncc + ONCC_jet_timer) = 0xFFFF;
+				*(float*)(oncc + ONCC_height1) = 0x7f800000;
+				*(float*)(oncc + ONCC_height2) = 0x7f800000;
+				inc_fallingframes = false;
 				return 1;
 			}
@@ -157,2 +241,13 @@
 	}
 }
+
+void ONICALL DDrCheater_LevelLoad()
+{
+	inc_fallingframes = true;
+}
+
+__stdcall void FallingFrames(void* Ebp)
+{
+	if (inc_fallingframes)
+		*((unsigned int*)(Ebp + 0xf6)) = *((unsigned int*)(Ebp + 0xf6)) + 1;
+}
Index: /Daodan/src/Daodan_Cheater.h
===================================================================
--- /Daodan/src/Daodan_Cheater.h	(revision 454)
+++ /Daodan/src/Daodan_Cheater.h	(revision 455)
@@ -47,4 +47,6 @@
 
 uint8_t ONICALL DDrCheater(uint32_t cheat);
+void __stdcall FallingFrames(void* Ebp);
+void ONICALL DDrCheater_LevelLoad();
 
 #endif
